]> gitweb.factorcode.org Git - factor.git/commitdiff
New benchmark: like nsieve but using a byte array
authorSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Fri, 12 Sep 2008 13:29:32 +0000 (08:29 -0500)
committerSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Fri, 12 Sep 2008 13:29:32 +0000 (08:29 -0500)
extra/benchmark/nsieve-bytes/nsieve-bytes.factor [new file with mode: 0644]

diff --git a/extra/benchmark/nsieve-bytes/nsieve-bytes.factor b/extra/benchmark/nsieve-bytes/nsieve-bytes.factor
new file mode 100644 (file)
index 0000000..11745e4
--- /dev/null
@@ -0,0 +1,35 @@
+IN: benchmark.nsieve-bytes
+USING: math math.parser sequences sequences.private kernel
+byte-arrays make io ;
+
+: clear-flags ( step i seq -- )
+    2dup length >= [
+        3drop
+    ] [
+        0 2over set-nth-unsafe >r over + r> clear-flags
+    ] if ; inline recursive
+
+: (nsieve) ( count i seq -- count )
+    2dup length < [
+        2dup nth-unsafe 0 > [
+            over dup 2 * pick clear-flags
+            rot 1+ -rot ! increment count
+        ] when >r 1+ r> (nsieve)
+    ] [
+        2drop
+    ] if ; inline recursive
+
+: nsieve ( m -- count )
+    0 2 rot 1+ <byte-array> dup [ drop 1 ] change-each (nsieve) ;
+
+: nsieve. ( m -- )
+    [ "Primes up to " % dup # " " % nsieve # ] "" make print ;
+
+: nsieve-main ( n -- )
+    dup 2^ 10000 * nsieve.
+    dup 1 - 2^ 10000 * nsieve.
+    2 - 2^ 10000 * nsieve. ;
+
+: nsieve-main* ( -- ) 9 nsieve-main ;
+
+MAIN: nsieve-main*