fully working evaluator and most unit tests