RegressionTests__IntegerTest.st
changeset 1528 10ec88fdd61b
parent 1527 6865b3c44b02
child 1529 32bd39e0e14e
equal deleted inserted replaced
1527:6865b3c44b02 1528:10ec88fdd61b
  3136      self basicNew testLargeIntegerHelpers3
  3136      self basicNew testLargeIntegerHelpers3
  3137     "
  3137     "
  3138 !
  3138 !
  3139 
  3139 
  3140 testLargeMultiplication
  3140 testLargeMultiplication
  3141     |t1 t2|
  3141     |t1 t2 p|
  3142 
  3142 
  3143     "multiplication"
  3143     "multiplication"
  3144     t1 := 100.
  3144     t1 := 100.
  3145     self assert:(t1 * t1 == 10000).
  3145     self assert:(t1 * t1 == 10000).
  3146     self assert:((t1 perform:'*' asSymbol with:t1) == 10000).
  3146     self assert:((t1 perform:'*' asSymbol with:t1) == 10000).
  3159     self assert:((t1 * t1) printString = '100000000').
  3159     self assert:((t1 * t1) printString = '100000000').
  3160     self assert:((t1 perform:'*' asSymbol with:t1) printString = '100000000').
  3160     self assert:((t1 perform:'*' asSymbol with:t1) printString = '100000000').
  3161 
  3161 
  3162     t1 := 100000.
  3162     t1 := 100000.
  3163     SmallInteger maxBytes == 4 ifTrue:[
  3163     SmallInteger maxBytes == 4 ifTrue:[
  3164 	self assert:(t1 * t1 = 10000000000).
  3164         self assert:(t1 * t1 = 10000000000).
  3165 	self assert:((t1 perform:'*' asSymbol with:t1) = 10000000000).
  3165         self assert:((t1 perform:'*' asSymbol with:t1) = 10000000000).
  3166     ].
  3166     ].
  3167     SmallInteger maxBytes == 8 ifTrue:[
  3167     SmallInteger maxBytes == 8 ifTrue:[
  3168 	self assert:(t1 * t1 == 10000000000).
  3168         self assert:(t1 * t1 == 10000000000).
  3169 	self assert:((t1 perform:'*' asSymbol with:t1) == 10000000000).
  3169         self assert:((t1 perform:'*' asSymbol with:t1) == 10000000000).
  3170     ].
  3170     ].
  3171 
  3171 
  3172     self assert:((t1 * t1) printString = '10000000000').
  3172     self assert:((t1 * t1) printString = '10000000000').
  3173     self assert:((t1 perform:'*' asSymbol with:t1) printString = '10000000000').
  3173     self assert:((t1 perform:'*' asSymbol with:t1) printString = '10000000000').
  3174 
  3174 
  3195     self assert:(100 factorial printString = '93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000').
  3195     self assert:(100 factorial printString = '93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000').
  3196     self assert:(1000 factorial printString = '402387260077093773543702433923003985719374864210714632543799910429938512398629020592044208486969404800479988610197196058631666872994808558901323829669944590997424504087073759918823627727188732519779505950995276120874975462497043601418278094646496291056393887437886487337119181045825783647849977012476632889835955735432513185323958463075557409114262417474349347553428646576611667797396668820291207379143853719588249808126867838374559731746136085379534524221586593201928090878297308431392844403281231558611036976801357304216168747609675871348312025478589320767169132448426236131412508780208000261683151027341827977704784635868170164365024153691398281264810213092761244896359928705114964975419909342221566832572080821333186116811553615836546984046708975602900950537616475847728421889679646244945160765353408198901385442487984959953319101723355556602139450399736280750137837615307127761926849034352625200015888535147331611702103968175921510907788019393178114194545257223865541461062892187960223838971476088506276862967146674697562911234082439208160153780889893964518263243671616762179168909779911903754031274622289988005195444414282012187361745992642956581746628302955570299024324153181617210465832036786906117260158783520751516284225540265170483304226143974286933061690897968482590125458327168226458066526769958652682272807075781391858178889652208164348344825993266043367660176999612831860788386150279465955131156552036093988180612138558600301435694527224206344631797460594682573103790084024432438465657245014402821885252470935190620929023136493273497565513958720559654228749774011413346962715422845862377387538230483865688976461927383814900140767310446640259899490222221765904339901886018566526485061799702356193897017860040811889729918311021171229845901641921068884387121855646124960798722908519296819372388642614839657382291123125024186649353143970137428531926649875337218940694281434118520158014123344828015051399694290153483077644569099073152433278288269864602789864321139083506217095002597389863554277196742822248757586765752344220207573630569498825087968928162753848863396909959826280956121450994871701244516461260379029309120889086942028510640182154399457156805941872748998094254742173582401063677404595741785160829230135358081840096996372524230560855903700624271243416909004153690105933983835777939410970027753472000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000').
  3196     self assert:(1000 factorial printString = '402387260077093773543702433923003985719374864210714632543799910429938512398629020592044208486969404800479988610197196058631666872994808558901323829669944590997424504087073759918823627727188732519779505950995276120874975462497043601418278094646496291056393887437886487337119181045825783647849977012476632889835955735432513185323958463075557409114262417474349347553428646576611667797396668820291207379143853719588249808126867838374559731746136085379534524221586593201928090878297308431392844403281231558611036976801357304216168747609675871348312025478589320767169132448426236131412508780208000261683151027341827977704784635868170164365024153691398281264810213092761244896359928705114964975419909342221566832572080821333186116811553615836546984046708975602900950537616475847728421889679646244945160765353408198901385442487984959953319101723355556602139450399736280750137837615307127761926849034352625200015888535147331611702103968175921510907788019393178114194545257223865541461062892187960223838971476088506276862967146674697562911234082439208160153780889893964518263243671616762179168909779911903754031274622289988005195444414282012187361745992642956581746628302955570299024324153181617210465832036786906117260158783520751516284225540265170483304226143974286933061690897968482590125458327168226458066526769958652682272807075781391858178889652208164348344825993266043367660176999612831860788386150279465955131156552036093988180612138558600301435694527224206344631797460594682573103790084024432438465657245014402821885252470935190620929023136493273497565513958720559654228749774011413346962715422845862377387538230483865688976461927383814900140767310446640259899490222221765904339901886018566526485061799702356193897017860040811889729918311021171229845901641921068884387121855646124960798722908519296819372388642614839657382291123125024186649353143970137428531926649875337218940694281434118520158014123344828015051399694290153483077644569099073152433278288269864602789864321139083506217095002597389863554277196742822248757586765752344220207573630569498825087968928162753848863396909959826280956121450994871701244516461260379029309120889086942028510640182154399457156805941872748998094254742173582401063677404595741785160829230135358081840096996372524230560855903700624271243416909004153690105933983835777939410970027753472000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000').
  3197 
  3197 
  3198     t1 := 100000000.                            "/ small
  3198     t1 := 100000000.                            "/ small
  3199     t2 := 100000000000000000.                   "/ large on 32bit; small on 64bt machines
  3199     t2 := 100000000000000000.                   "/ large on 32bit; small on 64bt machines
  3200     self assert:(t1 * t2) = 10000000000000000000000000.
  3200     p := t1 * t2.
  3201     self assert:(t2 * t1) = 10000000000000000000000000.
  3201     self assert:(p = 10000000000000000000000000).
       
  3202     p := t2 * t1.
       
  3203     self assert:(p = 10000000000000000000000000).
  3202 
  3204 
  3203     t1 := 100000000.                            "/ small
  3205     t1 := 100000000.                            "/ small
  3204     t2 := 1000000000000000000.                  "/ large on 32bit; small on 64bt machines
  3206     t2 := 1000000000000000000.                  "/ large on 32bit; small on 64bt machines
  3205     self assert:(t1 * t2) = 100000000000000000000000000.
  3207     self assert:(t1 * t2) = 100000000000000000000000000.
  3206     self assert:(t2 * t1) = 100000000000000000000000000.
  3208     self assert:(t2 * t1) = 100000000000000000000000000.
  3310     self assert:(t1 printString = '699697179634740272935560322271216335182775596927422865716399200802062765682314102885264570100200211251370690926108604161579425545019863369232209949922751354278329212124724267803033599595114924195721823679025053720850308776953208134469115885358619139670731195605237506312288263327925364912720266772715929600').
  3312     self assert:(t1 printString = '699697179634740272935560322271216335182775596927422865716399200802062765682314102885264570100200211251370690926108604161579425545019863369232209949922751354278329212124724267803033599595114924195721823679025053720850308776953208134469115885358619139670731195605237506312288263327925364912720266772715929600').
  3311     self assert:((t1 * t1) = 489576143188809998144298426641311496989165214458056165805143410866108690058261346129614030084813851082564698610174813898740525406243367146120734370570458429364167811695064904353093506532695086211301649001517008746471464304183710723162864634442619484210170532881759249266026059786349673031239277666195699357198366128286910123306594912484590029738722281929300359929462301099981920256369394887701755497894820998573896950238852994224811101315810851671448056042419257789317787959570728520197146733902575090480065597582292177085754523686580725860228636039424698638422538988050350726807943014483010988455057592156160000).
  3313     self assert:((t1 * t1) = 489576143188809998144298426641311496989165214458056165805143410866108690058261346129614030084813851082564698610174813898740525406243367146120734370570458429364167811695064904353093506532695086211301649001517008746471464304183710723162864634442619484210170532881759249266026059786349673031239277666195699357198366128286910123306594912484590029738722281929300359929462301099981920256369394887701755497894820998573896950238852994224811101315810851671448056042419257789317787959570728520197146733902575090480065597582292177085754523686580725860228636039424698638422538988050350726807943014483010988455057592156160000).
  3312     self assert:((t1 * t1) printString = '489576143188809998144298426641311496989165214458056165805143410866108690058261346129614030084813851082564698610174813898740525406243367146120734370570458429364167811695064904353093506532695086211301649001517008746471464304183710723162864634442619484210170532881759249266026059786349673031239277666195699357198366128286910123306594912484590029738722281929300359929462301099981920256369394887701755497894820998573896950238852994224811101315810851671448056042419257789317787959570728520197146733902575090480065597582292177085754523686580725860228636039424698638422538988050350726807943014483010988455057592156160000').
  3314     self assert:((t1 * t1) printString = '489576143188809998144298426641311496989165214458056165805143410866108690058261346129614030084813851082564698610174813898740525406243367146120734370570458429364167811695064904353093506532695086211301649001517008746471464304183710723162864634442619484210170532881759249266026059786349673031239277666195699357198366128286910123306594912484590029738722281929300359929462301099981920256369394887701755497894820998573896950238852994224811101315810851671448056042419257789317787959570728520197146733902575090480065597582292177085754523686580725860228636039424698638422538988050350726807943014483010988455057592156160000').
  3313 
  3315 
  3314     #(
  3316     #(
  3315 	16rFF
  3317         16rFF
  3316 	16rFFFF
  3318         16rFFFF
  3317 	16rFFFFFF
  3319         16rFFFFFF
  3318 	16rFFFFFFFF
  3320         16rFFFFFFFF
  3319 	16rFFFFFFFFFF
  3321         16rFFFFFFFFFF
  3320 	16rFFFFFFFFFFFF
  3322         16rFFFFFFFFFFFF
  3321 	16rFFFFFFFFFFFFFF
  3323         16rFFFFFFFFFFFFFF
  3322 	16rFFFFFFFFFFFFFFFF
  3324         16rFFFFFFFFFFFFFFFF
  3323 	16rFFFFFFFFFFFFFFFFFF
  3325         16rFFFFFFFFFFFFFFFFFF
  3324 	16rFFFFFFFFFFFFFFFFFFFF
  3326         16rFFFFFFFFFFFFFFFFFFFF
  3325 	16rFFFFFFFFFFFFFFFFFFFFFF
  3327         16rFFFFFFFFFFFFFFFFFFFFFF
  3326 	16rFFFFFFFFFFFFFFFFFFFFFFFF
  3328         16rFFFFFFFFFFFFFFFFFFFFFFFF
  3327     ) do:[:eachFactor1 |
  3329     ) do:[:eachFactor1 |
  3328 	#(
  3330         #(
  3329 	    16rFF
  3331             16rFF
  3330 	    16rFFFF
  3332             16rFFFF
  3331 	    16rFFFFFF
  3333             16rFFFFFF
  3332 	    16rFFFFFFFF
  3334             16rFFFFFFFF
  3333 	    16rFFFFFFFFFF
  3335             16rFFFFFFFFFF
  3334 	    16rFFFFFFFFFFFF
  3336             16rFFFFFFFFFFFF
  3335 	    16rFFFFFFFFFFFFFF
  3337             16rFFFFFFFFFFFFFF
  3336 	    16rFFFFFFFFFFFFFFFF
  3338             16rFFFFFFFFFFFFFFFF
  3337 	    16rFFFFFFFFFFFFFFFFFF
  3339             16rFFFFFFFFFFFFFFFFFF
  3338 	    16rFFFFFFFFFFFFFFFFFFFF
  3340             16rFFFFFFFFFFFFFFFFFFFF
  3339 	    16rFFFFFFFFFFFFFFFFFFFFFF
  3341             16rFFFFFFFFFFFFFFFFFFFFFF
  3340 	    16rFFFFFFFFFFFFFFFFFFFFFFFF
  3342             16rFFFFFFFFFFFFFFFFFFFFFFFF
  3341 	) do:[:eachFactor2 |
  3343         ) do:[:eachFactor2 |
  3342 	    |t3|
  3344             |t3|
  3343 
  3345 
  3344 	    t1 := (eachFactor1 * eachFactor2).
  3346             t1 := (eachFactor1 * eachFactor2).
  3345 	    t2 := (eachFactor2 * eachFactor1).
  3347             t2 := (eachFactor2 * eachFactor1).
  3346 
  3348 
  3347 	    self assert:(t1 = t2).
  3349             self assert:(t1 = t2).
  3348 t1 = 20203181441155852828228393631745 ifTrue:[
  3350 t1 = 20203181441155852828228393631745 ifTrue:[
  3349  eachFactor1 = 1099511627775 ifTrue:[
  3351  eachFactor1 = 1099511627775 ifTrue:[
  3350 self halt
  3352 self halt
  3351 ]].
  3353 ]].
  3352 
  3354 
  3353 	    self assert:(t1 / eachFactor1) = eachFactor2.
  3355             self assert:(t1 / eachFactor1) = eachFactor2.
  3354 	    self assert:(t1 / eachFactor2) = eachFactor1.
  3356             self assert:(t1 / eachFactor2) = eachFactor1.
  3355 	    t3 := (eachFactor1 asLargeInteger * eachFactor2 asLargeInteger).
  3357             t3 := (eachFactor1 asLargeInteger * eachFactor2 asLargeInteger).
  3356 	    self assert: t1 = t3.
  3358             self assert: t1 = t3.
  3357 	].
  3359         ].
  3358     ].
  3360     ].
  3359 
  3361 
  3360     "
  3362     "
  3361      self basicNew testLargeMultiplication
  3363      self basicNew testLargeMultiplication
  3362     "
  3364     "