Skip to content

Commit e29d5cc

Browse files
committed
add fibonacci .wast tests
Signed-off-by: Robin Freyler <[email protected]>
1 parent 019f8b2 commit e29d5cc

File tree

1 file changed

+133
-0
lines changed

1 file changed

+133
-0
lines changed

tests/fibonacci.wast

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
(module
2+
(func (export "fibonacci-iter") (param $n i64) (result i64)
3+
(local $n1 i64)
4+
(local $n2 i64)
5+
(local $tmp i64)
6+
(local $i i64)
7+
;; return $n for N <= 1
8+
(if
9+
(i64.le_s (local.get $n) (i64.const 1))
10+
(then (return (local.get $n)))
11+
)
12+
(local.set $n1 (i64.const 1))
13+
(local.set $n2 (i64.const 1))
14+
(local.set $i (i64.const 2))
15+
;;since we normally return n2, handle n=1 case specially
16+
(loop $continue
17+
(if
18+
(i64.lt_s (local.get $i) (local.get $n))
19+
(then
20+
(local.set $tmp (i64.add (local.get $n1) (local.get $n2)))
21+
(local.set $n1 (local.get $n2))
22+
(local.set $n2 (local.get $tmp))
23+
(local.set $i (i64.add (local.get $i) (i64.const 1)))
24+
(br $continue)
25+
)
26+
)
27+
)
28+
(local.get $n2)
29+
)
30+
)
31+
(assert_return (invoke "fibonacci-iter" (i64.const 0)) (i64.const 0))
32+
(assert_return (invoke "fibonacci-iter" (i64.const 1)) (i64.const 1))
33+
(assert_return (invoke "fibonacci-iter" (i64.const 2)) (i64.const 1))
34+
(assert_return (invoke "fibonacci-iter" (i64.const 3)) (i64.const 2))
35+
(assert_return (invoke "fibonacci-iter" (i64.const 4)) (i64.const 3))
36+
(assert_return (invoke "fibonacci-iter" (i64.const 5)) (i64.const 5))
37+
(assert_return (invoke "fibonacci-iter" (i64.const 6)) (i64.const 8))
38+
(assert_return (invoke "fibonacci-iter" (i64.const 7)) (i64.const 13))
39+
(assert_return (invoke "fibonacci-iter" (i64.const 8)) (i64.const 21))
40+
(assert_return (invoke "fibonacci-iter" (i64.const 9)) (i64.const 34))
41+
(assert_return (invoke "fibonacci-iter" (i64.const 10)) (i64.const 55))
42+
(assert_return (invoke "fibonacci-iter" (i64.const 11)) (i64.const 89))
43+
(assert_return (invoke "fibonacci-iter" (i64.const 12)) (i64.const 144))
44+
(assert_return (invoke "fibonacci-iter" (i64.const 13)) (i64.const 233))
45+
(assert_return (invoke "fibonacci-iter" (i64.const 14)) (i64.const 377))
46+
(assert_return (invoke "fibonacci-iter" (i64.const 15)) (i64.const 610))
47+
(assert_return (invoke "fibonacci-iter" (i64.const 16)) (i64.const 987))
48+
(assert_return (invoke "fibonacci-iter" (i64.const 17)) (i64.const 1597))
49+
(assert_return (invoke "fibonacci-iter" (i64.const 18)) (i64.const 2584))
50+
(assert_return (invoke "fibonacci-iter" (i64.const 19)) (i64.const 4181))
51+
52+
(module
53+
(func $fib_recursive (export "fibonacci-rec") (param $n i64) (result i64)
54+
(if
55+
(i64.le_s (local.get $n) (i64.const 1))
56+
(then (return (local.get $n)))
57+
)
58+
(return
59+
(i64.add
60+
(call $fib_recursive
61+
(i64.sub (local.get $n) (i64.const 1))
62+
)
63+
(call $fib_recursive
64+
(i64.sub (local.get $n) (i64.const 2))
65+
)
66+
)
67+
)
68+
)
69+
)
70+
(assert_return (invoke "fibonacci-rec" (i64.const 0)) (i64.const 0))
71+
(assert_return (invoke "fibonacci-rec" (i64.const 1)) (i64.const 1))
72+
(assert_return (invoke "fibonacci-rec" (i64.const 2)) (i64.const 1))
73+
(assert_return (invoke "fibonacci-rec" (i64.const 3)) (i64.const 2))
74+
(assert_return (invoke "fibonacci-rec" (i64.const 4)) (i64.const 3))
75+
(assert_return (invoke "fibonacci-rec" (i64.const 5)) (i64.const 5))
76+
(assert_return (invoke "fibonacci-rec" (i64.const 6)) (i64.const 8))
77+
(assert_return (invoke "fibonacci-rec" (i64.const 7)) (i64.const 13))
78+
(assert_return (invoke "fibonacci-rec" (i64.const 8)) (i64.const 21))
79+
(assert_return (invoke "fibonacci-rec" (i64.const 9)) (i64.const 34))
80+
(assert_return (invoke "fibonacci-rec" (i64.const 10)) (i64.const 55))
81+
(assert_return (invoke "fibonacci-rec" (i64.const 11)) (i64.const 89))
82+
(assert_return (invoke "fibonacci-rec" (i64.const 12)) (i64.const 144))
83+
(assert_return (invoke "fibonacci-rec" (i64.const 13)) (i64.const 233))
84+
(assert_return (invoke "fibonacci-rec" (i64.const 14)) (i64.const 377))
85+
(assert_return (invoke "fibonacci-rec" (i64.const 15)) (i64.const 610))
86+
(assert_return (invoke "fibonacci-rec" (i64.const 16)) (i64.const 987))
87+
(assert_return (invoke "fibonacci-rec" (i64.const 17)) (i64.const 1597))
88+
(assert_return (invoke "fibonacci-rec" (i64.const 18)) (i64.const 2584))
89+
(assert_return (invoke "fibonacci-rec" (i64.const 19)) (i64.const 4181))
90+
91+
(module
92+
(func $fib_tail_recursive (param $n i64) (param $a i64) (param $b i64) (result i64)
93+
(if (i64.eqz (local.get $n))
94+
(then
95+
(return (local.get $a))
96+
)
97+
)
98+
(if (i64.eq (local.get $n) (i64.const 1))
99+
(then
100+
(return (local.get $b))
101+
)
102+
)
103+
(return_call $fib_tail_recursive
104+
(i64.sub (local.get $n) (i64.const 1))
105+
(local.get $b)
106+
(i64.add (local.get $a) (local.get $b))
107+
)
108+
)
109+
110+
(func (export "fibonacci-tail") (param $n i64) (result i64)
111+
(return_call $fib_tail_recursive (local.get $n) (i64.const 0) (i64.const 1))
112+
)
113+
)
114+
(assert_return (invoke "fibonacci-tail" (i64.const 0)) (i64.const 0))
115+
(assert_return (invoke "fibonacci-tail" (i64.const 1)) (i64.const 1))
116+
(assert_return (invoke "fibonacci-tail" (i64.const 2)) (i64.const 1))
117+
(assert_return (invoke "fibonacci-tail" (i64.const 3)) (i64.const 2))
118+
(assert_return (invoke "fibonacci-tail" (i64.const 4)) (i64.const 3))
119+
(assert_return (invoke "fibonacci-tail" (i64.const 5)) (i64.const 5))
120+
(assert_return (invoke "fibonacci-tail" (i64.const 6)) (i64.const 8))
121+
(assert_return (invoke "fibonacci-tail" (i64.const 7)) (i64.const 13))
122+
(assert_return (invoke "fibonacci-tail" (i64.const 8)) (i64.const 21))
123+
(assert_return (invoke "fibonacci-tail" (i64.const 9)) (i64.const 34))
124+
(assert_return (invoke "fibonacci-tail" (i64.const 10)) (i64.const 55))
125+
(assert_return (invoke "fibonacci-tail" (i64.const 11)) (i64.const 89))
126+
(assert_return (invoke "fibonacci-tail" (i64.const 12)) (i64.const 144))
127+
(assert_return (invoke "fibonacci-tail" (i64.const 13)) (i64.const 233))
128+
(assert_return (invoke "fibonacci-tail" (i64.const 14)) (i64.const 377))
129+
(assert_return (invoke "fibonacci-tail" (i64.const 15)) (i64.const 610))
130+
(assert_return (invoke "fibonacci-tail" (i64.const 16)) (i64.const 987))
131+
(assert_return (invoke "fibonacci-tail" (i64.const 17)) (i64.const 1597))
132+
(assert_return (invoke "fibonacci-tail" (i64.const 18)) (i64.const 2584))
133+
(assert_return (invoke "fibonacci-tail" (i64.const 19)) (i64.const 4181))

0 commit comments

Comments
 (0)