]> gitweb.factorcode.org Git - factor.git/commitdiff
Merge branch 'for-slava' of git://git.rfc1149.net/factor
authorSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Sat, 12 Jun 2010 00:10:07 +0000 (20:10 -0400)
committerSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Sat, 12 Jun 2010 00:10:07 +0000 (20:10 -0400)
basis/math/primes/primes-tests.factor
basis/math/primes/primes.factor

index 3d21a3e7d60602864c8c69103b3f7929835df436..a2e9f4fa4813ea2b1900866bd68fa9ff7c38d8dd 100644 (file)
@@ -5,6 +5,8 @@ IN: math.primes.tests
 { 1237 } [ 1234 next-prime ] unit-test
 { f t } [ 1234 prime? 1237 prime? ] unit-test
 { { 2 3 5 7 } } [ 10 primes-upto >array ] unit-test
+{ { 2 } } [ 2 primes-upto >array ] unit-test
+{ { } } [ 1 primes-upto >array ] unit-test
 { { 999983 1000003 } } [ 999982 1000010 primes-between >array ] unit-test
 
 { { 4999963 4999999 5000011 5000077 5000081 } }
@@ -13,6 +15,12 @@ IN: math.primes.tests
 { { 8999981 8999993 9000011 9000041 } }
 [ 8999980 9000045 primes-between >array ] unit-test
 
+{ { } } [ 5 4 primes-between >array ] unit-test
+
+{ { 2 } } [ 2 2 primes-between >array ] unit-test
+
+{ { 2 } } [ 1.5 2.5 primes-between >array ] unit-test
+
 [ 2 ] [ 1 next-prime ] unit-test
 [ 3 ] [ 2 next-prime ] unit-test
 [ 5 ] [ 3 next-prime ] unit-test
index 81193af400bfa749003a2b01b831b5e9dfb059c3..7611e22b70cf60591e8a38d6af5ffd0a15062270 100644 (file)
@@ -46,11 +46,24 @@ PRIVATE>
         next-odd [ dup prime? ] [ 2 + ] until
     ] if ; foldable
 
-: primes-between ( low high -- seq )
+<PRIVATE
+
+: (primes-between) ( low high -- seq )
     [ [ 3 max dup even? [ 1 + ] when ] dip 2 <range> ]
     [ <primes-vector> ] 2bi
     [ '[ [ prime? ] _ push-if ] each ] keep clone ;
 
+PRIVATE>
+
+: primes-between ( low high -- seq )
+    [ ceiling >integer ] [ floor >integer ] bi*
+    {
+        { [ 2dup > ] [ 2drop V{ } clone ] }
+        { [ dup 2 = ] [ 2drop V{ 2 } clone ] }
+        { [ dup 2 < ] [ 2drop V{ } clone ] }
+        [ (primes-between) ]
+    } cond ;
+
 : primes-upto ( n -- seq ) 2 swap primes-between ;
 
 : coprime? ( a b -- ? ) gcd nip 1 = ; foldable