RegressionTests__IntegerTest.st
branchjv
changeset 1482 2c941c0061fb
parent 1480 5c2785548851
child 1483 8e5a0f125106
equal deleted inserted replaced
1481:66aec2479727 1482:2c941c0061fb
   700     "
   700     "
   701      self basicNew doTestAll
   701      self basicNew doTestAll
   702     "
   702     "
   703 
   703 
   704     "Modified: / 31.10.2000 / 20:23:20 / cg"
   704     "Modified: / 31.10.2000 / 20:23:20 / cg"
       
   705 !
       
   706 
       
   707 testBinco
       
   708      self assert: (10 binomialCoefficient:5) = (10 factorial / (5 factorial * 5 factorial)).
       
   709      self assert: (100 binomialCoefficient:78) = (100 factorial / (78 factorial * (100-78) factorial)).
       
   710      self assert: (1000 binomialCoefficient:5) = (1000 factorial / (5 factorial * (1000-5) factorial)).
       
   711      self assert: (10000 binomialCoefficient:78) = (10000 factorial / (78 factorial * (10000-78) factorial)).
       
   712 
       
   713     "
       
   714      self basicNew testBinco
       
   715     "
   705 !
   716 !
   706 
   717 
   707 testByteSwap
   718 testByteSwap
   708     "/ <testedMethods: #( (Integer >> #byteSwapped32) (Integer >> #byteSwapped64)) >
   719     "/ <testedMethods: #( (Integer >> #byteSwapped32) (Integer >> #byteSwapped64)) >
   709 
   720 
  1240         16r000000FFFFFFFFFFFF
  1251         16r000000FFFFFFFFFFFF
  1241         16r0000FFFFFFFFFFFFFF
  1252         16r0000FFFFFFFFFFFFFF
  1242         16r00FFFFFFFFFFFFFFFF
  1253         16r00FFFFFFFFFFFFFFFF
  1243         16rFFFFFFFFFFFFFFFFFF
  1254         16rFFFFFFFFFFFFFFFFFF
  1244     ) do:[:m |
  1255     ) do:[:m |
       
  1256         Transcript showCR:m.
  1245         nr := 1.
  1257         nr := 1.
  1246         1 to:1000 do:[:n |
  1258         1 to:100 do:[:n |
  1247             nr := nr * m
  1259             nr := nr * m
  1248         ].
  1260         ].
  1249         1 to:1000 do:[:n |
  1261         1 to:100 do:[:n |
  1250             nr := nr / m
  1262             nr := nr / m
  1251         ].
  1263         ].
  1252         self assert:(nr == 1).
  1264         self assert:(nr == 1).
  1253     ].
  1265     ].
  1254 
  1266 
  1255     "
  1267     "
  1256      self new testDivision2
  1268      self new testDivision3
       
  1269      Time millisecondsToRun:[ self new testDivision3 ] 14440
       
  1270      MessageTally spyOn:[ self new testDivision3 ] 
  1257     "
  1271     "
  1258 !
  1272 !
  1259 
  1273 
  1260 testEncodeDecode
  1274 testEncodeDecode
  1261     self assert:(1 encodeAsBCD hexPrintString = '1').
  1275     self assert:(1 encodeAsBCD hexPrintString = '1').
  1323 
  1337 
  1324     self assert:(1 factorial = 1).
  1338     self assert:(1 factorial = 1).
  1325     self assert:(2 factorial = 2).
  1339     self assert:(2 factorial = 2).
  1326     self assert:(10 factorial = 3628800).
  1340     self assert:(10 factorial = 3628800).
  1327     self assert:(11 factorial = 39916800).
  1341     self assert:(11 factorial = 39916800).
       
  1342     self assert:(12 factorial = 479001600).
       
  1343     self assert:(13 factorial digitBytes = #[0 204 40 115 1]).
       
  1344     self assert:(13 factorial = 6227020800).
       
  1345     self assert:(14 factorial digitBytes = #[0 40 59 76 20]).
       
  1346     self assert:(14 factorial = 87178291200).
       
  1347     self assert:(15 factorial digitBytes = #[0 88 119 119 48 1]).
       
  1348     self assert:(15 factorial = 1307674368000).
       
  1349     self assert:(16 factorial digitBytes = #[0 128 117 119 7 19]).
       
  1350     self assert:(16 factorial = 20922789888000).
       
  1351     self assert:(17 factorial digitBytes = #[0 128 205 238 126 67 1]).
       
  1352     self assert:(17 factorial = 355687428096000).
       
  1353     self assert:(18 factorial digitBytes = #[0 0 115 202 236 190 22]).
       
  1354     self assert:(18 factorial = 6402373705728000).
       
  1355     self assert:(19 factorial digitBytes = #[0 0 137 6 147 43 176 1]).
       
  1356     self assert:(19 factorial = 121645100408832000).
       
  1357     self assert:(20 factorial digitBytes = #[0 0 180 130 124 103 195 33]).
  1328     self assert:(20 factorial = 2432902008176640000).
  1358     self assert:(20 factorial = 2432902008176640000).
  1329     self assert:(50 factorial = 30414093201713378043612608166064768844377641568960512000000000000).
  1359     self assert:(50 factorial = 30414093201713378043612608166064768844377641568960512000000000000).
  1330 
  1360 
  1331     "
  1361     "
  1332      self basicNew testFactorial
  1362      self basicNew testFactorial
  1333     "
  1363     "
  1334 
  1364 
  1335     "Created: / 24-04-2010 / 13:52:23 / cg"
  1365     "Created: / 24-04-2010 / 13:52:23 / cg"
  1336     "Modified: / 27-04-2010 / 10:34:22 / cg"
  1366     "Modified: / 26-02-2016 / 15:43:16 / cg"
  1337 !
  1367 !
  1338 
  1368 
  1339 testGCD
  1369 testGCD
  1340     "/ <testedMethods: #( (Integer >> #gcd:) ) >
  1370     "/ <testedMethods: #( (Integer >> #gcd:) ) >
  1341 
  1371 
  1842     "general conversion & arithmetic tests.
  1872     "general conversion & arithmetic tests.
  1843      Notice, the arithmetic tests are both performed via regular sends
  1873      Notice, the arithmetic tests are both performed via regular sends
  1844      and via constructed performs. The reason is to test both inlined
  1874      and via constructed performs. The reason is to test both inlined
  1845      JIT-compiler code AND the regular methods code."
  1875      JIT-compiler code AND the regular methods code."
  1846 
  1876 
  1847     |s n1 n2 x|
       
  1848 
       
  1849     "Large + Large addition"
  1877     "Large + Large addition"
  1850     self testReading1.
  1878     self testReading1.
  1851 
  1879 
       
  1880     self assert:(20 factorial = 2432902008176640000).
       
  1881     self assert:(20 factorial printString = '2432902008176640000').
  1852     self assert:((20 factorial + 20 factorial) printString = '4865804016353280000').
  1882     self assert:((20 factorial + 20 factorial) printString = '4865804016353280000').
  1853     self assert:((20 factorial + 1) printString = '2432902008176640001').
  1883     self assert:((20 factorial + 1) printString = '2432902008176640001').
  1854     self assert:((20 factorial + 1000) printString = '2432902008176641000').
  1884     self assert:((20 factorial + 1000) printString = '2432902008176641000').
  1855 
  1885 
  1856     "Large + Small addition"
  1886     "Large + Small addition"
  1867 
  1897 
  1868     "
  1898     "
  1869      self basicNew testLargeAddition
  1899      self basicNew testLargeAddition
  1870     "
  1900     "
  1871 
  1901 
  1872     "Modified: / 4.6.1999 / 15:26:55 / cg"
  1902     "Modified: / 26-02-2016 / 15:39:33 / cg"
  1873 !
  1903 !
  1874 
  1904 
  1875 testLargeAddition1
  1905 testLargeAddition1
  1876     "general conversion & arithmetic tests.
  1906     "general conversion & arithmetic tests.
  1877      Notice, the arithmetic tests are both performed via regular sends
  1907      Notice, the arithmetic tests are both performed via regular sends
  2301     self assert:(t printString = 10 factorial printString).
  2331     self assert:(t printString = 10 factorial printString).
  2302     self assert:(t == 10 factorial).
  2332     self assert:(t == 10 factorial).
  2303 
  2333 
  2304     t := 20 factorial.
  2334     t := 20 factorial.
  2305     t := t + 21 factorial.
  2335     t := t + 21 factorial.
  2306     t absSubtract:21 factorial.
  2336     t absDestructiveSubtract:21 factorial.
  2307     self assert:(t compressed = 20 factorial).
  2337     self assert:(t compressed = 20 factorial).
  2308 
  2338 
  2309     self assert:(
  2339     self assert:(
  2310 	     [
  2340              [
  2311 	       |v|
  2341                |v|
  2312 	       v := 100 factorial copy.
  2342                v := 100 factorial copy.
  2313 	       v absSubtract:99 factorial.
  2343                v absDestructiveSubtract:99 factorial.
  2314 	       v compressed = (100 factorial - 99 factorial).
  2344                v compressed = (100 factorial - 99 factorial).
  2315 	     ] value).
  2345              ] value).
  2316 
  2346 
  2317     "Large // Large division"
  2347     "Large // Large division"
  2318     self assert:((20 factorial // 19 factorial) == 20).
  2348     self assert:((20 factorial // 19 factorial) == 20).
  2319     self assert:((20 factorial * 21 // 20 // 21) = (19 factorial)).
  2349     self assert:((20 factorial * 21 // 20 // 21) = (19 factorial)).
  2320     self assert:((10000 factorial // 9999 factorial) == 10000).
  2350     self assert:((10000 factorial // 9999 factorial) == 10000).
  2436     self assert:(t printString = 20 factorial printString).
  2466     self assert:(t printString = 20 factorial printString).
  2437     self assert:(t = 20 factorial).
  2467     self assert:(t = 20 factorial).
  2438 
  2468 
  2439     t := 30 factorial.
  2469     t := 30 factorial.
  2440     t := t + 31 factorial.
  2470     t := t + 31 factorial.
  2441     t absSubtract:31 factorial.
  2471     t absDestructiveSubtract:31 factorial.
  2442     self assert:(t compressed = 30 factorial).
  2472     self assert:(t compressed = 30 factorial).
  2443 
  2473 
  2444     "Large // Large division"
  2474     "Large // Large division"
  2445     self assert:((30 factorial // 29 factorial) == 30).
  2475     self assert:((30 factorial // 29 factorial) == 30).
  2446     self assert:((30 factorial * 31 // 30 // 31) = (29 factorial)).
  2476     self assert:((30 factorial * 31 // 30 // 31) = (29 factorial)).
  2472 
  2502 
  2473     self assert:((divMod at:1) * 1099511627775 + (divMod at:2) = nr).
  2503     self assert:((divMod at:1) * 1099511627775 + (divMod at:2) = nr).
  2474     
  2504     
  2475     "
  2505     "
  2476      self basicNew testLargeDivision3
  2506      self basicNew testLargeDivision3
       
  2507     "
       
  2508 !
       
  2509 
       
  2510 testLargeDivision4
       
  2511     self assert:(9000000000 \\ 4000000000)    = (900 \\ 400 * 10000000).
       
  2512     self assert:(-9000000000 \\ 4000000000)   = (-900 \\ 400 * 10000000).
       
  2513     self assert:(9000000000 \\ -4000000000)   = (900 \\ -400 * 10000000).
       
  2514     self assert:(-9000000000 \\ -4000000000)  = (-900 \\ -400 * 10000000).
       
  2515     self assert:(16000000000 \\ 4000000000)   = (1600 \\ 400 * 10000000).
       
  2516     self assert:(-16000000000 \\ 4000000000)  = (-1600 \\ 400 * 10000000).
       
  2517     self assert:(16000000000 \\ -4000000000)  = (1600 \\ -400 * 10000000).
       
  2518     self assert:(-16000000000 \\ -4000000000) = (-1600 \\ -400 * 10000000).
       
  2519 
       
  2520     self assert:(9000000000000000000 \\ 4000000000000000000)    = (900 \\ 400 * 10000000000000000).
       
  2521     self assert:(-9000000000000000000 \\ 4000000000000000000)   = (-900 \\ 400 * 10000000000000000).
       
  2522     self assert:(9000000000000000000 \\ -4000000000000000000)   = (900 \\ -400 * 10000000000000000).
       
  2523     self assert:(-9000000000000000000 \\ -4000000000000000000)  = (-900 \\ -400 * 10000000000000000).
       
  2524     self assert:(16000000000000000000 \\ 4000000000000000000)   = (1600 \\ 400 * 10000000000000000).
       
  2525     self assert:(-16000000000000000000 \\ 4000000000000000000)  = (-1600 \\ 400 * 10000000000000000).
       
  2526     self assert:(16000000000000000000 \\ -4000000000000000000)  = (1600 \\ -400 * 10000000000000000).
       
  2527     self assert:(-16000000000000000000 \\ -4000000000000000000) = (-1600 \\ -400 * 10000000000000000).
       
  2528 
       
  2529     self assert:(9000000000 \\ 7) = 5.
       
  2530     self assert:(-9000000000 \\ 7) = 2.
       
  2531     self assert:(9000000000 \\ -7) = -2.
       
  2532     self assert:(-9000000000 \\ -7) = -5.
       
  2533 
       
  2534     self assert:(900 rem: 400) = 100.
       
  2535     self assert:(-900 rem: 400) = -100.
       
  2536     self assert:(900 rem: -400) = 100.
       
  2537     self assert:(-900 rem: -400) = -100.
       
  2538 
       
  2539     self assert:(9000000000 rem: 4000000000) = 1000000000.
       
  2540     self assert:(-9000000000 rem: 4000000000) = -1000000000.
       
  2541     self assert:(9000000000 rem: -4000000000) = 1000000000.
       
  2542     self assert:(-9000000000 rem: -4000000000) = -1000000000.
       
  2543     
       
  2544     "
       
  2545      self basicNew testLargeDivision4
       
  2546     "
       
  2547 !
       
  2548 
       
  2549 testLargeDivision5
       
  2550     self assert:(9000000000 quo: 4000000000)    = ((900 quo: 400) ).
       
  2551     self assert:(-9000000000 quo: 4000000000)   = ((-900 quo: 400) ).
       
  2552     self assert:(9000000000 quo: -4000000000)   = ((900 quo: -400) ).
       
  2553     self assert:(-9000000000 quo: -4000000000)  = ((-900 quo: -400) ).
       
  2554     self assert:(16000000000 quo: 4000000000)   = ((1600 quo: 400) ).
       
  2555     self assert:(-16000000000 quo: 4000000000)  = ((-1600 quo: 400) ).
       
  2556     self assert:(16000000000 quo: -4000000000)  = ((1600 quo: -400) ).
       
  2557     self assert:(-16000000000 quo: -4000000000) = ((-1600 quo: -400) ).
       
  2558 
       
  2559     self assert:(9000000000000000000 quo: 4000000000000000000)    = ((900 quo: 400) ).
       
  2560     self assert:(-9000000000000000000 quo: 4000000000000000000)   = ((-900 quo: 400) ).
       
  2561     self assert:(9000000000000000000 quo: -4000000000000000000)   = ((900 quo: -400) ).
       
  2562     self assert:(-9000000000000000000 quo: -4000000000000000000)  = ((-900 quo: -400) ).
       
  2563     self assert:(16000000000000000000 quo: 4000000000000000000)   = ((1600 quo: 400) ).
       
  2564     self assert:(-16000000000000000000 quo: 4000000000000000000)  = ((-1600 quo: 400) ).
       
  2565     self assert:(16000000000000000000 quo: -4000000000000000000)  = ((1600 quo: -400) ).
       
  2566     self assert:(-16000000000000000000 quo: -4000000000000000000) = ((-1600 quo: -400) ).
       
  2567 
       
  2568     self assert:(9000000000 quo: 7) = 1285714285.
       
  2569     self assert:(-9000000000 quo: 7) = -1285714285.
       
  2570     self assert:(9000000000 quo: -7) = -1285714285.
       
  2571     self assert:(-9000000000 quo: -7) = 1285714285.
       
  2572     
       
  2573     "
       
  2574      self basicNew testLargeDivision5
       
  2575     "
       
  2576 !
       
  2577 
       
  2578 testLargeDivision6
       
  2579     |t|
       
  2580 
       
  2581     t := 20 factorial.
       
  2582     self assert:(t = 2432902008176640000).
       
  2583     t := t / 20.
       
  2584     self assert:(t = 19 factorial).
       
  2585     self assert:(t = 121645100408832000).
       
  2586     
       
  2587     t := t / 19.
       
  2588     self assert:(t = 18 factorial).
       
  2589     self assert:(t = 6402373705728000).
       
  2590 
       
  2591     t := t / 18.
       
  2592     self assert:(t = 17 factorial).
       
  2593     self assert:(t = 355687428096000).
       
  2594 
       
  2595     t := t / 17.
       
  2596     self assert:(t = 16 factorial).
       
  2597     self assert:(t = 20922789888000).
       
  2598 
       
  2599     t := t / 16.
       
  2600     self assert:(t = 15 factorial).
       
  2601     self assert:(t = 1307674368000).
       
  2602 
       
  2603     t := t / 15.
       
  2604     self assert:(t = 14 factorial).
       
  2605     self assert:(t = 87178291200).
       
  2606 
       
  2607     t := t / 14.
       
  2608     self assert:(t = 13 factorial).
       
  2609     self assert:(t = 6227020800).
       
  2610 
       
  2611     t := t / 13.
       
  2612     self assert:(t = 12 factorial).
       
  2613     self assert:(t = 479001600).
       
  2614 
       
  2615     t := t / 12.
       
  2616     self assert:(t = 11 factorial).
       
  2617     self assert:(t = 39916800).
       
  2618 
       
  2619     t := t / 11.
       
  2620     self assert:(t = 10 factorial).
       
  2621     self assert:(t = 3628800).
       
  2622 
       
  2623     "
       
  2624      self basicNew testLargeDivision6
  2477     "
  2625     "
  2478 !
  2626 !
  2479 
  2627 
  2480 testLargeIntegerHelpers
  2628 testLargeIntegerHelpers
  2481     |t1 t2|
  2629     |t1 t2|
  2578     "
  2726     "
  2579      self basicNew testLargeIntegerHelpers
  2727      self basicNew testLargeIntegerHelpers
  2580     "
  2728     "
  2581 
  2729 
  2582     "Modified: / 20.5.1999 / 09:41:19 / cg"
  2730     "Modified: / 20.5.1999 / 09:41:19 / cg"
       
  2731 !
       
  2732 
       
  2733 testLargeIntegerHelpers2
       
  2734     |t1 r|
       
  2735 
       
  2736     "/ absSubtract:
       
  2737 
       
  2738     t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] copy sign:1.
       
  2739     r := t1 absDestructiveSubtract:16r00ffffffffffffffff.
       
  2740     self assert:(t1 digitBytes = #[16r01 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 ]).
       
  2741     self assert:(r == true).
       
  2742 
       
  2743     t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] copy sign:1.
       
  2744     r := t1 absDestructiveSubtract:16r010000000000000000.
       
  2745     self assert:(t1 digitBytes = #[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 ]).
       
  2746     self assert:(r == false).
       
  2747 
       
  2748     t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] copy sign:1.
       
  2749     r := t1 absDestructiveSubtract:16r00ffffffffffffffffff.
       
  2750     self assert:(t1 digitBytes = #[16r01 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 ]).
       
  2751     self assert:(r == true).
       
  2752 
       
  2753     t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] copy sign:1.
       
  2754     r := t1 absDestructiveSubtract:16r01000000000000000000.
       
  2755     self assert:(t1 digitBytes = #[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 ]).
       
  2756     self assert:(r == false).
       
  2757 
       
  2758     t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] copy sign:1.
       
  2759     r := t1 absDestructiveSubtract:16r00ffffffffffffffffffff.
       
  2760     self assert:(t1 digitBytes = #[16r01 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 ]).
       
  2761     self assert:(r == true).
       
  2762 
       
  2763     t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] copy sign:1.
       
  2764     r := t1 absDestructiveSubtract:16r0100000000000000000000.
       
  2765     self assert:(t1 digitBytes = #[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 ]).
       
  2766     self assert:(r == false).
       
  2767 
       
  2768     t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] copy sign:1.
       
  2769     r := t1 absDestructiveSubtract:16r00ffffffffffffffffffffff.
       
  2770     self assert:(t1 digitBytes = #[16r01 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 ]).
       
  2771     self assert:(r == true).
       
  2772 
       
  2773     t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] copy sign:1.
       
  2774     r := t1 absDestructiveSubtract:16r010000000000000000000000.
       
  2775     self assert:(t1 digitBytes = #[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 ]).
       
  2776     self assert:(r == false).
       
  2777 
       
  2778     t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] copy sign:1.
       
  2779     r := t1 absDestructiveSubtract:16r00ffffffffffffffffffffffff.
       
  2780     self assert:(t1 digitBytes = #[16r01 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 ]).
       
  2781     self assert:(r == true).
       
  2782 
       
  2783     t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] copy sign:1.
       
  2784     r := t1 absDestructiveSubtract:16r01000000000000000000000000.
       
  2785     self assert:(t1 digitBytes = #[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 ]).
       
  2786     self assert:(r == false).
       
  2787 
       
  2788     t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] copy sign:1.
       
  2789     r := t1 absDestructiveSubtract:16r00ffffffffffffffffffffffffff.
       
  2790     self assert:(t1 digitBytes = #[16r01 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 ]).
       
  2791     self assert:(r == true).
       
  2792 
       
  2793     t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] copy sign:1.
       
  2794     r := t1 absDestructiveSubtract:16r0100000000000000000000000000.
       
  2795     self assert:(t1 digitBytes = #[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 ]).
       
  2796     self assert:(r == false).
       
  2797 
       
  2798     t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] copy sign:1.
       
  2799     r := t1 absDestructiveSubtract:16r00ffffffffffffffffffffffffffff.
       
  2800     self assert:(t1 digitBytes = #[16r01 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 ]).
       
  2801     self assert:(r == true).
       
  2802 
       
  2803     t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] copy sign:1.
       
  2804     r := t1 absDestructiveSubtract:16r010000000000000000000000000000.
       
  2805     self assert:(t1 digitBytes = #[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 ]).
       
  2806     self assert:(r == false).
       
  2807 
       
  2808     t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] copy sign:1.
       
  2809     r := t1 absDestructiveSubtract:16r00ffffffffffffffffffffffffffffff.
       
  2810     self assert:(t1 digitBytes = #[16r01 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 ]).
       
  2811     self assert:(r == true).
       
  2812 
       
  2813     t1 := LargeInteger digitBytes:#[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r01 ] copy sign:1.
       
  2814     r := t1 absDestructiveSubtract:16r01000000000000000000000000000000.
       
  2815     self assert:(t1 digitBytes = #[16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 16r00 ]).
       
  2816     self assert:(r == false).
       
  2817     "
       
  2818      self basicNew testLargeIntegerHelpers2
       
  2819     "
       
  2820 !
       
  2821 
       
  2822 testLargeIntegerHelpers3
       
  2823     "/ absDivMod:
       
  2824 
       
  2825      self assert:(9000000000000000000 absDivMod: 4000) = #(2250000000000000 0).
       
  2826      self assert:(-9000000000000000000 absDivMod: 4000) = #(2250000000000000 0).
       
  2827      self assert:(9000000000000000000 absDivMod: -4000) = #(2250000000000000 0).
       
  2828      self assert:(-9000000000000000000 absDivMod: -4000) = #(2250000000000000 0).
       
  2829 
       
  2830      self assert:(9000000000000000001 absDivMod: 4000) = #(2250000000000000 1).
       
  2831      self assert:(-9000000000000000001 absDivMod: 4000) = #(2250000000000000 1).
       
  2832      self assert:(9000000000000000001 absDivMod: -4000) = #(2250000000000000 1).
       
  2833      self assert:(-9000000000000000001 absDivMod: -4000) = #(2250000000000000 1).
       
  2834 
       
  2835      self assert:(9000000000000000000 absDivMod: 40000) = #(225000000000000 0).
       
  2836      self assert:(-9000000000000000000 absDivMod: 40000) = #(225000000000000 0).
       
  2837      self assert:(9000000000000000000 absDivMod: -40000) = #(225000000000000 0).
       
  2838      self assert:(-9000000000000000000 absDivMod: -40000) = #(225000000000000 0).
       
  2839 
       
  2840      self assert:(9000000000000000000 absDivMod: 400000) = #(22500000000000 0).
       
  2841      self assert:(-9000000000000000000 absDivMod: 400000) = #(22500000000000 0).
       
  2842      self assert:(9000000000000000000 absDivMod: -400000) = #(22500000000000 0).
       
  2843      self assert:(-9000000000000000000 absDivMod: -400000) = #(22500000000000 0).
       
  2844 
       
  2845      self assert:(9000000000000000000 absDivMod: 4000000) = #(2250000000000 0).
       
  2846      self assert:(-9000000000000000000 absDivMod: 4000000) = #(2250000000000 0).
       
  2847      self assert:(9000000000000000000 absDivMod: -4000000) = #(2250000000000 0).
       
  2848      self assert:(-9000000000000000000 absDivMod: -4000000) = #(2250000000000 0).
       
  2849 
       
  2850      self assert:(9000000000000000000 absDivMod: 40000000) = #(225000000000 0).
       
  2851      self assert:(-9000000000000000000 absDivMod: 40000000) = #(225000000000 0).
       
  2852      self assert:(9000000000000000000 absDivMod: -40000000) = #(225000000000 0).
       
  2853      self assert:(-9000000000000000000 absDivMod: -40000000) = #(225000000000 0).
       
  2854 
       
  2855      self assert:(9000000000000000000 absDivMod: 400000000) = #(22500000000 0).
       
  2856      self assert:(-9000000000000000000 absDivMod: 400000000) = #(22500000000 0).
       
  2857      self assert:(9000000000000000000 absDivMod: -400000000) = #(22500000000 0).
       
  2858      self assert:(-9000000000000000000 absDivMod: -400000000) = #(22500000000 0).
       
  2859 
       
  2860      self assert:(9000000000000000000 absDivMod: 4000000000) = #(2250000000 0).
       
  2861      self assert:(-9000000000000000000 absDivMod: 4000000000) = #(2250000000 0).
       
  2862      self assert:(9000000000000000000 absDivMod: -4000000000) = #(2250000000 0).
       
  2863      self assert:(-9000000000000000000 absDivMod: -4000000000) = #(2250000000 0).
       
  2864 
       
  2865      self assert:(9000000000000000000 absDivMod: 40000000000) = #(225000000 0).
       
  2866      self assert:(-9000000000000000000 absDivMod: 40000000000) = #(225000000 0).
       
  2867      self assert:(9000000000000000000 absDivMod: -40000000000) = #(225000000 0).
       
  2868      self assert:(-9000000000000000000 absDivMod: -40000000000) = #(225000000 0).
       
  2869 
       
  2870      self assert:(9000000000000000000 absDivMod: 400000000000) = #(22500000 0).
       
  2871      self assert:(-9000000000000000000 absDivMod: 400000000000) = #(22500000 0).
       
  2872      self assert:(9000000000000000000 absDivMod: -400000000000) = #(22500000 0).
       
  2873      self assert:(-9000000000000000000 absDivMod: -400000000000) = #(22500000 0).
       
  2874 
       
  2875      self assert:(9000000000000000000 absDivMod: 4000000000000) = #(2250000 0).
       
  2876      self assert:(-9000000000000000000 absDivMod: 4000000000000) = #(2250000 0).
       
  2877      self assert:(9000000000000000000 absDivMod: -4000000000000) = #(2250000 0).
       
  2878      self assert:(-9000000000000000000 absDivMod: -4000000000000) = #(2250000 0).
       
  2879 
       
  2880      self assert:(9000000000000000000 absDivMod: 40000000000000) = #(225000 0).
       
  2881      self assert:(-9000000000000000000 absDivMod: 40000000000000) = #(225000 0).
       
  2882      self assert:(9000000000000000000 absDivMod: -40000000000000) = #(225000 0).
       
  2883      self assert:(-9000000000000000000 absDivMod: -40000000000000) = #(225000 0).
       
  2884 
       
  2885      self assert:(9000000000000000000 absDivMod: 400000000000000) = #(22500 0).
       
  2886      self assert:(-9000000000000000000 absDivMod: 400000000000000) = #(22500 0).
       
  2887      self assert:(9000000000000000000 absDivMod: -400000000000000) = #(22500 0).
       
  2888      self assert:(-9000000000000000000 absDivMod: -400000000000000) = #(22500 0).
       
  2889 
       
  2890      self assert:(9000000000000000000 absDivMod: 4000000000000000) = #(2250 0).
       
  2891      self assert:(-9000000000000000000 absDivMod: 4000000000000000) = #(2250 0).
       
  2892      self assert:(9000000000000000000 absDivMod: -4000000000000000) = #(2250 0).
       
  2893      self assert:(-9000000000000000000 absDivMod: -4000000000000000) = #(2250 0).
       
  2894 
       
  2895      self assert:(9000000000000000000 absDivMod: 4000000000000000000) = #(2 1000000000000000000).
       
  2896      self assert:(-9000000000000000000 absDivMod: 4000000000000000000) = #(2 1000000000000000000).
       
  2897      self assert:(9000000000000000000 absDivMod: -4000000000000000000) = #(2 1000000000000000000).
       
  2898      self assert:(-9000000000000000000 absDivMod: -4000000000000000000) = #(2 1000000000000000000).
       
  2899 
       
  2900     "
       
  2901      self basicNew testLargeIntegerHelpers3
       
  2902     "
  2583 !
  2903 !
  2584 
  2904 
  2585 testLargeMultiplication
  2905 testLargeMultiplication
  2586     |t1 t2|
  2906     |t1 t2|
  2587 
  2907