]> gitweb.factorcode.org Git - factor.git/blob - apps/benchmarks/fib.factor
more sql changes
[factor.git] / apps / benchmarks / fib.factor
1 IN: temporary
2 USE: compiler
3 USE: kernel
4 USE: math
5 USE: test
6 USE: math-internals
7 USE: namespaces
8 USE: words
9
10 ! Five fibonacci implementations, each one slower than the
11 ! previous.
12
13 : fast-fixnum-fib ( m -- n )
14     dup 1 fixnum<= [
15         drop 1
16     ] [
17         1 fixnum-fast dup fast-fixnum-fib
18         swap 1 fixnum-fast fast-fixnum-fib fixnum+fast
19     ] if ;
20
21 [ 9227465 ] [ 34 fast-fixnum-fib ] unit-test
22
23 : fixnum-fib ( m -- n )
24     dup 1 fixnum<= [
25         drop 1
26     ] [
27         1 fixnum- dup fixnum-fib swap 1 fixnum- fixnum-fib fixnum+
28     ] if ;
29
30 [ 9227465 ] [ 34 fixnum-fib ] unit-test
31
32 : fib ( m -- n )
33     dup 1 <= [ drop 1 ] [ dup 1 - fib swap 2 - fib + ] if ;
34
35 [ 9227465 ] [ 34 fib ] unit-test
36
37 TUPLE: box i ;
38
39 : tuple-fib ( m -- n )
40     dup box-i 1 <= [
41         drop 1 <box>
42     ] [
43         box-i 1- <box>
44         dup tuple-fib
45         swap
46         box-i 1- <box>
47         tuple-fib
48         swap box-i swap box-i + <box>
49     ] if ;
50
51 [ T{ box f 9227465 } ] [ T{ box f 34 } tuple-fib ] unit-test
52
53 SYMBOL: n
54 : namespace-fib ( m -- n )
55     [
56         n set
57         n get 1 <= [
58             1
59         ] [
60             n get 1 - namespace-fib
61             n get 2 - namespace-fib
62             +
63         ] if
64     ] with-scope ;
65
66 [ 1346269 ] [ 30 namespace-fib ] unit-test