示例#1
0
def test_pwr2():
    env = stdlib.copy()
    evaldef(
        "pwr2   =   ap ap s ap ap c ap eq 0 1 ap ap b ap mul 2 ap ap b pwr2 ap add -1",
        env,
    )
    assert eval(parse("ap pwr2 8".split()), env) == Number(256)
示例#2
0
def test_true_returns_bool():
    assert eval(parse("t".split())) == stdlib["t"]
示例#3
0
def test_div_returns_integer():
    assert eval(parse("ap ap div 10 4".split())) == Number(2)
示例#4
0
def test_div_with_two_numbers_returns_result():
    assert eval(parse("ap ap div 12 4".split())) == Number(3)
示例#5
0
def test_c_combinator():
    assert eval(parse("ap ap ap c add 1 2".split())) == Number(3)
示例#6
0
def test_lt_with_lhs_greater_than_rhs_returns_false():
    assert eval(parse("ap ap lt 2 1".split())) == stdlib["f"]
示例#7
0
def test_lt_with_equal_numbers_returns_false():
    assert eval(parse("ap ap lt 1 1".split())) == stdlib["f"]
示例#8
0
def test_eq_with_numbers():
    assert eval(parse("ap ap eq 1 1".split())) == stdlib["t"]
    assert eval(parse("ap ap eq 1 2".split())) == stdlib["f"]
示例#9
0
def test_inc_with_number_returns_next_number():
    assert eval(Apply(Var("inc"), Number(5))) == Number(6)
示例#10
0
def test_eval_with_var_looks_up_value():
    assert eval(Var("x"), {"x": Number(5)}) == Number(5)
示例#11
0
def test_f_combinator():
    assert eval(parse("ap ap f 1 5".split())) == Number(5)
    assert eval(parse("ap ap f f ap inc 5".split())) == Number(6)
    assert eval(parse("ap ap f ap inc 5 t".split())) == stdlib["t"]
示例#12
0
def test_eval_with_negative_number_returns_number():
    program = Number(-5)
    assert eval(program) == program
示例#13
0
def test_t_combinator():
    assert eval(parse("ap ap t 1 5".split())) == Number(1)
    assert eval(parse("ap ap t t ap inc 5".split())) == stdlib["t"]
    assert eval(parse("ap ap t ap inc 5 t".split())) == Number(6)
    assert eval(parse("ap ap t t i".split())) == stdlib["t"]
示例#14
0
def test_b_combinator():
    assert eval(parse("ap ap ap b inc dec 5".split())) == Number(5)
示例#15
0
def test_false_returns_bool():
    assert eval(parse("f".split())) == stdlib["f"]
示例#16
0
def test_add_with_two_numbers_returns_result():
    # ap (ap add 5) 6
    assert eval(Apply(Apply(Var("add"), Number(5)), Number(6))) == Number(11)
示例#17
0
def test_eval_with_positive_number_returns_number():
    program = Number(5)
    assert eval(program) == program
示例#18
0
def test_parse_app():
    exp = parse(["ap", "ap", "add", "1", "2"])
    assert eval(exp) == Number(3)
示例#19
0
def test_eq_with_bool():
    assert eval(parse("ap ap eq t t".split())) == stdlib["t"]
    assert eval(parse("ap ap eq t f".split())) == stdlib["f"]
示例#20
0
def test_parse_app2():
    # From the video
    exp = parse("ap dec ap ap add 1 2".split())
    assert eval(exp) == Number(2)
示例#21
0
def test_lt_with_lhs_less_than_rhs_returns_true():
    assert eval(parse("ap ap lt 1 2".split())) == stdlib["t"]
示例#22
0
def test_mul_with_two_numbers_returns_result():
    assert eval(parse("ap ap mul 3 4".split())) == Number(12)
示例#23
0
def test_neg_with_negative_returns_positive():
    assert eval(parse("ap neg -5".split())) == Number(5)
示例#24
0
def test_s_combinator():
    assert eval(parse("ap ap ap s add inc 1".split())) == Number(3)
    assert eval(parse("ap ap ap s mul ap add 1 6".split())) == Number(42)