Example #1
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)
Example #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({'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)
Example #3
0
def test_reinstantiation2():
    l1 = make_linklet("(linklet () (y) (define-values (x) (+ 10 y)) (set! x y) x)")
    t1 = make_instance({'y':30})
    t2 = make_instance({'y':40})
    result1, _ = eval_fixnum(l1, t1)
    result2, _ = eval_fixnum(l1, t2)
    assert result1 == 30
    assert result2 == 40
Example #4
0
def test_reinstantiation1():
    l1 = make_linklet("(linklet () (y) (define-values (x) (+ 10 y)) x)")
    t1 = make_instance({'y': 30})
    t2 = make_instance({'y': 40})
    result1, _ = eval_fixnum(l1, t1)
    result2, _ = eval_fixnum(l1, t2)
    assert result1 == 40
    assert result2 == 50
Example #5
0
def test_instantiate_hashes():
    l1 = make_instance(
        "(linklet () (h) (define-values (h) (hasheq \"a\" 4 \"b\" 5)))")
    l2 = make_linklet(
        "(linklet ((h)) (h2) (define-values (h2) (hash-copy h)) (hash-ref h2 \"b\"))"
    )
    result, t = eval_fixnum(l2, empty_target(), [l1])
    assert result == 5
    l3 = make_linklet("(linklet ((h2)) () (hash-ref h2 \"a\"))")
    result, _ = eval_fixnum(l3, empty_target(), [t])
    assert result == 4

    # hash-set! to target
    t = make_instance("(linklet () () (define-values (h) (make-hasheq)))")
    l1 = make_linklet(
        "(linklet () (h) (hash-set! h \"k\" 150) (hash-set! h \"y\" 29))")
    _, t = eval_fixnum(l1, t)
    l2 = make_linklet(
        "(linklet () (h) (hash-set! h \"y\" 50) (hash-ref h \"k\"))")
    result, t = eval_fixnum(l2, t)
    assert result == 150
    l3 = make_linklet(
        "(linklet () (h) (+ (hash-ref h \"k\") (hash-ref h \"y\")))")
    result, _ = eval_fixnum(l3, t)
    assert result == 200

    # hash-set! to imported instance
    l1_use_later = make_instance(
        "(linklet () (h) (define-values (h) (make-hasheq)))")
    l2 = make_linklet(
        "(linklet ((h)) () (hash-set! h \"a\" 5) (hash-set! h \"b\" 10) (hash-set! h \"c\" 20) (hash-ref h \"a\" #f))"
    )
    result, t = eval_fixnum(l2, empty_target(), [l1_use_later])
    assert result == 5
    l3 = make_linklet(
        "(linklet ((h)) () (hash-set! h \"c\" 200) (hash-ref h \"b\" #f))")
    result, t = eval_fixnum(l3, t, [l1_use_later])
    assert result == 10
    l4 = make_linklet("(linklet ((h)) () (hash-ref h \"c\" #f))")
    result, t = eval_fixnum(l4, t, [l1_use_later])
    assert result == 200

    # slightly more complicated
    # l1_use_later has a hash-table "h" contains {a:5, b:10, c:200}
    l10 = make_linklet(
        "(linklet ((h)) (g) (define-values (g) (hash-copy h)) (hash-ref g \"c\"))"
    )
    result, t = eval_fixnum(l10, empty_target(), [l1_use_later])
    assert result == 200
    l11 = make_linklet(
        "(linklet () (g) (hash-set! g \"a\" -1) (hash-ref g \"b\"))")
    result, t = eval_fixnum(l11, t)
    assert result == 10
    l12 = make_linklet("(linklet () (g) (hash-ref g \"a\"))")
    result, _ = eval_fixnum(l12, t)
    assert result == -1
Example #6
0
def test_reinstantiating_with_different_imports():
    imp1 = make_instance({'x':10})
    imp2 = make_instance({'x':20})
    l = make_linklet("(linklet ((x)) (y) (define-values (y) x) y)")
    t1 = empty_target()
    t2 = empty_target()
    result1, t1 = eval_fixnum(l, t1, [imp1])
    result2, t2 = eval_fixnum(l, t2, [imp2])
    assert result1 == 10
    assert result2 == 20
Example #7
0
def test_instantiate_basic_export():
    l1 = make_instance("(linklet () (a) (define-values (a) 4))")
    l2 = make_linklet("(linklet ((a)) () (+ a a))")
    result, _ = eval_fixnum(l2, empty_target(), [l1])
    assert result == 8

    l1 = make_instance("(linklet () ((a1 a)) (define-values (a1) 4))")
    l2 = make_linklet("(linklet ((a)) () (+ a a))")
    result, _ = eval_fixnum(l2, empty_target(), [l1])
    assert result == 8
Example #8
0
def test_reinstantiating_with_different_imports():
    imp1 = make_instance({'x': 10})
    imp2 = make_instance({'x': 20})
    l = make_linklet("(linklet ((x)) (y) (define-values (y) x) y)")
    t1 = empty_target()
    t2 = empty_target()
    result1, t1 = eval_fixnum(l, t1, [imp1])
    result2, t2 = eval_fixnum(l, t2, [imp2])
    assert result1 == 10
    assert result2 == 20
Example #9
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)
Example #10
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)
Example #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
Example #12
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
Example #13
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)
Example #14
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)
Example #15
0
def test_instantiate_lets_and_scopes():
    l = make_linklet(
        "(linklet () () (letrec-values (((fact) (lambda (n) (if (<= n 1) 1 (* n (fact (- n 1))))))) (fact 5)))"
    )
    result, _ = eval_fixnum(l, empty_target())
    assert result == 120

    l1 = make_instance(
        "(linklet () (add2) (define-values (add) (lambda (x) (lambda (y) (+ x y)))) (define-values (add2) (add 2)))"
    )
    l2 = make_linklet("(linklet ((add2)) () (add2 6))")
    result, _ = eval_fixnum(l2, empty_target(), [l1])
    assert result == 8

    l = make_linklet(
        "(linklet () () ((((lambda (x) (lambda (x) (lambda (y) (+ x y)))) 1) 2) 3))"
    )
    result, _ = eval_fixnum(l, empty_target())
    assert result == 5

    l = make_linklet(
        "(linklet () () (let-values (((x) (let-values (((x) 2)) (+ x x)))) (+ x x)))"
    )
    result, _ = eval_fixnum(l, empty_target())
    assert result == 8
Example #16
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)
Example #17
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
Example #18
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
Example #19
0
def test_instantiate_closures_and_variables():
    l1 = make_instance("(linklet () (x) (define-values (x) 4))")
    l2 = make_linklet("(linklet ((x)) (g) (define-values (g) (lambda (y) x)))")
    _, t = eval_fixnum(l2, empty_target(), [l1])
    assert defines(t, "g") and not defines(t, "x")

    # use the modified target
    l3 = make_linklet("(linklet () (g) (g 5))")
    result, t = eval_fixnum(l3, t)
    assert result == 4

    # import the closure
    l1 = make_instance("(linklet () (x) (define-values (x) 4))")
    l2 = make_instance(
        "(linklet ((x)) (g) (define-values (g) (lambda (y) x)))", [l1])
    l4 = make_linklet("(linklet ((g)) () (g 3))")
    result, _ = eval_fixnum(l4, empty_target(), [l2])
    assert result == 4
Example #20
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")
Example #21
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")
Example #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
Example #23
0
def test_instantiate_defs_export_names():
    l = make_instance("(linklet () ((x x15)) (define-values (x) 4))")
    assert not defines(l, "x")
    assert defines(l, "x15")

    # LinkletVars will be referred by the external name (e.g. (+ x15 x15)
    l = make_linklet("(linklet () ((x x15)) (define-values (x) 4) (+ x x))")
    result, t = eval_fixnum(l, empty_target())
    assert result == 8
    assert not defines(t, "x")
    assert defines(t, "x15")
Example #24
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)
Example #25
0
def test_instantiate_small_list():
    # boxed immutable hash table (small-list.rkt)
    l1 = make_instance("(linklet () (h) (define-values (h) (box (hasheq))))")
    l2 = make_linklet(
        "(linklet ((h)) () (set-box! h (hash-set (unbox h) \"a\" 5)) (hash-ref (unbox h) \"a\" #f))"
    )
    result, t = eval_fixnum(l2, empty_target(), [l1])
    assert result == 5
    result, _ = eval_fixnum(
        make_linklet("(linklet ((h)) () (hash-ref (unbox h) \"a\" #f))"), t,
        [l1])
    assert result == 5
Example #26
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)
Example #27
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")
Example #28
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)
Example #29
0
def test_instantiate_import_rename():
    l1 = make_instance("(linklet () (x) (define-values (x) 4))")
    l2 = make_instance("(linklet () (x) (define-values (x) 10))")
    l3 = make_linklet("(linklet (((x x1))((x x2))) () (+ x1 x2))")
    result, _ = eval_fixnum(l3, empty_target(), [l1, l2])
    assert result == 14
Example #30
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)