From 211eff745ae10fd71edd0fd7c1a3ace9c5e6dda4 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Wed, 7 Oct 2009 13:42:37 -0500 Subject: [PATCH] correct the output of random.sfmt --- basis/random/sfmt/sfmt-tests.factor | 10 ++++---- basis/random/sfmt/sfmt.factor | 38 ++++++++++++++--------------- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/basis/random/sfmt/sfmt-tests.factor b/basis/random/sfmt/sfmt-tests.factor index 9f3fea0480..1d39a72f05 100644 --- a/basis/random/sfmt/sfmt-tests.factor +++ b/basis/random/sfmt/sfmt-tests.factor @@ -4,13 +4,13 @@ USING: accessors kernel random random.sfmt random.sfmt.private sequences tools.test ; IN: random.sfmt.tests -[ ] [ 100 drop ] unit-test +[ ] [ 5 drop ] unit-test -[ 1096298955 ] -[ 100 dup generate dup generate uint-array>> first ] unit-test +[ 1331696015 ] +[ 5 dup generate dup generate uint-array>> first ] unit-test -[ 2556114782 ] -[ 100 random-32* ] unit-test +[ 1432875926 ] +[ 5 random-32* ] unit-test [ t ] [ diff --git a/basis/random/sfmt/sfmt.factor b/basis/random/sfmt/sfmt.factor index 6b0fc66be2..e4d7ee8bbb 100644 --- a/basis/random/sfmt/sfmt.factor +++ b/basis/random/sfmt/sfmt.factor @@ -16,7 +16,7 @@ STRUCT: sfmt-state { seed uint } { n uint } { m uint } - { ix uint } + { index uint } { mask uint-4 } { r1 uint-4 } { r2 uint-4 } ; @@ -50,14 +50,15 @@ M:: sfmt generate ( sfmt -- ) sfmt uint-4-array>> :> array state n>> 2 - array nth state (>>r1) state n>> 1 - array nth state (>>r2) - state m>> :> m - state n>> :> n + state m>> :> m + state n>> :> n state mask>> :> mask n m - >fixnum iota [| i | - i array nth-unsafe + i array nth-unsafe i m + array nth-unsafe mask state r1>> state r2>> formula :> r +! USE: io "r = " write r . r i array set-nth-unsafe state r2>> state (>>r1) @@ -75,19 +76,17 @@ M:: sfmt generate ( sfmt -- ) state r2>> state (>>r1) r state (>>r2) ] each - - 0 state (>>ix) ; + + 0 state (>>index) ; : ( sfmt -- uint-array uint-4-array ) - state>> - [ n>> 4 * iota >uint-array ] [ seed>> ] bi + state>> + [ n>> 4 * 1 swap [a,b] >uint-array ] [ seed>> ] bi [ [ - [ - [ -30 shift ] [ ] bi bitxor - state-multiplier * 32 bits - ] dip + - ] unless-zero 32 bits + [ -30 shift ] [ ] bi bitxor + state-multiplier * 32 bits + ] dip + 32 bits ] uint-array{ } accumulate-as nip dup underlying>> byte-array>uint-4-array ; @@ -97,7 +96,7 @@ M:: sfmt generate ( sfmt -- ) swap >>m swap >>n swap >>seed - 0 >>ix ; + 0 >>index ; : init-sfmt ( sfmt -- sfmt' ) dup [ >>uint-array ] [ >>uint-4-array ] bi* @@ -110,13 +109,13 @@ M:: sfmt generate ( sfmt -- ) init-sfmt ; inline : refill-sfmt? ( sfmt -- ? ) - state>> [ ix>> ] [ n>> 4 * ] bi >= ; + state>> [ index>> ] [ n>> 4 * ] bi >= ; -: next-ix ( sfmt -- ix ) - state>> [ dup 1 + ] change-ix drop ; inline +: next-index ( sfmt -- index ) + state>> [ dup 1 + ] change-index drop ; inline : next ( sfmt -- n ) - [ next-ix ] [ uint-array>> ] bi nth-unsafe ; inline + [ next-index ] [ uint-array>> ] bi nth-unsafe ; inline PRIVATE> @@ -128,5 +127,6 @@ M: sfmt seed-random ( sfmt seed -- sfmt ) [ drop init-sfmt ] 2bi ; : ( seed -- sfmt ) - 348 330 uint-4{ HEX: BFFFFFF6 HEX: BFFAFFFF HEX: DDFECB7F HEX: DFFFFFEF } + 156 122 + uint-4{ HEX: DFFFFFEF HEX: DDFECB7F HEX: BFFAFFFF HEX: BFFFFFF6 } ; inline