class: RegressionTests::IntegerTest
authorClaus Gittinger <cg@exept.de>
Mon, 02 Dec 2013 17:22:14 +0100
changeset 1026 babb7ffa347e
parent 1025 1d694c9fd79d
child 1027 98e2426f0716
class: RegressionTests::IntegerTest added: #testLargeMultiplicationHelpers1 #testLargeMultiplicationHelpers2 changed: #testLargeMultiplication #testLargeMultiplicationHelpers
RegressionTests__IntegerTest.st
--- a/RegressionTests__IntegerTest.st	Mon Dec 02 15:46:06 2013 +0100
+++ b/RegressionTests__IntegerTest.st	Mon Dec 02 17:22:14 2013 +0100
@@ -2365,6 +2365,7 @@
     self assert:(t2 * t1) = 10000000000000000000000000000000000000000.
 
     "Large * Large multiplication"
+
     self assert:((16r3FFF * 16r3FFF) hexPrintString = 'FFF8001').
     self assert:((16r7FFF * 16r7FFF) hexPrintString = '3FFF0001').
     self assert:((16rFFFF * 16rFFFF) hexPrintString = 'FFFE0001').
@@ -2381,19 +2382,19 @@
 
     self assert:((16rFFFFFFFFFFFF * 16rFFFFFFFFFF) hexPrintString = 'FFFFFFFFFEFF0000000001').
     self assert:((16rFFFFFFFFFFFFFF * 16rFFFFFFFFFF) hexPrintString = 'FFFFFFFFFEFFFF0000000001').
-    self assert:((16rFFFFFFFFFFFFFFFF * 16rFFFFFFFFFF) hexPrintString = 'FFFFFFFFFEFFFFFF0000000001').
+    self assert:((t1 := 16rFFFFFFFFFFFFFFFF * 16rFFFFFFFFFF) hexPrintString = 'FFFFFFFFFEFFFFFF0000000001').
     self assert:((16rFFFFFFFFFFFFFFFFFF * 16rFFFFFFFFFF) hexPrintString = 'FFFFFFFFFEFFFFFFFF0000000001').
     self assert:((16rFFFFFFFFFFFFFFFFFFFF * 16rFFFFFFFFFF) hexPrintString = 'FFFFFFFFFEFFFFFFFFFF0000000001').
     self assert:((16rFFFFFFFFFFFFFFFFFFFFFF * 16rFFFFFFFFFF) hexPrintString = 'FFFFFFFFFEFFFFFFFFFFFF0000000001').
 
     self assert:((16rFFFFFFFFFFFF * 16rFFFFFFFFFFFF) hexPrintString = 'FFFFFFFFFFFE000000000001').
     self assert:((16rFFFFFFFFFFFFFF * 16rFFFFFFFFFFFFFF) hexPrintString = 'FFFFFFFFFFFFFE00000000000001').
+    self assert:((t2 := (t1 := 16rFFFFFFFFFFFFFFFF * 16rFFFFFFFFFFFFFFFF) hexPrintString) = 'FFFFFFFFFFFFFFFE0000000000000001').
     self assert:((16rFFFFFFFFFFFFFFFF * 16rFFFFFFFFFFFFFFFF) hexPrintString = 'FFFFFFFFFFFFFFFE0000000000000001').
     self assert:((16rFFFFFFFFFFFFFFFFFF * 16rFFFFFFFFFFFFFFFFFF) hexPrintString = 'FFFFFFFFFFFFFFFFFE000000000000000001').
     self assert:((16rFFFFFFFFFFFFFFFFFFFF * 16rFFFFFFFFFFFFFFFFFFFF) hexPrintString = 'FFFFFFFFFFFFFFFFFFFE00000000000000000001').
     self assert:((16rFFFFFFFFFFFFFFFFFFFFFF * 16rFFFFFFFFFFFFFFFFFFFFFF) hexPrintString = 'FFFFFFFFFFFFFFFFFFFFFE0000000000000000000001').
 
-
     t1 := 699697179634740272935560322271216335182775596927422865716399200802062765682314102885264570100200211251370690926108604161579425545019863369232209949922751354278329212124724267803033599595114924195721823679025053720850308776953208134469115885358619139670731195605237506312288263327925364912720266772715929600.
     self assert:(t1 printString = '699697179634740272935560322271216335182775596927422865716399200802062765682314102885264570100200211251370690926108604161579425545019863369232209949922751354278329212124724267803033599595114924195721823679025053720850308776953208134469115885358619139670731195605237506312288263327925364912720266772715929600').
     self assert:((t1 * t1) = 489576143188809998144298426641311496989165214458056165805143410866108690058261346129614030084813851082564698610174813898740525406243367146120734370570458429364167811695064904353093506532695086211301649001517008746471464304183710723162864634442619484210170532881759249266026059786349673031239277666195699357198366128286910123306594912484590029738722281929300359929462301099981920256369394887701755497894820998573896950238852994224811101315810851671448056042419257789317787959570728520197146733902575090480065597582292177085754523686580725860228636039424698638422538988050350726807943014483010988455057592156160000).
@@ -2452,6 +2453,232 @@
     "Modified: / 02-12-2013 / 15:45:39 / cg"
 !
 
+testLargeMultiplicationHelpers1
+    |t1 t2 r|
+
+    t1 := LargeInteger digitBytes:#[ 16rFF 16rFF 16rFF 16rFF 16rFF 16rFF 16rFF 16rFF].
+    t2 := LargeInteger digitBytes:#[ 16rFF 16rFF 16rFF 16rFF 16rFF 0 0 0].
+    r := t1 absMul:t2.
+    self assert:(r hexPrintString = 'FFFFFFFFFEFFFFFF0000000001').
+
+    t1 := LargeInteger digitBytes:#[ 16rFF 16rFF 16rFF 16rFF 16rFF 16rFF 16rFF 16rFF].
+    t2 := LargeInteger digitBytes:#[ 16rFF 16rFF 16rFF 16rFF 16rFF 16rFF 0 0].
+    r := t1 absMul:t2.
+    self assert:(r hexPrintString = 'FFFFFFFFFEFFFFFFFF0000000001').
+
+    "
+     self basicNew testLargeMultiplicationHelpers1
+    "
+
+    "Modified: / 02-12-2013 / 15:45:39 / cg"
+!
+
+testLargeMultiplicationHelpers2
+    |t1 t2 r|
+
+    "/ testing internal multiplication method
+    t1 := LargeInteger digitBytes:#[ 1 2 3 4 5 6 7 8].
+    t2 := LargeInteger digitBytes:#[ 2 0 0 0 0 0 0 0].
+    r := t1 absMul:t2.  
+    self assert:(r hexPrintString = '100E0C0A08060402').
+
+    t1 := LargeInteger digitBytes:#[ 1 2 3 4 5 6 7 8 9].
+    t2 := LargeInteger digitBytes:#[ 2 0 0 0 0 0 0 0].
+    r := t1 absMul:t2.  
+    self assert:(r hexPrintString = '12100E0C0A08060402').
+
+    t1 := LargeInteger digitBytes:#[ 1 2 3 4 5 6 7 8 9 10].
+    t2 := LargeInteger digitBytes:#[ 2 0 0 0 0 0 0 0].
+    r := t1 absMul:t2.  
+    self assert:(r hexPrintString = '1412100E0C0A08060402').
+
+    t1 := LargeInteger digitBytes:#[ 1 2 3 4 5 6 7 8 9 10 11].
+    t2 := LargeInteger digitBytes:#[ 2 0 0 0 0 0 0 0].
+    r := t1 absMul:t2.  
+    self assert:(r hexPrintString = '161412100E0C0A08060402').
+
+    t1 := LargeInteger digitBytes:#[ 1 2 3 4 5 6 7 8 9 10 11 12].
+    t2 := LargeInteger digitBytes:#[ 2 0 0 0 0 0 0 0].
+    r := t1 absMul:t2.  
+    self assert:(r hexPrintString = '18161412100E0C0A08060402').
+    
+    "/ --------
+
+    t1 := LargeInteger digitBytes:#[ 1 2 3 4 5 6 7 8].
+    t2 := LargeInteger digitBytes:#[ 2 0 0 0 0 0 0 0 0].
+    r := t1 absMul:t2.  
+    self assert:(r hexPrintString = '100E0C0A08060402').
+
+    t1 := LargeInteger digitBytes:#[ 1 2 3 4 5 6 7 8 9].
+    t2 := LargeInteger digitBytes:#[ 2 0 0 0 0 0 0 0 0].
+    r := t1 absMul:t2.  
+    self assert:(r hexPrintString = '12100E0C0A08060402').
+
+    t1 := LargeInteger digitBytes:#[ 1 2 3 4 5 6 7 8 9 10].
+    t2 := LargeInteger digitBytes:#[ 2 0 0 0 0 0 0 0 0].
+    r := t1 absMul:t2.
+    self assert:(r hexPrintString = '1412100E0C0A08060402').
+
+    t1 := LargeInteger digitBytes:#[ 1 2 3 4 5 6 7 8 9 10 11].
+    t2 := LargeInteger digitBytes:#[ 2 0 0 0 0 0 0 0 0].
+    r := t1 absMul:t2.  
+    self assert:(r hexPrintString = '161412100E0C0A08060402').
+
+    t1 := LargeInteger digitBytes:#[ 1 2 3 4 5 6 7 8 9 10 11 12].
+    t2 := LargeInteger digitBytes:#[ 2 0 0 0 0 0 0 0 0].
+    r := t1 absMul:t2.  
+    self assert:(r hexPrintString = '18161412100E0C0A08060402').
+
+    "/ --------
+
+    t1 := LargeInteger digitBytes:#[ 1 2 3 4 5 6 7 8].
+    t2 := LargeInteger digitBytes:#[ 2 0 0 0 0 0 0 0 0 0].
+    r := t1 absMul:t2.  
+    self assert:(r hexPrintString = '100E0C0A08060402').
+
+    t1 := LargeInteger digitBytes:#[ 1 2 3 4 5 6 7 8 9].
+    t2 := LargeInteger digitBytes:#[ 2 0 0 0 0 0 0 0 0 0].
+    r := t1 absMul:t2.  
+    self assert:(r hexPrintString = '12100E0C0A08060402').
+
+    t1 := LargeInteger digitBytes:#[ 1 2 3 4 5 6 7 8 9 10].
+    t2 := LargeInteger digitBytes:#[ 2 0 0 0 0 0 0 0 0 0 ].
+    r := t1 absMul:t2.
+    self assert:(r hexPrintString = '1412100E0C0A08060402').
+
+    t1 := LargeInteger digitBytes:#[ 1 2 3 4 5 6 7 8 9 10 11].
+    t2 := LargeInteger digitBytes:#[ 2 0 0 0 0 0 0 0 0 0].
+    r := t1 absMul:t2.  
+    self assert:(r hexPrintString = '161412100E0C0A08060402').
+
+    t1 := LargeInteger digitBytes:#[ 1 2 3 4 5 6 7 8 9 10 11 12].
+    t2 := LargeInteger digitBytes:#[ 2 0 0 0 0 0 0 0 0 0].
+    r := t1 absMul:t2.  
+    self assert:(r hexPrintString = '18161412100E0C0A08060402').
+
+    "/ --------
+
+    t1 := LargeInteger digitBytes:#[ 1 2 3 4 5 6 7 8].
+    t2 := LargeInteger digitBytes:#[ 2 0 0 0 0 0 0 0 0 0 0].
+    r := t1 absMul:t2.  
+    self assert:(r hexPrintString = '100E0C0A08060402').
+
+    t1 := LargeInteger digitBytes:#[ 1 2 3 4 5 6 7 8 9].
+    t2 := LargeInteger digitBytes:#[ 2 0 0 0 0 0 0 0 0 0 0].
+    r := t1 absMul:t2.  
+    self assert:(r hexPrintString = '12100E0C0A08060402').
+
+    t1 := LargeInteger digitBytes:#[ 1 2 3 4 5 6 7 8 9 10].
+    t2 := LargeInteger digitBytes:#[ 2 0 0 0 0 0 0 0 0 0 0].
+    r := t1 absMul:t2.
+    self assert:(r hexPrintString = '1412100E0C0A08060402').
+
+    t1 := LargeInteger digitBytes:#[ 1 2 3 4 5 6 7 8 9 10 11].
+    t2 := LargeInteger digitBytes:#[ 2 0 0 0 0 0 0 0 0 0 0].
+    r := t1 absMul:t2.  
+    self assert:(r hexPrintString = '161412100E0C0A08060402').
+
+    t1 := LargeInteger digitBytes:#[ 1 2 3 4 5 6 7 8 9 10 11 12].
+    t2 := LargeInteger digitBytes:#[ 2 0 0 0 0 0 0 0 0 0 0].
+    r := t1 absMul:t2.  
+    self assert:(r hexPrintString = '18161412100E0C0A08060402').
+
+
+    "/ ==================0
+
+    t1 := LargeInteger digitBytes:#[ 128 1 1 1 1 1 1 1].
+    t2 := LargeInteger digitBytes:#[ 2 0 0 0 0 0 0 0].
+    r := t1 absMul:t2.             
+    self assert:(r hexPrintString = '202020202020300').
+
+    t1 := LargeInteger digitBytes:#[ 128 1 1 1 1 1 1 1].
+    t2 := LargeInteger digitBytes:#[ 2 0 0 0 0 0 0 0 0].
+    r := t1 absMul:t2.  
+    self assert:(r hexPrintString = '202020202020300').
+
+    t1 := LargeInteger digitBytes:#[ 128 1 1 1 1 1 1 1].
+    t2 := LargeInteger digitBytes:#[ 2 0 0 0 0 0 0 0 0 0].
+    r := t1 absMul:t2.          
+    self assert:(r hexPrintString = '202020202020300').
+
+    t1 := LargeInteger digitBytes:#[ 128 1 1 1 1 1 1 1].
+    t2 := LargeInteger digitBytes:#[ 2 0 0 0 0 0 0 0 0 0 0].
+    r := t1 absMul:t2.          
+    self assert:(r hexPrintString = '202020202020300').
+
+    "/ ---------
+
+    t1 := LargeInteger digitBytes:#[ 0 128 1 1 1 1 1 1 1].
+    t2 := LargeInteger digitBytes:#[ 2 0 0 0 0 0 0 0].
+    r := t1 absMul:t2.             
+    self assert:(r hexPrintString = '20202020202030000').
+
+    t1 := LargeInteger digitBytes:#[ 0 128 1 1 1 1 1 1 1].
+    t2 := LargeInteger digitBytes:#[ 2 0 0 0 0 0 0 0 0].
+    r := t1 absMul:t2.  
+    self assert:(r hexPrintString = '20202020202030000').
+
+    t1 := LargeInteger digitBytes:#[ 0 128 1 1 1 1 1 1 1].
+    t2 := LargeInteger digitBytes:#[ 2 0 0 0 0 0 0 0 0 0].
+    r := t1 absMul:t2.          
+    self assert:(r hexPrintString = '20202020202030000').
+
+    t1 := LargeInteger digitBytes:#[ 0 128 1 1 1 1 1 1 1].
+    t2 := LargeInteger digitBytes:#[ 2 0 0 0 0 0 0 0 0 0 0].
+    r := t1 absMul:t2.          
+    self assert:(r hexPrintString = '20202020202030000').
+
+    "/ ---------
+
+    t1 := LargeInteger digitBytes:#[ 0 0 128 1 1 1 1 1 1 1].
+    t2 := LargeInteger digitBytes:#[ 2 0 0 0 0 0 0 0].
+    r := t1 absMul:t2.             
+    self assert:(r hexPrintString = '2020202020203000000').
+
+    t1 := LargeInteger digitBytes:#[ 0 0 128 1 1 1 1 1 1 1].
+    t2 := LargeInteger digitBytes:#[ 2 0 0 0 0 0 0 0 0].
+    r := t1 absMul:t2.  
+    self assert:(r hexPrintString = '2020202020203000000').
+
+    t1 := LargeInteger digitBytes:#[ 0 0 128 1 1 1 1 1 1 1].
+    t2 := LargeInteger digitBytes:#[ 2 0 0 0 0 0 0 0 0 0].
+    r := t1 absMul:t2.          
+    self assert:(r hexPrintString = '2020202020203000000').
+
+    t1 := LargeInteger digitBytes:#[ 0 0 128 1 1 1 1 1 1 1].
+    t2 := LargeInteger digitBytes:#[ 2 0 0 0 0 0 0 0 0 0 0].
+    r := t1 absMul:t2.          
+    self assert:(r hexPrintString = '2020202020203000000').
+
+    "/ ---------
+
+    t1 := LargeInteger digitBytes:#[ 0 0 0 128 1 1 1 1 1 1 1].
+    t2 := LargeInteger digitBytes:#[ 2 0 0 0 0 0 0 0].
+    r := t1 absMul:t2.             
+    self assert:(r hexPrintString = '202020202020300000000').
+
+    t1 := LargeInteger digitBytes:#[ 0 0 0 128 1 1 1 1 1 1 1].
+    t2 := LargeInteger digitBytes:#[ 2 0 0 0 0 0 0 0 0].
+    r := t1 absMul:t2.  
+    self assert:(r hexPrintString = '202020202020300000000').
+
+    t1 := LargeInteger digitBytes:#[ 0 0 0 128 1 1 1 1 1 1 1].
+    t2 := LargeInteger digitBytes:#[ 2 0 0 0 0 0 0 0 0 0].
+    r := t1 absMul:t2.          
+    self assert:(r hexPrintString = '202020202020300000000').
+
+    t1 := LargeInteger digitBytes:#[ 0 0 0 128 1 1 1 1 1 1 1].
+    t2 := LargeInteger digitBytes:#[ 2 0 0 0 0 0 0 0 0 0 0].
+    r := t1 absMul:t2.          
+    self assert:(r hexPrintString = '202020202020300000000').
+
+    "
+     self basicNew testLargeMultiplicationHelpers2
+    "
+
+    "Modified: / 02-12-2013 / 15:45:39 / cg"
+!
+
 testLargeSubtraction1
     |a1 a2 a b1 b2 b c1 c2 c|