from btl_syntax import * # using all of the module on purpose import btl_interpreter def test_constructor(): sample = Pred(If(IsZero(Zero()), Succ(Succ(Zero())), Zero())) assert(sample.to_string() == "Pred(If(IsZero(Zero), Succ(Succ(Zero)), Zero))") sample = If(IsZero(Zero()), Succ(Succ(Zero())), Zero()) assert(sample.to_string() == "If(IsZero(Zero), Succ(Succ(Zero)), Zero)") def test_number_interpretation(): x = Succ(Succ(Succ(Zero()))) assert(btl_interpreter.eval(x) == 3) x = Pred(Succ(Succ(Zero()))) assert(btl_interpreter.eval(x) == 1) x = If(IsZero(Zero()), Succ(Succ(Zero())), Zero()) assert(btl_interpreter.eval(x) == 2) x = If(IsZero(Succ(Zero())), Succ(Succ(Zero())), Zero()) assert(btl_interpreter.eval(x) == 0) x = Pred(Pred(Zero())) assert(btl_interpreter.eval(x) == 0) test_constructor() test_number_interpretation() print("all tests pass")