]> gitweb.factorcode.org Git - factor.git/commitdiff
make random-32* the protocol again, add a random-32 word that doesn't scale the retur...
authorDoug Coleman <doug.coleman@gmail.com>
Wed, 30 Sep 2009 20:56:02 +0000 (15:56 -0500)
committerDoug Coleman <doug.coleman@gmail.com>
Wed, 30 Sep 2009 20:56:02 +0000 (15:56 -0500)
basis/random/dummy/dummy-tests.factor
basis/random/dummy/dummy.factor
basis/random/mersenne-twister/mersenne-twister-tests.factor
basis/random/mersenne-twister/mersenne-twister.factor
basis/random/random-docs.factor
basis/random/random.factor
extra/random/blum-blum-shub/blum-blum-shub-tests.factor
extra/random/blum-blum-shub/blum-blum-shub.factor

index 1fa81c4d6eafe95107c606bd08a8a44be3672cd3..5d4b4b54734ea3da5066b8989c0df21956785b2f 100644 (file)
@@ -3,5 +3,5 @@
 USING: random random.dummy tools.test ;
 IN: random.dummy.tests
 
-[ 10 ] [ 10 <random-dummy> random-32 ] unit-test
-[ 100 ] [ 10 <random-dummy> 100 seed-random random-32 ] unit-test
+[ 10 ] [ 10 <random-dummy> random-32* ] unit-test
+[ 100 ] [ 10 <random-dummy> 100 seed-random random-32* ] unit-test
index 5763570d754fa0bfbc55039ef31e9c0c7e4b6162..988bd015d05966f829e2e5c5537feb22dd7e2022 100644 (file)
@@ -7,5 +7,5 @@ C: <random-dummy> random-dummy
 M: random-dummy seed-random ( obj seed -- obj )
     >>i ;
 
-M: random-dummy random-32 ( obj -- r )
+M: random-dummy random-32* ( obj -- r )
     [ dup 1 + ] change-i drop ;
index 30caa560599b993bc37c3187106625cbde4c34f2..b877af6f79bfd465addaaa700a269298a80faa26 100644 (file)
@@ -16,11 +16,11 @@ IN: random.mersenne-twister.tests
 [ f ] [ 1234 [ randoms randoms = ] test-rng ] unit-test
 
 [ 1333075495 ] [
-    0 [ 1000 [ drop random-generator get random-32 drop ] each random-generator get random-32 ] test-rng
+    0 [ 1000 [ drop random-generator get random-32* drop ] each random-generator get random-32* ] test-rng
 ] unit-test
 
 [ 1575309035 ] [
-    0 [ 10000 [ drop random-generator get random-32 drop ] each random-generator get random-32 ] test-rng
+    0 [ 10000 [ drop random-generator get random-32* drop ] each random-generator get random-32* ] test-rng
 ] unit-test
 
 
@@ -31,5 +31,5 @@ IN: random.mersenne-twister.tests
 [ t ]
 [
     1234 <mersenne-twister>
-    [ random-32 ] [ 1234 seed-random random-32 ] bi =
+    [ random-32* ] [ 1234 seed-random random-32* ] bi =
 ] unit-test
index 0e65e195e4d767448893b31b51416ca4f866354d..51112ae980b266b64cc7b7aacfea42f36cd5bf35 100644 (file)
@@ -68,7 +68,7 @@ M: mersenne-twister seed-random ( mt seed -- mt' )
     [ 0 >>i drop ]
     [ ] tri ;
 
-M: mersenne-twister random-32 ( mt -- r )
+M: mersenne-twister random-32* ( mt -- r )
     [ next-index ]
     [ seq>> nth-unsafe mt-temper ]
     [ [ 1 + ] change-i drop ] tri ;
index a297df9fd67cb3f81041aada3e1fbe6d78704be3..79e38ec3b65160c0bb79dd3c15516cfd9d52dd1c 100755 (executable)
@@ -10,7 +10,7 @@ HELP: seed-random
 { $description "Seed the random number generator. Repeatedly seeding the random number generator should provide the same sequence of random numbers." }
 { $notes "Not supported on all random number generators." } ;
 
-HELP: random-32
+HELP: random-32*
 { $values { "tuple" "a random number generator" } { "r" "an integer between 0 and 2^32-1" } }
 { $description "Generates a random 32-bit unsigned integer." } ;
 
@@ -33,6 +33,10 @@ HELP: random
         "heads" }
 } ;
 
+HELP: random-32
+{ $values { "elt" "a 32-bit random integer" } }
+{ $description "Outputs 32 random bits. This word is more efficient than calling " { $link random } " because no scaling is done on the output." } ;
+
 HELP: random-bytes
 { $values { "n" "an integer" } { "byte-array" "a random integer" } }
 { $description "Outputs an integer with n bytes worth of bits." }
@@ -96,7 +100,7 @@ HELP: delete-random
 
 ARTICLE: "random-protocol" "Random protocol"
 "A random number generator must implement one of these two words:"
-{ $subsection random-32 }
+{ $subsection random-32* }
 { $subsection random-bytes* }
 "Optional, to seed a random number generator:"
 { $subsection seed-random } ;
@@ -108,6 +112,8 @@ $nl
 $nl
 "Generate a random object:"
 { $subsection random }
+"Efficient 32-bit random numbers:"
+{ $subsection random-32 }
 "Combinators to change the random number generator:"
 { $subsection with-random }
 { $subsection with-system-random }
index db15f78ee1f11defb72b16642827282dc3b59b95..1f2408556f8a93e0d2dfae2f583702915889a562 100755 (executable)
@@ -11,18 +11,18 @@ SYMBOL: secure-random-generator
 SYMBOL: random-generator
 
 GENERIC# seed-random 1 ( tuple seed -- tuple' )
-GENERIC: random-32 ( tuple -- r )
+GENERIC: random-32* ( tuple -- r )
 GENERIC: random-bytes* ( n tuple -- byte-array )
 
 M: object random-bytes* ( n tuple -- byte-array )
     [ [ <byte-vector> ] keep 4 /mod ] dip
-    [ pick '[ _ random-32 4 >le _ push-all ] times ]
+    [ pick '[ _ random-32* 4 >le _ push-all ] times ]
     [
         over zero?
-        [ 2drop ] [ random-32 4 >le swap head over push-all ] if
+        [ 2drop ] [ random-32* 4 >le swap head over push-all ] if
     ] bi-curry bi* ;
 
-M: object random-32 ( tuple -- r ) 4 random-bytes* le> ;
+M: object random-32* ( tuple -- r ) 4 random-bytes* le> ;
 
 ERROR: no-random-number-generator ;
 
@@ -31,7 +31,7 @@ M: no-random-number-generator summary
 
 M: f random-bytes* ( n obj -- * ) no-random-number-generator ;
 
-M: f random-32 ( obj -- * ) no-random-number-generator ;
+M: f random-32* ( obj -- * ) no-random-number-generator ;
 
 : random-bytes ( n -- byte-array )
     random-generator get random-bytes* ;
@@ -55,6 +55,8 @@ PRIVATE>
         [ length random-integer ] keep nth
     ] if-empty ;
 
+: random-32 ( -- n ) random-generator get random-32* ;
+
 : randomize ( seq -- seq )
     dup length [ dup 1 > ]
     [ [ iota random ] [ 1 - ] bi [ pick exchange ] keep ]
index 5b05b09a4cc72683de40dd5947e9996e98ba713f..4b0dee642e7e9d7c4314c3a5a6b0da460a41af0b 100644 (file)
@@ -4,7 +4,7 @@ grouping ;
 IN: blum-blum-shub.tests
 
 [ 887708070 ] [
-    T{ blum-blum-shub f 590695557939 811977232793 } clone random-32
+    T{ blum-blum-shub f 590695557939 811977232793 } clone random-32*
 ] unit-test
 
 
@@ -23,7 +23,7 @@ IN: blum-blum-shub.tests
 [ 3716213681 ]
 [
     100 T{ blum-blum-shub f 200352954495 846054538649 } clone tuck [
-        random-32 drop
+        random-32* drop
     ] curry times
-    random-32
+    random-32*
 ] unit-test
index 9f504cefb53910172f686bba2bde42021a9e3ef6..8229abca69caaeba103398fa7ce831cbd7ba4f51 100755 (executable)
@@ -25,6 +25,6 @@ PRIVATE>
     [ find-relative-prime ] keep
     blum-blum-shub boa ;
 
-M: blum-blum-shub random-32 ( bbs -- r )
+M: blum-blum-shub random-32* ( bbs -- r )
     0 32 rot
     [ next-bbs-bit swap 1 shift bitor ] curry times ;