test_call = fn () { ret = fn(){[1,fn(){[4,5,6]},3]}()[1]()[1] assert(ret == 5) } test_undefined = fn () { assert(undefined == undefined) assert(!(undefined != undefined)) a = undefined assert(a == undefined) assert(!(a != undefined)) assert(!(a <= undefined)) assert(!(a < undefined)) assert(!(a >= undefined)) assert(!(a > undefined)) assert(undefined == a) assert(!(undefined != a)) assert(!(undefined <= a)) assert(!(undefined < a)) assert(!(undefined >= a)) assert(!(undefined > a)) } test_closure = fn () { make_func = fn (mut x) { mut n = 100 fn () { n = n + 1 x = x + 1 + n } } f = make_func(10) f() f() ret = f() assert(ret == 319) } test_array = fn () { a = [1,2,3] assert(a.size() == 3) a.push(4) assert(a.size() == 4) b = [] assert(b.size() == 0) c = [1] assert(c.size() == 1) } g_ = 1 test_function = fn () { a = 1 make = fn () { b = 1 fn (c) { g_ + a + b + c } } f = make() assert(f(1) == 4) } test_object = fn () { n = 1 o = { n: 123, s: 'str', f1: fn (x) { x + this.n }, f2: fn (x) { x + n } } assert(o.size() == 4) assert(o.f1(10) == 133) assert(o.f2(10) == 11) a = {} a.b = 1 assert(a.a == undefined) assert(a.b == 1) assert(a.size() == 1) } test_object_factory = fn () { ctor = fn (init) { mut n = init { add: fn (x) { n = n + x }, sub: fn (x) { n = n - x }, val: fn () { n } } } calc = ctor(10) assert(calc.val() == 10) assert(calc.add(1) == 11) assert(calc.sub(1) == 10) } test_class = fn () { // TODO: support 'prototype' property Car = { new: fn(miles_per_run) { mut total_miles = 0 { run: fn (times) { total_miles = total_miles + miles_per_run * times }, total: fn () { total_miles } } } } car = Car.new(5) car.run(1) car.run(2) assert(car.total() == 15) } test_sum = fn () { mut i = 1 mut ret = 0 while i <= 10 { ret = ret + i i = i + 1 } assert(ret == 55) } test_fib = fn () { fib = fn (x) { if x < 2 { x } else { self(x - 2) + self(x -1) } } ret = fib(15) assert(ret == 610) } test_interpolated_string = fn () { hello = "Hello" world = "World!" ret = "{hello} {world}" assert(ret == 'Hello World!') } debugger test_call() test_closure() test_undefined() test_array() test_function() test_object() test_object_factory() test_class() test_sum() test_fib() test_interpolated_string()