]> gitweb.factorcode.org Git - factor.git/blobdiff - core/math/integers/integers-tests.factor
use radix literals
[factor.git] / core / math / integers / integers-tests.factor
index 5a649120a02962625aac1d4bbc1a842c15a9c6e1..b477b00a2f0b050dd52d0d261d5b283cda0fe2de 100644 (file)
@@ -1,5 +1,6 @@
-USING: kernel math math.functions namespaces prettyprint
-math.private continuations tools.test sequences random ;
+USING: kernel math math.functions math.order namespaces
+prettyprint math.private continuations tools.test sequences
+random ;
 IN: math.integers.tests
 
 [ "-8" ] [ -8 unparse ] unit-test
@@ -23,8 +24,8 @@ IN: math.integers.tests
 
 [ -1 ] [ 1 neg ] unit-test
 [ -1 ] [ 1 >bignum neg ] unit-test
-[ 268435456 ] [ -268435456 >fixnum -1 * ] unit-test
-[ 268435456 ] [ -268435456 >fixnum neg ] unit-test
+[ 134217728 ] [ -134217728 >fixnum -1 * ] unit-test
+[ 134217728 ] [ -134217728 >fixnum neg ] unit-test
 
 [ 9 3 ] [ 93 10 /mod ] unit-test
 [ 9 3 ] [ 93 >bignum 10 /mod ] unit-test
@@ -33,22 +34,22 @@ IN: math.integers.tests
 
 [ -10000000001981284352 ] [
     -10000000000000000000
-    HEX: -100000000 bitand
+    -0x100000000 bitand
 ] unit-test
 
 [ 9999999997686317056 ] [
     10000000000000000000
-    HEX: -100000000 bitand
+    -0x100000000 bitand
 ] unit-test
 
 [ 4294967296 ] [
     -10000000000000000000
-    HEX: 100000000 bitand
+    0x100000000 bitand
 ] unit-test
 
 [ 0 ] [
     10000000000000000000
-    HEX: 100000000 bitand
+    0x100000000 bitand
 ] unit-test
 
 [ -1 ] [ -1 >bignum >fixnum ] unit-test
@@ -67,29 +68,31 @@ unit-test
 [ 8 ] [ 257 >bignum log2 ] unit-test
 [ 0 ] [ 1   >bignum log2 ] unit-test
 
-[ t ] [ BIN: 1101 0 bit? ] unit-test
-[ f ] [ BIN: 1101 1 bit? ] unit-test
-[ t ] [ BIN: 1101 2 bit? ] unit-test
-[ t ] [ BIN: 1101 3 bit? ] unit-test
-[ f ] [ BIN: 1101 4 bit? ] unit-test
-
-[ t ] [ BIN: 1101 >bignum 0 bit? ] unit-test
-[ f ] [ BIN: 1101 >bignum 1 bit? ] unit-test
-[ t ] [ BIN: 1101 >bignum 2 bit? ] unit-test
-[ t ] [ BIN: 1101 >bignum 3 bit? ] unit-test
-[ f ] [ BIN: 1101 >bignum 4 bit? ] unit-test
-
-[ t ] [ BIN: -1101 0 bit? ] unit-test
-[ t ] [ BIN: -1101 1 bit? ] unit-test
-[ f ] [ BIN: -1101 2 bit? ] unit-test
-[ f ] [ BIN: -1101 3 bit? ] unit-test
-[ t ] [ BIN: -1101 4 bit? ] unit-test
-
-[ t ] [ BIN: -1101 >bignum 0 bit? ] unit-test
-[ t ] [ BIN: -1101 >bignum 1 bit? ] unit-test
-[ f ] [ BIN: -1101 >bignum 2 bit? ] unit-test
-[ f ] [ BIN: -1101 >bignum 3 bit? ] unit-test
-[ t ] [ BIN: -1101 >bignum 4 bit? ] unit-test
+[ t ] [ 0b1101 0 bit? ] unit-test
+[ f ] [ 0b1101 1 bit? ] unit-test
+[ t ] [ 0b1101 2 bit? ] unit-test
+[ t ] [ 0b1101 3 bit? ] unit-test
+[ f ] [ 0b1101 4 bit? ] unit-test
+
+[ t ] [ 0b1101 >bignum 0 bit? ] unit-test
+[ f ] [ 0b1101 >bignum 1 bit? ] unit-test
+[ t ] [ 0b1101 >bignum 2 bit? ] unit-test
+[ t ] [ 0b1101 >bignum 3 bit? ] unit-test
+[ f ] [ 0b1101 >bignum 4 bit? ] unit-test
+
+[ t ] [ -0b1101 0 bit? ] unit-test
+[ t ] [ -0b1101 1 bit? ] unit-test
+[ f ] [ -0b1101 2 bit? ] unit-test
+[ f ] [ -0b1101 3 bit? ] unit-test
+[ t ] [ -0b1101 4 bit? ] unit-test
+
+[ t ] [ -0b1101 >bignum 0 bit? ] unit-test
+[ t ] [ -0b1101 >bignum 1 bit? ] unit-test
+[ f ] [ -0b1101 >bignum 2 bit? ] unit-test
+[ f ] [ -0b1101 >bignum 3 bit? ] unit-test
+[ t ] [ -0b1101 >bignum 4 bit? ] unit-test
+
+[ t ] [ 1067811677921310779 >bignum 59 bit? ] unit-test
 
 [ 2 ] [ 0 next-power-of-2 ] unit-test
 [ 2 ] [ 1 next-power-of-2 ] unit-test
@@ -98,12 +101,12 @@ unit-test
 [ 16 ] [ 13 next-power-of-2 ] unit-test
 [ 16 ] [ 16 next-power-of-2 ] unit-test
 
-[ 268435456 ] [ -268435456 >fixnum -1 /i ] unit-test
-[ 268435456 0 ] [ -268435456 >fixnum -1 /mod ] unit-test
-[ 0 ] [ -1 -268435456 >fixnum /i ] unit-test
+[ 134217728 ] [ -134217728 >fixnum -1 /i ] unit-test
+[ 134217728 0 ] [ -134217728 >fixnum -1 /mod ] unit-test
+[ 0 ] [ -1 -134217728 >fixnum /i ] unit-test
 [ 4420880996869850977 ] [ 13262642990609552931 3 /i ] unit-test
-[ 0 -1 ] [ -1 -268435456 >fixnum /mod ] unit-test
-[ 0 -1 ] [ -1 -268435456 >bignum /mod ] unit-test
+[ 0 -1 ] [ -1 -134217728 >fixnum /mod ] unit-test
+[ 0 -1 ] [ -1 -134217728 >bignum /mod ] unit-test
 [ 14355 ] [ 1591517158873146351817850880000000 32769 mod ] unit-test
 [ 8 530505719624382123 ] [ 13262642990609552931 1591517158873146351 /mod ] unit-test
 [ 8 ] [ 13262642990609552931 1591517158873146351 /i ] unit-test
@@ -115,7 +118,7 @@ unit-test
 [ f ] [ 30 zero? ] unit-test
 [ t ] [ 0 >bignum zero? ] unit-test
 
-[ 4294967280 ] [ 268435455 >fixnum 16 fixnum* ] unit-test
+[ 2147483632 ] [ 134217727 >fixnum 16 fixnum* ] unit-test
 
 [ 23603949310011464311086123800853779733506160743636399259558684142844552151041 ]
 [
@@ -154,7 +157,7 @@ unit-test
 [ 4294967296 ] [ 1 32 shift ] unit-test
 [ 1267650600228229401496703205376 ] [ 1 100 shift ] unit-test
 
-[ t ] [ 1 27 shift fixnum? ] unit-test
+[ t ] [ 1 26 shift fixnum? ] unit-test
 
 [ t ] [
     t
@@ -178,18 +181,6 @@ unit-test
 [ 14 ] [ 13 2 align ] unit-test
 [ 11 ] [ 11 1 align ] unit-test
 
-[ HEX: 332211 ] [
-    B{ HEX: 11 HEX: 22 HEX: 33 } byte-array>bignum
-] unit-test
-
-[ HEX: 7a2c793b2ff08554 ] [
-    B{ HEX: 54 HEX: 85 HEX: f0 HEX: 2f HEX: 3b HEX: 79 HEX: 2c HEX: 7a } byte-array>bignum
-] unit-test
-
-[ HEX: 988a259c3433f237 ] [
-    B{ HEX: 37 HEX: f2 HEX: 33 HEX: 34 HEX: 9c HEX: 25 HEX: 8a HEX: 98 } byte-array>bignum
-] unit-test
-
 [ t ] [ 256 power-of-2? ] unit-test
 [ f ] [ 123 power-of-2? ] unit-test
 
@@ -204,23 +195,45 @@ unit-test
 [ 2. ] [ 2 1 ratio>float ] unit-test
 [ .5 ] [ 1 2 ratio>float ] unit-test
 [ .75 ] [ 3 4 ratio>float ] unit-test
-[ 1. ] [ 2000 2^ 2000 2^ 1+ ratio>float ] unit-test
-[ -1. ] [ 2000 2^ neg 2000 2^ 1+ ratio>float ] unit-test
+[ 1. ] [ 2000 2^ 2000 2^ 1 + ratio>float ] unit-test
+[ -1. ] [ 2000 2^ neg 2000 2^ 1 + ratio>float ] unit-test
 [ 0.4 ] [ 6 15 ratio>float ] unit-test
 
-[ HEX: 3fe553522d230931 ]
+[ 0x3fe553522d230931 ]
 [ 61967020039 92984792073 ratio>float double>bits ] unit-test
 
 : random-integer ( -- n )
     32 random-bits
-    1 random zero? [ neg ] when
-    1 random zero? [ >bignum ] when ;
+    { t f } random [ neg ] when
+    { t f } random [ >bignum ] when ;
 
 [ t ] [
-    1000 [
+    10000 [
         drop
         random-integer
         random-integer
         [ >float / ] [ /f ] 2bi 0.1 ~
-    ] all?
+    ] all-integers?
 ] unit-test
+
+! Ensure that /f is accurate for fixnums > 2^53 on 64-bit platforms
+[ 0x1.758bec11492f9p-54 ] [ 1 12345678901234567 /f ] unit-test
+[ -0x1.758bec11492f9p-54 ] [ 1 -12345678901234567 /f ] unit-test
+
+! Ensure that /f rounds to nearest and not to zero
+[ 0x1.0p55 ] [ 0x7f,ffff,ffff,ffff >bignum 1 /f ] unit-test
+[ 0x1.0p55 ] [ -0x7f,ffff,ffff,ffff >bignum -1 /f ] unit-test
+[ -0x1.0p55 ] [ -0x7f,ffff,ffff,ffff >bignum 1 /f ] unit-test
+[ -0x1.0p55 ] [ 0x7f,ffff,ffff,ffff >bignum -1 /f ] unit-test
+
+[ 17 ] [ 17 >bignum 5 max ] unit-test
+[ 5 ] [ 17 >bignum 5 min ] unit-test
+
+[ 1 ] [ 1 202402253307310618352495346718917307049556649764142118356901358027430339567995346891960383701437124495187077864316811911389808737385793476867013399940738509921517424276566361364466907742093216341239767678472745068562007483424692698618103355649159556340810056512358769552333414615230502532186327508646006263307707741093494784 /f double>bits ] unit-test
+[ 12 ] [ 3 50600563326827654588123836679729326762389162441035529589225339506857584891998836722990095925359281123796769466079202977847452184346448369216753349985184627480379356069141590341116726935523304085309941919618186267140501870856173174654525838912289889085202514128089692388083353653807625633046581877161501565826926935273373696 /f double>bits ] unit-test
+[ 123 ] [ 123 202402253307310618352495346718917307049556649764142118356901358027430339567995346891960383701437124495187077864316811911389808737385793476867013399940738509921517424276566361364466907742093216341239767678472745068562007483424692698618103355649159556340810056512358769552333414615230502532186327508646006263307707741093494784 /f double>bits ] unit-test
+[ 1234 ] [ 617 101201126653655309176247673359458653524778324882071059178450679013715169783997673445980191850718562247593538932158405955694904368692896738433506699970369254960758712138283180682233453871046608170619883839236372534281003741712346349309051677824579778170405028256179384776166707307615251266093163754323003131653853870546747392 /f double>bits ] unit-test
+[ 1/0. ] [ 2048 2^ 1 /f ] unit-test
+[ -1/0. ] [ 2048 2^ -1 /f ] unit-test
+[ -1/0. ] [ 2048 2^ neg 1 /f ] unit-test
+[ 1/0. ] [ 2048 2^ neg -1 /f ] unit-test