]> gitweb.factorcode.org Git - factor.git/commitdiff
benchmark.fib8: adding super-fast fibonacci benchmark.
authorJohn Benediktsson <mrjbq7@gmail.com>
Tue, 26 Mar 2013 18:48:01 +0000 (11:48 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Tue, 26 Mar 2013 18:48:01 +0000 (11:48 -0700)
extra/benchmark/fib8/fib8.factor [new file with mode: 0644]

diff --git a/extra/benchmark/fib8/fib8.factor b/extra/benchmark/fib8/fib8.factor
new file mode 100644 (file)
index 0000000..c429b5a
--- /dev/null
@@ -0,0 +1,22 @@
+USING: combinators kernel math memoize ;
+IN: benchmark.fib8
+
+MEMO: (faster-fib) ( m -- n )
+    dup 1 > [
+        [ 2/ dup 1 - [ (faster-fib) ] bi@ ] [ 4 mod ] bi {
+            { 1 [ [ 2 * ] dip [ + ] [ - ] 2bi * 2 + ] }
+            { 3 [ [ 2 * ] dip [ + ] [ - ] 2bi * 2 - ] }
+            [ drop dupd 2 * + * ]
+        } case
+    ] when ;
+
+: faster-fib ( m -- n )
+    dup 0 >= [ throw ] unless (faster-fib) ;
+
+: fib8-benchmark ( -- )
+    100 [
+        \ (faster-fib) reset-memoized
+        100,000 faster-fib log2 69423 assert=
+    ] times ;
+
+MAIN: fib8-benchmark