예제 #1
0
def test_instantiate_target_def_overwrite():
    l = make_linklet("(linklet () (x) (define-values (x) 4) (+ x x))")
    t = make_instance({'x':1,'y':2})
    result, t = eval_fixnum(l, t)
    assert result == 8
    assert check_val(t, "x", 4)
    assert check_val(t, "y", 2)
예제 #2
0
def test_instantiate_target_def_stays_the_same():
    # if linklet doesn't export, then target's def stay the same
    l = make_linklet("(linklet () () (define-values (x) 4) (+ x x))")
    t = make_instance(
        "(linklet () () (define-values (x) 1) (define-values (y) 2))")
    result, t = eval_fixnum(l, t)
    assert result == 8
    assert check_val(t, "x", 1)
    assert check_val(t, "y", 2)

    # use the local var, don't change target's var if you don't export
    l = make_linklet("(linklet () () (define-values (x) 4) (+ x x))")
    t1 = make_instance("(linklet () () (define-values (x) 10))")
    t2 = make_instance("(linklet () (x) (define-values (x) 10))")
    result1, t1 = eval_fixnum(l, t1)
    result2, t2 = eval_fixnum(l, t2)
    assert result1 == 8 and result2 == 8
    assert check_val(t1, "x", 10)
    assert check_val(t2, "x", 10)

    # imported variables doesn't get into target at all ...
    l1 = make_instance("(linklet () (x) (define-values (x) 4))")
    l2 = make_linklet("(linklet ((x)) () (+ x x))")
    result, t = eval_fixnum(l2, empty_target(), [l1])
    assert result == 8
    assert not defines(t, "x")

    # ... let alone overwrite any var inside the target
    l1 = make_instance("(linklet () (x) (define-values (x) 4))")
    l2 = make_linklet("(linklet ((x)) () (+ x x))")
    t = make_instance("(linklet () () (define-values (x) 1))")
    result, t = eval_fixnum(l2, t, [l1])
    assert result == 8
    assert check_val(t, "x", 1)
예제 #3
0
def test_instantiate_eval_define_values():
    l = make_linklet("(linklet () ((x x15)) (define-values (x) 4) (+ x x))")
    t = make_instance("(linklet () ((x x16)) (define-values (x) 1000))")
    _, t = eval_fixnum(l, t)
    assert defines(t, "x15") and defines(t, "x16") and not defines(t, "x")
    assert check_val(t, "x15", 4)
    assert check_val(t, "x16", 1000)
예제 #4
0
def test_instantiate_target_def_overwrite():
    l = make_linklet("(linklet () (x) (define-values (x) 4) (+ x x))")
    t = make_instance({'x': 1, 'y': 2})
    result, t = eval_fixnum(l, t)
    assert result == 8
    assert check_val(t, "x", 4)
    assert check_val(t, "y", 2)
예제 #5
0
def test_instantiate_eval_define_values():
    l = make_linklet("(linklet () ((x x15)) (define-values (x) 4) (+ x x))")
    t = inst(make_linklet("(linklet () ((x x16)) (define-values (x) 1000))"))
    _, t = eval_fixnum(l, t)
    assert defines(t, "x15") and defines(t, "x16") and not defines(t, "x")
    assert check_val(t, "x15", 4)
    assert check_val(t, "x16", 1000)
예제 #6
0
def test_instantiate_target_def_stays_the_same():
    # if linklet doesn't export, then target's def stay the same
    l = make_linklet("(linklet () () (define-values (x) 4) (+ x x))")
    t = make_instance({'x':1,'y':2})
    result, t = eval_fixnum(l, t)
    assert result == 8
    assert check_val(t, "x", 1)
    assert check_val(t, "y", 2)

    # use the local var, don't change target's var if you don't export
    l = make_linklet("(linklet () () (define-values (x) 4) (+ x x))")
    t1 = inst(make_linklet("(linklet () (x) (define-values (x) 10))"))
    t2 = inst(make_linklet("(linklet () (x) (define-values (x) 10))"))
    result1, t1 = eval_fixnum(l, t1)
    result2, t2 = eval_fixnum(l, t2)
    assert result1 == 8 and result2 == 8
    assert check_val(t1, "x", 10)
    assert check_val(t2, "x", 10)

    # imported variables doesn't get into target at all ...
    l1 = inst(make_linklet("(linklet () (x) (define-values (x) 4))"))
    l2 = make_linklet("(linklet ((x)) () (+ x x))")
    result, t = eval_fixnum(l2, empty_target(), [l1])
    assert result == 8
    assert not defines(t, "x")

    # ... let alone overwrite any var inside the target
    l1 = make_instance({'x':4})
    l2 = make_linklet("(linklet ((x)) () (+ x x))")
    t = make_instance({'x':1})
    result, t = eval_fixnum(l2, t, [l1])
    assert result == 8
    assert check_val(t, "x", 1)
예제 #7
0
def test_instantiate_export_rename():
    l1 = inst(make_linklet("(linklet () ((x1 x)) (define-values (x1) 4))"))
    l2 = make_linklet("(linklet ((x)) ((y1 y)) (define-values (y1) x) (+ x y1))")
    assert check_val(l1, "x", 4)
    result, t = eval_fixnum(l2, empty_target(), [l1])
    assert result == 8
    assert check_val(t, "y", 4)
    assert not defines(t, "x")
예제 #8
0
def test_instantiate_export_rename():
    l1 = make_instance("(linklet () ((x1 x)) (define-values (x1) 4))")
    l2 = make_linklet(
        "(linklet ((x)) ((y1 y)) (define-values (y1) x) (+ x y1))")
    assert check_val(l1, "x", 4)
    result, t = eval_fixnum(l2, empty_target(), [l1])
    assert result == 8
    assert check_val(t, "y", 4)
    assert not defines(t, "x")
예제 #9
0
def test_instantiate_discarding_defs():
    l = inst(make_linklet("(linklet () ((x x15)) (define-values (x) 4) (define-values (x15) 75))"))
    assert not defines(l, "x")
    assert check_val(l, "x15", 4) #### Not 75!
    #k,v = get_var_val(l, "x15.1") # uninterned
    #assert v.value == 75

    l = inst(make_linklet("(linklet () ((x x15) k) (define-values (x) 4) (define-values (x15) 75) (define-values (k) x15))"))
    assert not defines(l, "x")
    assert check_val(l, "x15", 4) #### Not 75!
    assert check_val(l, "k", 75) #### Not 4!
예제 #10
0
def test_instantiate_target():
    l = make_linklet("(linklet () (x) (define-values (x) 4) (+ x x))")
    result, t = eval_fixnum(l, empty_target())
    assert result == 8
    assert check_val(t, "x", 4)

    # even if linklet doesn't export, def goes into target if it doesn't already have it
    l2 = make_linklet("(linklet () () (define-values (x) 4) (+ x x))")
    result2, t2 = eval_fixnum(l2, empty_target())
    assert result2 == 8
    assert check_val(t2, "x", 4)
예제 #11
0
def test_instantiate_set_bang():
    l = make_linklet("(linklet () () (define-values (x) 3) (set! x 5) (+ x x))")
    t = make_instance({'x':6})
    result, t = eval_fixnum(l, t)
    assert defines(t, "x")
    assert check_val(t, "x", 6)
    assert result == 10

    l = make_linklet("(linklet () (x) (set! x 5) (+ x x))")
    t = make_instance({'x':3})
    result, t = eval_fixnum(l, t)
    assert check_val(t, "x", 5)
    assert result == 10
예제 #12
0
def test_instantiate_closure_capture_and_reset():
    l1 = make_instance("(linklet () (x) (define-values (x) -1))")
    l2 = make_instance(
        "(linklet ((x)) (g) (define-values (g) (lambda (p) x)))", [l1])
    l3 = make_linklet("(linklet ((g)) (x) (set! x 5) (g 1000))")
    t = make_instance("(linklet () () (define-values (x) 2000))")
    result, t = eval_fixnum(l3, t, [l2])
    assert check_val(t, "x", 5)
    assert result == -1

    l1 = make_instance("(linklet () (x) (define-values (x) -11))")
    l2 = make_instance(
        "(linklet ((x)) (g) (define-values (y) 131) (define-values (g) (lambda (p) (+ x y))) (set! y 71))",
        [l1])
    l3 = make_linklet("(linklet ((g)) () (g -1))")
    result, t = eval_fixnum(l3, empty_target(), [l2])
    assert result == 60

    l1 = make_instance("(linklet () (x) (define-values (x) 1))", l_name="l1")
    l2 = make_linklet(
        "(linklet ((x)) (y g) (define-values (y) 10) (define-values (g) (lambda (p) (+ x y))) (set! y 50))",
        "l2")
    t1 = empty_target("t1")
    t2 = empty_target("t2")
    t3 = empty_target("t3")
    _, t1 = eval_fixnum(l2, t1, [l1])
    _, t2 = eval_fixnum(l2, t2, [l1])
    _, t3 = eval_fixnum(l2, t3, [l1])

    # at this point:
    # t : {y:50, g:closure}
    l3 = make_linklet("(linklet () (y g) (set! y 200) (g -1))", "l3")
    result, t1 = eval_fixnum(l3, t1)
    assert result == 201  # result1530
    # here's an interesting one:
    assert check_val(t1, "y", 200)

    # t2 : {y:50, g:closure}
    l4 = make_linklet(
        "(linklet () (y g) (set! y 200) (define-values (y) 90) (g -1))", "l4")
    result, t2 = eval_fixnum(l4, t2)
    assert result == 91  # racket - result1531
    assert check_val(t2, "y", 90)

    # t3 : {y:50, g:closure}
    l5 = make_linklet("(linklet () (g) (define-values (y) 90) (+ y (g -1)))",
                      "l5")
    result, t3 = eval_fixnum(l5, t3)
    assert result == 141  # racket - result1532
    assert check_val(t3, "y", 50)
예제 #13
0
def test_instantiate_set_bang():
    l = make_linklet(
        "(linklet () () (define-values (x) 3) (set! x 5) (+ x x))")
    t = make_instance("(linklet () () (define-values (x) 6))")
    result, t = eval_fixnum(l, t)
    assert defines(t, "x")
    assert check_val(t, "x", 6)
    assert result == 10

    l = make_linklet("(linklet () (x) (set! x 5) (+ x x))")
    t = make_instance("(linklet () () (define-values (x) 3))")
    result, t = eval_fixnum(l, t)
    assert check_val(t, "x", 5)
    assert result == 10
예제 #14
0
def test_instantiate_target_always_overwrite():
    # if target doesn't have it, then it doesn't matter if linklet exports or not,
    # put the variable in the target
    l = make_linklet("(linklet () () (define-values (z) 4) z)")
    result, t = eval_fixnum(l, empty_target())
    assert result == 4
    assert check_val(t, "z", 4)
예제 #15
0
def test_instantiate_target_always_overwrite():
    # if target doesn't have it, then it doesn't matter if linklet exports or not,
    # put the variable in the target
    l = make_linklet("(linklet () () (define-values (z) 4) z)")
    result, t = eval_fixnum(l, empty_target())
    assert result == 4
    assert check_val(t, "z", 4)
예제 #16
0
def test_instantiate_basic2():
    l1 = make_linklet("(linklet () ((x1 x6)) (define-values (x1) 4))")
    t = inst(l1, [])
    l2 = make_linklet("(linklet () ((x2 x6)) (+ x2 x2))")
    result, t = eval_fixnum(l2, t)
    assert result == 8
    assert check_val(t, "x6", 4)
예제 #17
0
def test_instantiate_basic2():
    l1 = make_linklet("(linklet () ((x1 x6)) (define-values (x1) 4))")
    t = inst(l1, [])
    l2 = make_linklet("(linklet () ((x2 x6)) (+ x2 x2))")
    result, t = eval_fixnum(l2, t)
    assert result == 8
    assert check_val(t, "x6", 4)
예제 #18
0
def test_instantiate_target_transfer_set_banged():
    l2 = make_linklet("(linklet () (y) (define-values (y) 10) (set! y 50))", "l2")
    t1 = empty_target("t1")
    t2 = empty_target("t2")
    _, t1 = eval_fixnum(l2, t1, [])
    _, t2 = eval_fixnum(l2, t2, [])
    assert check_val(t2, "y", 50)
예제 #19
0
def test_instantiate_define_var_set_banged_elsewhere():
    li = make_linklet(
        "(linklet () (x t) (define-values (g) (lambda () (set! t 10))) (define-values (t) 50) (g) t)"
    )
    result, t = eval_fixnum(li, empty_target())
    assert result == 10
    assert check_val(t, "t", 10)
예제 #20
0
def test_instantiate_closure_capture_and_reset4():
    l2 = make_linklet("(linklet () (y g) (define-values (y) 10) (define-values (g) (lambda () y)) (set! y 50))", "l2")
    t2 = empty_target("t2")
    _, t2 = eval_fixnum(l2, t2, [])
    l4 = make_linklet("(linklet () (y g) (set! y 200) (define-values (y) 90) (g))")
    result, t2 = eval_fixnum(l4, t2)
    assert result == 90
    assert check_val(t2, "y", 90)
예제 #21
0
def test_instantiate_closure_capture_and_reset3_5_order_matters():
    l2 = make_linklet("(linklet () (y) (define-values (y) 10) (set! y 50))", "l2")
    t2 = empty_target("t2")
    _, t2 = eval_fixnum(l2, t2, [])
    l4 = make_linklet("(linklet () (y) (define-values (y) 90) (define-values (z) (+ y y)) (set! y 200) z)")
    result, t2 = eval_fixnum(l4, t2)
    assert result == 180
    assert check_val(t2, "y", 200)
예제 #22
0
def test_instantiate_closure_capture_and_reset1():
    l1 = inst(make_linklet("(linklet () (x) (define-values (x) -1))"))
    l2 = inst(make_linklet("(linklet ((x)) (g) (define-values (g) (lambda (p) x)))"), [l1])
    l3 = make_linklet("(linklet ((g)) (x) (set! x 5) (g 1000))")
    t = make_instance({'x':2000})
    result, t = eval_fixnum(l3, t, [l2])
    assert check_val(t, "x", 5)
    assert result == -1
예제 #23
0
def test_instantiate_discarding_defs():
    l = make_instance(
        "(linklet () ((x x15)) (define-values (x) 4) (define-values (x15) 75))"
    )
    assert not defines(l, "x")
    assert check_val(l, "x15", 4)  #### Not 75!
    k, v = get_var_val(l, "x15.1")  # uninterned
    assert v.value == 75

    l = make_instance(
        "(linklet () ((x x15) k) (define-values (x) 4) (define-values (x15) 75) (define-values (k) x15))"
    )
    assert not defines(l, "x")
    assert check_val(l, "x15", 4)  #### Not 75!
    assert check_val(l, "k", 75)  #### Not 4!
    k, v = get_var_val(l, "x15.1")
    assert v.value == 75
예제 #24
0
def test_instantiate_target_transfer_set_banged():
    l2 = make_linklet("(linklet () (y) (define-values (y) 10) (set! y 50))",
                      "l2")
    t1 = empty_target("t1")
    t2 = empty_target("t2")
    _, t1 = eval_fixnum(l2, t1, [])
    _, t2 = eval_fixnum(l2, t2, [])
    assert check_val(t2, "y", 50)
예제 #25
0
def test_instantiate_closure_capture_and_reset1():
    l1 = inst(make_linklet("(linklet () (x) (define-values (x) -1))"))
    l2 = inst(
        make_linklet("(linklet ((x)) (g) (define-values (g) (lambda (p) x)))"),
        [l1])
    l3 = make_linklet("(linklet ((g)) (x) (set! x 5) (g 1000))")
    t = make_instance({'x': 2000})
    result, t = eval_fixnum(l3, t, [l2])
    assert check_val(t, "x", 5)
    assert result == -1
예제 #26
0
def test_instantiate_closure_capture_and_reset3_5_order_matters():
    l2 = make_linklet("(linklet () (y) (define-values (y) 10) (set! y 50))",
                      "l2")
    t2 = empty_target("t2")
    _, t2 = eval_fixnum(l2, t2, [])
    l4 = make_linklet(
        "(linklet () (y) (define-values (y) 90) (define-values (z) (+ y y)) (set! y 200) z)"
    )
    result, t2 = eval_fixnum(l4, t2)
    assert result == 180
    assert check_val(t2, "y", 200)
예제 #27
0
def test_instantiate_closure_capture_and_reset4():
    l2 = make_linklet(
        "(linklet () (y g) (define-values (y) 10) (define-values (g) (lambda () y)) (set! y 50))",
        "l2")
    t2 = empty_target("t2")
    _, t2 = eval_fixnum(l2, t2, [])
    l4 = make_linklet(
        "(linklet () (y g) (set! y 200) (define-values (y) 90) (g))")
    result, t2 = eval_fixnum(l4, t2)
    assert result == 90
    assert check_val(t2, "y", 90)
예제 #28
0
def test_instantiate_use_targets_def():
    l = make_linklet("(linklet () (x) (+ x x))")
    t = make_instance({'x':10})
    result, _ = eval_fixnum(l, t)
    assert result == 20

    # use linklet's definition if both linklet and target have it
    l = make_linklet("(linklet () () (define-values (x) 4) (+ x x))") # doesn't export x
    t = make_instance({'x':10})
    result, t = eval_fixnum(l, t)
    assert result == 8
    assert check_val(t, "x", 10)
예제 #29
0
def test_instantiate_use_targets_def():
    l = make_linklet("(linklet () (x) (+ x x))")
    t = make_instance("(linklet () () (define-values (x) 10))")
    result, _ = eval_fixnum(l, t)
    assert result == 20

    # use linklet's definition if both linklet and target have it
    l = make_linklet(
        "(linklet () () (define-values (x) 4) (+ x x))")  # doesn't export x
    t = make_instance("(linklet () () (define-values (x) 10))")
    result, t = eval_fixnum(l, t)
    assert result == 8
    assert check_val(t, "x", 10)
예제 #30
0
def test_instantiate_uninitialize_undefined_exports():
    l = make_linklet("(linklet () (x))")
    _, t = eval_fixnum(l, empty_target())
    assert t.is_var_uninitialized(W_Symbol.make("x"))

    # don't touch if target has it
    l = make_linklet("(linklet () (x))")
    t = make_instance("(linklet () () (define-values (x) 10))")
    _, t = eval_fixnum(l, t)
    assert not t.is_var_uninitialized(W_Symbol.make("x"))

    # target exports the same var with another external name
    l = make_linklet("(linklet () (x2) (+ x2 x2))")
    t = make_instance("(linklet () ((x x2)) (define-values (x) 10))")
    result, t = eval_fixnum(l, t)
    assert result == 20
    assert check_val(t, "x2", 10)
    assert not defines(t, "x")
예제 #31
0
def test_instantiate_uninitialize_undefined_exports():
    l = make_linklet("(linklet () (x))")
    _, t = eval_fixnum(l, empty_target())
    assert t.vars[W_Symbol.make("x")].val is w_uninitialized

    # don't touch if target has it
    l = make_linklet("(linklet () (x))")
    t = make_instance({'x':10})
    _, t = eval_fixnum(l, t)
    assert t.vars[W_Symbol.make("x")].val is not w_uninitialized

    # target exports the same var with another external name
    l = make_linklet("(linklet () (x2) (+ x2 x2))")
    t = inst(make_linklet("(linklet () ((x x2)) (define-values (x) 10))"))
    result, t = eval_fixnum(l, t)
    assert result == 20
    assert check_val(t, "x2", 10)
    assert not defines(t, "x")
예제 #32
0
def test_instantiate_basic_import():
    l1 = make_instance("(linklet () (x) (define-values (x) 4))")
    l2 = make_linklet("(linklet ((x)) () (+ x x))")
    result, _ = eval_fixnum(l2, empty_target(), [l1])
    assert result == 8

    l1 = make_instance("(linklet () (x) (define-values (x) 4))")
    l2 = make_linklet(
        "(linklet ((x)) (y) (define-values (y) (+ x x)) (+ y y))")
    result, t = eval_fixnum(l2, empty_target(), [l1])
    assert result == 16
    assert check_val(t, "y", 8)
    assert not defines(t, "x")

    # target's defs are overwritten only if the linklet has a definition
    # not with an imported variable
    l1 = make_instance("(linklet () (x) (define-values (x) 4))")
    l2 = make_linklet("(linklet ((x)) () (+ x x))")
    t = make_instance("(linklet () () (define-values (x) 1000))")
    result, t = eval_fixnum(l2, t, [l1])
    assert result == 8
    assert check_val(t, "x", 1000)

    ## same thing with the import renaming
    l1 = make_instance("(linklet () (x) (define-values (x) 4))")
    l2 = make_linklet("(linklet (((x x2))) () (+ x2 x2))")
    t = make_instance(
        "(linklet () () (define-values (x) 1000) (define-values (x2) 2000))")
    result, t = eval_fixnum(l2, t, [l1])
    assert result == 8
    assert check_val(t, "x", 1000)
    assert check_val(t, "x2", 2000)

    ## slightly trickier
    l1 = make_instance("(linklet () (x) (define-values (x) 4))")
    l2 = make_linklet(
        "(linklet (((x x2))) () (define-values (x) 14) (+ x2 x))")
    t = make_instance(
        "(linklet () () (define-values (x) 1000) (define-values (x2) 2000))")
    result, t = eval_fixnum(l2, t, [l1])
    assert result == 18
    assert check_val(t, "x", 1000)
    assert check_val(t, "x2", 2000)
예제 #33
0
def test_instantiate_basic_import():
    l1 = inst(make_linklet("(linklet () (x) (define-values (x) 4))"))
    l2 = make_linklet("(linklet ((x)) () (+ x x))")
    result, _ = eval_fixnum(l2, empty_target(), [l1])
    assert result == 8

    l1 = inst(make_linklet("(linklet () (x) (define-values (x) 4))"))
    l2 = make_linklet("(linklet ((x)) (y) (define-values (y) (+ x x)) (+ y y))")
    result, t = eval_fixnum(l2, empty_target(), [l1])
    assert result == 16
    assert check_val(t, "y", 8)
    assert not defines(t, "x")

    # target's defs are overwritten only if the linklet has a definition
    # not with an imported variable
    l1 = inst(make_linklet("(linklet () (x) (define-values (x) 4))"))
    l2 = make_linklet("(linklet ((x)) () (+ x x))")
    t = make_instance({'x':1000})
    result, t = eval_fixnum(l2, t, [l1])
    assert result == 8
    assert check_val(t, "x", 1000)

    ## same thing with the import renaming
    l1 = inst(make_linklet("(linklet () (x) (define-values (x) 4))"))
    l2 = make_linklet("(linklet (((x x2))) () (+ x2 x2))")
    t = make_instance({'x':1000, 'x2':2000})
    result, t = eval_fixnum(l2, t, [l1])
    assert result == 8
    assert check_val(t, "x", 1000)
    assert check_val(t, "x2", 2000)

    ## slightly trickier
    l1 = inst(make_linklet("(linklet () (x) (define-values (x) 4))"))
    l2 = make_linklet("(linklet (((x x2))) () (define-values (x) 14) (+ x2 x))")
    t = make_instance({'x':1000, 'x2':2000})
    result, t = eval_fixnum(l2, t, [l1])
    assert result == 18
    assert check_val(t, "x", 1000)
    assert check_val(t, "x2", 2000)
예제 #34
0
def test_instantiate_closure_capture_and_reset():
    l2 = make_linklet(
        "(linklet () (y g) (define-values (y) 10) (define-values (g) (lambda () y)) (set! y 50))",
        "l2")
    t1 = empty_target("t1")
    t2 = empty_target("t2")
    t3 = empty_target("t3")

    _, t1 = eval_fixnum(l2, t1, [])
    _, t2 = eval_fixnum(l2, t2, [])
    _, t3 = eval_fixnum(l2, t3, [])

    # the cells for both y and g in each target have to be
    # different cells, look below, one change doesn't affect
    # any others

    assert check_val(t1, "y", 50)
    assert check_val(t2, "y", 50)
    assert check_val(t3, "y", 50)

    l3 = make_linklet("(linklet () (y g) (set! y 300) (g))", "l3")
    result, t1 = eval_fixnum(l3, t1)
    assert result == 300
    # here's an interesting one:
    assert check_val(t1, "y", 300)
    assert check_val(t2, "y", 50)
    assert check_val(t3, "y", 50)

    l4 = make_linklet(
        "(linklet () (y g) (set! y 200) (define-values (y) 90) (g))", "l4")
    result, t2 = eval_fixnum(l4, t2)
    assert result == 90
    assert check_val(t1, "y", 300)
    assert check_val(t2, "y", 90)
    assert check_val(t3, "y", 50)

    l5 = make_linklet("(linklet () (g) (define-values (y) 90) (+ y (g)))",
                      "l5")
    result, t3 = eval_fixnum(l5, t3)
    assert result == 140
    assert check_val(t1, "y", 300)
    assert check_val(t2, "y", 90)
    assert check_val(t3, "y", 50)
예제 #35
0
def test_instantiate_target():
    l = make_linklet("(linklet () (x) (define-values (x) 4) (+ x x))")
    result, t = eval_fixnum(l, empty_target())
    assert result == 8
    assert check_val(t, "x", 4)
예제 #36
0
def test_instantiate_target2():
    # even if linklet doesn't export, def goes into target if it doesn't already have it
    l2 = make_linklet("(linklet () () (define-values (x) 4) (+ x x))")
    result2, t2 = eval_fixnum(l2, empty_target())
    assert result2 == 8
    assert check_val(t2, "x", 4)
예제 #37
0
def test_instantiate_basic():
    l = make_instance("(linklet () (x) (define-values (x) 4))")
    assert isinstance(l, W_LinkletInstance)
    assert check_val(l, "x", 4)
예제 #38
0
def test_instantiate_basic():
    l1 = inst(make_linklet("(linklet () (x) (define-values (x) 4))"), [])
    assert isinstance(l1, W_LinkletInstance)
    assert check_val(l1, "x", 4)
예제 #39
0
def test_instantiate_basic():
    l1 = inst(make_linklet("(linklet () (x) (define-values (x) 4))"), [])
    assert isinstance(l1, W_LinkletInstance)
    assert check_val(l1, "x", 4)
예제 #40
0
def test_instantiate_target():
    l = make_linklet("(linklet () (x) (define-values (x) 4) (+ x x))")
    result, t = eval_fixnum(l, empty_target())
    assert result == 8
    assert check_val(t, "x", 4)
예제 #41
0
def test_instantiate_closure_capture_and_reset():
    l2 = make_linklet("(linklet () (y g) (define-values (y) 10) (define-values (g) (lambda () y)) (set! y 50))", "l2")
    t1 = empty_target("t1")
    t2 = empty_target("t2")
    t3 = empty_target("t3")

    _, t1 = eval_fixnum(l2, t1, [])
    _, t2 = eval_fixnum(l2, t2, [])
    _, t3 = eval_fixnum(l2, t3, [])

    # the cells for both y and g in each target have to be
    # different cells, look below, one change doesn't affect
    # any others

    assert check_val(t1, "y", 50)
    assert check_val(t2, "y", 50)
    assert check_val(t3, "y", 50)

    l3 = make_linklet("(linklet () (y g) (set! y 300) (g))", "l3")
    result, t1 = eval_fixnum(l3, t1)
    assert result == 300
    # here's an interesting one:
    assert check_val(t1, "y", 300)
    assert check_val(t2, "y", 50)
    assert check_val(t3, "y", 50)

    l4 = make_linklet("(linklet () (y g) (set! y 200) (define-values (y) 90) (g))", "l4")
    result, t2 = eval_fixnum(l4, t2)
    assert result == 90
    assert check_val(t1, "y", 300)
    assert check_val(t2, "y", 90)
    assert check_val(t3, "y", 50)

    l5 = make_linklet("(linklet () (g) (define-values (y) 90) (+ y (g)))", "l5")
    result, t3 = eval_fixnum(l5, t3)
    assert result == 140
    assert check_val(t1, "y", 300)
    assert check_val(t2, "y", 90)
    assert check_val(t3, "y", 50)
예제 #42
0
def test_instantiate_define_var_set_banged_elsewhere():
    li = make_linklet("(linklet () (x t) (define-values (g) (lambda () (set! t 10))) (define-values (t) 50) (g) t)")
    result, t = eval_fixnum(li, empty_target())
    assert result == 10
    assert check_val(t, "t", 10)