#FEATURE
class: RegressionTests::IntegerTest
added:
#testBinco
#testLargeDivision4
#testLargeDivision5
changed:
#testDivision3
#testLargeDivision (send #absDestructiveSubtract: instead of #absSubtract:)
#testLargeDivision2 (send #absDestructiveSubtract: instead of #absSubtract:)
#testLargeIntegerHelpers2
--- a/RegressionTests__IntegerTest.st Fri Feb 26 09:30:52 2016 +0100
+++ b/RegressionTests__IntegerTest.st Fri Feb 26 11:11:21 2016 +0100
@@ -704,6 +704,17 @@
"Modified: / 31.10.2000 / 20:23:20 / cg"
!
+testBinco
+ self assert: (10 binomialCoefficient:5) = (10 factorial / (5 factorial * 5 factorial)).
+ self assert: (100 binomialCoefficient:78) = (100 factorial / (78 factorial * (100-78) factorial)).
+ self assert: (1000 binomialCoefficient:5) = (1000 factorial / (5 factorial * (1000-5) factorial)).
+ self assert: (10000 binomialCoefficient:78) = (10000 factorial / (78 factorial * (10000-78) factorial)).
+
+ "
+ self basicNew testBinco
+ "
+!
+
testByteSwap
"/ <testedMethods: #( (Integer >> #byteSwapped32) (Integer >> #byteSwapped64)) >
@@ -1242,18 +1253,21 @@
16r00FFFFFFFFFFFFFFFF
16rFFFFFFFFFFFFFFFFFF
) do:[:m |
+ Transcript showCR:m.
nr := 1.
- 1 to:1000 do:[:n |
+ 1 to:100 do:[:n |
nr := nr * m
].
- 1 to:1000 do:[:n |
+ 1 to:100 do:[:n |
nr := nr / m
].
self assert:(nr == 1).
].
"
- self new testDivision2
+ self new testDivision3
+ Time millisecondsToRun:[ self new testDivision3 ] 14440
+ MessageTally spyOn:[ self new testDivision3 ]
"
!
@@ -2303,16 +2317,16 @@
t := 20 factorial.
t := t + 21 factorial.
- t absSubtract:21 factorial.
+ t absDestructiveSubtract:21 factorial.
self assert:(t compressed = 20 factorial).
self assert:(
- [
- |v|
- v := 100 factorial copy.
- v absSubtract:99 factorial.
- v compressed = (100 factorial - 99 factorial).
- ] value).
+ [
+ |v|
+ v := 100 factorial copy.
+ v absDestructiveSubtract:99 factorial.
+ v compressed = (100 factorial - 99 factorial).
+ ] value).
"Large // Large division"
self assert:((20 factorial // 19 factorial) == 20).
@@ -2438,7 +2452,7 @@
t := 30 factorial.
t := t + 31 factorial.
- t absSubtract:31 factorial.
+ t absDestructiveSubtract:31 factorial.
self assert:(t compressed = 30 factorial).
"Large // Large division"
@@ -2477,6 +2491,74 @@
"
!
+testLargeDivision4
+ self assert:(9000000000 \\ 4000000000) = (900 \\ 400 * 10000000).
+ self assert:(-9000000000 \\ 4000000000) = (-900 \\ 400 * 10000000).
+ self assert:(9000000000 \\ -4000000000) = (900 \\ -400 * 10000000).
+ self assert:(-9000000000 \\ -4000000000) = (-900 \\ -400 * 10000000).
+ self assert:(16000000000 \\ 4000000000) = (1600 \\ 400 * 10000000).
+ self assert:(-16000000000 \\ 4000000000) = (-1600 \\ 400 * 10000000).
+ self assert:(16000000000 \\ -4000000000) = (1600 \\ -400 * 10000000).
+ self assert:(-16000000000 \\ -4000000000) = (-1600 \\ -400 * 10000000).
+
+ self assert:(9000000000000000000 \\ 4000000000000000000) = (900 \\ 400 * 10000000000000000).
+ self assert:(-9000000000000000000 \\ 4000000000000000000) = (-900 \\ 400 * 10000000000000000).
+ self assert:(9000000000000000000 \\ -4000000000000000000) = (900 \\ -400 * 10000000000000000).
+ self assert:(-9000000000000000000 \\ -4000000000000000000) = (-900 \\ -400 * 10000000000000000).
+ self assert:(16000000000000000000 \\ 4000000000000000000) = (1600 \\ 400 * 10000000000000000).
+ self assert:(-16000000000000000000 \\ 4000000000000000000) = (-1600 \\ 400 * 10000000000000000).
+ self assert:(16000000000000000000 \\ -4000000000000000000) = (1600 \\ -400 * 10000000000000000).
+ self assert:(-16000000000000000000 \\ -4000000000000000000) = (-1600 \\ -400 * 10000000000000000).
+
+ self assert:(9000000000 \\ 7) = 5.
+ self assert:(-9000000000 \\ 7) = 2.
+ self assert:(9000000000 \\ -7) = -2.
+ self assert:(-9000000000 \\ -7) = -5.
+
+ self assert:(900 rem: 400) = 100.
+ self assert:(-900 rem: 400) = -100.
+ self assert:(900 rem: -400) = 100.
+ self assert:(-900 rem: -400) = -100.
+
+ self assert:(9000000000 rem: 4000000000) = 1000000000.
+ self assert:(-9000000000 rem: 4000000000) = -1000000000.
+ self assert:(9000000000 rem: -4000000000) = 1000000000.
+ self assert:(-9000000000 rem: -4000000000) = -1000000000.
+
+ "
+ self basicNew testLargeDivision4
+ "
+!
+
+testLargeDivision5
+ self assert:(9000000000 quo: 4000000000) = ((900 quo: 400) ).
+ self assert:(-9000000000 quo: 4000000000) = ((-900 quo: 400) ).
+ self assert:(9000000000 quo: -4000000000) = ((900 quo: -400) ).
+ self assert:(-9000000000 quo: -4000000000) = ((-900 quo: -400) ).
+ self assert:(16000000000 quo: 4000000000) = ((1600 quo: 400) ).
+ self assert:(-16000000000 quo: 4000000000) = ((-1600 quo: 400) ).
+ self assert:(16000000000 quo: -4000000000) = ((1600 quo: -400) ).
+ self assert:(-16000000000 quo: -4000000000) = ((-1600 quo: -400) ).
+
+ self assert:(9000000000000000000 quo: 4000000000000000000) = ((900 quo: 400) ).
+ self assert:(-9000000000000000000 quo: 4000000000000000000) = ((-900 quo: 400) ).
+ self assert:(9000000000000000000 quo: -4000000000000000000) = ((900 quo: -400) ).
+ self assert:(-9000000000000000000 quo: -4000000000000000000) = ((-900 quo: -400) ).
+ self assert:(16000000000000000000 quo: 4000000000000000000) = ((1600 quo: 400) ).
+ self assert:(-16000000000000000000 quo: 4000000000000000000) = ((-1600 quo: 400) ).
+ self assert:(16000000000000000000 quo: -4000000000000000000) = ((1600 quo: -400) ).
+ self assert:(-16000000000000000000 quo: -4000000000000000000) = ((-1600 quo: -400) ).
+
+ self assert:(9000000000 quo: 7) = 1285714285.
+ self assert:(-9000000000 quo: 7) = -1285714285.
+ self assert:(9000000000 quo: -7) = -1285714285.
+ self assert:(-9000000000 quo: -7) = 1285714285.
+
+ "
+ self basicNew testLargeDivision5
+ "
+!
+
testLargeIntegerHelpers
|t1 t2|
@@ -2587,83 +2669,83 @@
"/ absSubtract:
- t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] sign:1.
- r := t1 absSubtract:16r00ffffffffffffffff.
+ t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] copy sign:1.
+ r := t1 absDestructiveSubtract:16r00ffffffffffffffff.
self assert:(t1 digitBytes = #[16r01 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 ]).
self assert:(r == true).
- t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] sign:1.
- r := t1 absSubtract:16r010000000000000000.
+ t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] copy sign:1.
+ r := t1 absDestructiveSubtract:16r010000000000000000.
self assert:(t1 digitBytes = #[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 ]).
self assert:(r == false).
- t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] sign:1.
- r := t1 absSubtract:16r00ffffffffffffffffff.
+ t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] copy sign:1.
+ r := t1 absDestructiveSubtract:16r00ffffffffffffffffff.
self assert:(t1 digitBytes = #[16r01 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 ]).
self assert:(r == true).
- t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] sign:1.
- r := t1 absSubtract:16r01000000000000000000.
+ t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] copy sign:1.
+ r := t1 absDestructiveSubtract:16r01000000000000000000.
self assert:(t1 digitBytes = #[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 ]).
self assert:(r == false).
- t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] sign:1.
- r := t1 absSubtract:16r00ffffffffffffffffffff.
+ t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] copy sign:1.
+ r := t1 absDestructiveSubtract:16r00ffffffffffffffffffff.
self assert:(t1 digitBytes = #[16r01 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 ]).
self assert:(r == true).
- t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] sign:1.
- r := t1 absSubtract:16r0100000000000000000000.
+ t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] copy sign:1.
+ r := t1 absDestructiveSubtract:16r0100000000000000000000.
self assert:(t1 digitBytes = #[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 ]).
self assert:(r == false).
- t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] sign:1.
- r := t1 absSubtract:16r00ffffffffffffffffffffff.
+ t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] copy sign:1.
+ r := t1 absDestructiveSubtract:16r00ffffffffffffffffffffff.
self assert:(t1 digitBytes = #[16r01 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 ]).
self assert:(r == true).
- t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] sign:1.
- r := t1 absSubtract:16r010000000000000000000000.
+ t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] copy sign:1.
+ r := t1 absDestructiveSubtract:16r010000000000000000000000.
self assert:(t1 digitBytes = #[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 ]).
self assert:(r == false).
- t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] sign:1.
- r := t1 absSubtract:16r00ffffffffffffffffffffffff.
+ t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] copy sign:1.
+ r := t1 absDestructiveSubtract:16r00ffffffffffffffffffffffff.
self assert:(t1 digitBytes = #[16r01 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 ]).
self assert:(r == true).
- t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] sign:1.
- r := t1 absSubtract:16r01000000000000000000000000.
+ t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] copy sign:1.
+ r := t1 absDestructiveSubtract:16r01000000000000000000000000.
self assert:(t1 digitBytes = #[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 ]).
self assert:(r == false).
- t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] sign:1.
- r := t1 absSubtract:16r00ffffffffffffffffffffffffff.
+ t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] copy sign:1.
+ r := t1 absDestructiveSubtract:16r00ffffffffffffffffffffffffff.
self assert:(t1 digitBytes = #[16r01 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 ]).
self assert:(r == true).
- t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] sign:1.
- r := t1 absSubtract:16r0100000000000000000000000000.
+ t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] copy sign:1.
+ r := t1 absDestructiveSubtract:16r0100000000000000000000000000.
self assert:(t1 digitBytes = #[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 ]).
self assert:(r == false).
- t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] sign:1.
- r := t1 absSubtract:16r00ffffffffffffffffffffffffffff.
+ t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] copy sign:1.
+ r := t1 absDestructiveSubtract:16r00ffffffffffffffffffffffffffff.
self assert:(t1 digitBytes = #[16r01 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 ]).
self assert:(r == true).
- t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] sign:1.
- r := t1 absSubtract:16r010000000000000000000000000000.
+ t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] copy sign:1.
+ r := t1 absDestructiveSubtract:16r010000000000000000000000000000.
self assert:(t1 digitBytes = #[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 ]).
self assert:(r == false).
- t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] sign:1.
- r := t1 absSubtract:16r00ffffffffffffffffffffffffffffff.
+ t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] copy sign:1.
+ r := t1 absDestructiveSubtract:16r00ffffffffffffffffffffffffffffff.
self assert:(t1 digitBytes = #[16r01 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 ]).
self assert:(r == true).
- t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] sign:1.
- r := t1 absSubtract:16r01000000000000000000000000000000.
+ t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] copy sign:1.
+ r := t1 absDestructiveSubtract:16r01000000000000000000000000000000.
self assert:(t1 digitBytes = #[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 ]).
self assert:(r == false).
"