mirror of
https://github.com/yhirose/cpp-peglib.git
synced 2024-11-14 06:55:30 +00:00
209 lines
3.3 KiB
Plaintext
209 lines
3.3 KiB
Plaintext
/*
|
|
* Unit tests
|
|
*/
|
|
|
|
test_call = fn () {
|
|
ret = fn(){[1,fn(){[4,5,6]},3]}()[1]()[1]
|
|
assert(ret == 5)
|
|
}
|
|
|
|
test_return = fn () {
|
|
f = fn (x) {
|
|
if x % 2 {
|
|
return 'odd'
|
|
}
|
|
'even'
|
|
}
|
|
assert(f(3) == 'odd')
|
|
assert(f(4) == 'even')
|
|
|
|
mut val = 0
|
|
f2 = fn () {
|
|
val = 1
|
|
return // comment
|
|
val = 2
|
|
}
|
|
f2()
|
|
assert(val == 1)
|
|
}
|
|
|
|
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_return()
|
|
test_closure()
|
|
test_undefined()
|
|
test_array()
|
|
test_function()
|
|
test_object()
|
|
test_object_factory()
|
|
test_class()
|
|
debugger
|
|
test_sum()
|
|
test_fib()
|
|
test_interpolated_string()
|
|
|
|
return // end
|