--- /dev/null
+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