class: RegressionTests::IntegerTest
authorClaus Gittinger <cg@exept.de>
Mon, 13 May 2013 16:43:21 +0200
changeset 934 bf29a53f0eba
parent 933 241ecf77b594
child 935 9fb8ac67472d
class: RegressionTests::IntegerTest fixes for 64bit
RegressionTests__IntegerTest.st
--- a/RegressionTests__IntegerTest.st	Mon May 13 16:09:56 2013 +0200
+++ b/RegressionTests__IntegerTest.st	Mon May 13 16:43:21 2013 +0200
@@ -228,8 +228,13 @@
     self assert: ( (self doPlus1_a:0) = 1 ).
     self assert: ( (self doPlus1_a:1) = 2 ).
     self assert: ( (self doPlus1_a:-1) = 0 ).
-    self assert: ( (self doPlus1_a:SmallInteger maxVal) = 1073741824).
-    self assert: ( (self doPlus1_a:SmallInteger minVal) = -1073741823 ).
+    ExternalAddress pointerSize == 8 ifTrue:[
+        self assert: ( (self doPlus1_a:SmallInteger maxVal) = 4611686018427387904).
+        self assert: ( (self doPlus1_a:SmallInteger minVal) = -4611686018427387903 ).
+    ] ifFalse:[
+        self assert: ( (self doPlus1_a:SmallInteger maxVal) = 1073741824).
+        self assert: ( (self doPlus1_a:SmallInteger minVal) = -1073741823 ).
+    ].
 
     "
      self basicNew testPlus1
@@ -240,8 +245,13 @@
     self assert: ( (self doPlus1_b:0) = 1 ).
     self assert: ( (self doPlus1_b:1) = 2 ).
     self assert: ( (self doPlus1_b:-1) = 0 ).
-    self assert: ( (self doPlus1_b:SmallInteger maxVal) = 1073741824).
-    self assert: ( (self doPlus1_b:SmallInteger minVal) = -1073741823 ).
+    ExternalAddress pointerSize == 8 ifTrue:[
+        self assert: ( (self doPlus1_b:SmallInteger maxVal) = 4611686018427387904).
+        self assert: ( (self doPlus1_b:SmallInteger minVal) = -4611686018427387903 ).
+    ] ifFalse:[
+        self assert: ( (self doPlus1_b:SmallInteger maxVal) = 1073741824).
+        self assert: ( (self doPlus1_b:SmallInteger minVal) = -1073741823 ).
+    ].
 
     "
      self basicNew testPlus1perform
@@ -3002,27 +3012,42 @@
   "self run: #testCreationFromBytes1"
 
   " it is illegal for a LargeInteger to be less than SmallInteger maxVal." 
-  " here we test that Integer>>byte!!byte2:byte3:byte4: resconstructs SmallInteger maxVal as an instance of SmallInteger. "
-
-   | maxSmallInt hexString byte1 byte2 byte3 byte4 builtInteger |
+  " here we test that Integer>>byte!!byte2:byte3:byte4: reconstructs SmallInteger maxVal as an instance of SmallInteger. "
+
+   | maxSmallInt hexString 
+     byte1 byte2 byte3 byte4   
+     byte5 byte6 byte7 byte8   
+     builtInteger builtIntegerH builtIntegerL|
 
     maxSmallInt := SmallInteger maxVal.
     hexString := maxSmallInt printStringHex.
-    self assert: hexString size = 8.
-    Smalltalk isSmalltalkX ifTrue:[
-        "/ only Integers support radix-reading
+    ExternalAddress pointerSize == 8 ifTrue:[
+        self assert: hexString size = 16.
+
+        byte8 := Integer readFrom: (hexString copyFrom: 1 to: 2) base: 16.
+        byte7 := Integer readFrom: (hexString copyFrom: 3 to: 4) base: 16.
+        byte6 := Integer readFrom: (hexString copyFrom: 5 to: 6) base: 16.
+        byte5 := Integer readFrom: (hexString copyFrom: 7 to: 8) base: 16.
+        byte4 := Integer readFrom: (hexString copyFrom: 9 to: 10) base: 16.
+        byte3 := Integer readFrom: (hexString copyFrom: 11 to: 12) base: 16.
+        byte2 := Integer readFrom: (hexString copyFrom: 13 to: 14) base: 16.
+        byte1 := Integer readFrom: (hexString copyFrom: 15 to: 16) base: 16.
+
+        builtIntegerH := Integer byte1: byte5 byte2: byte6 byte3: byte7 byte4: byte8.
+        builtIntegerL := Integer byte1: byte1 byte2: byte2 byte3: byte3 byte4: byte4.
+        builtInteger := (builtIntegerH bitShift:32) bitOr:builtIntegerL.
+        self assert: builtInteger = maxSmallInt.
+    ] ifFalse:[
+        self assert: hexString size = 8.
+
         byte4 := Integer readFrom: (hexString copyFrom: 1 to: 2) base: 16.
         byte3 := Integer readFrom: (hexString copyFrom: 3 to: 4) base: 16.
         byte2 := Integer readFrom: (hexString copyFrom: 5 to: 6) base: 16.
         byte1 := Integer readFrom: (hexString copyFrom: 7 to: 8) base: 16.
-    ] ifFalse:[
-        byte4 := Number readFrom: (hexString copyFrom: 1 to: 2) base: 16.
-        byte3 := Number readFrom: (hexString copyFrom: 3 to: 4) base: 16.
-        byte2 := Number readFrom: (hexString copyFrom: 5 to: 6) base: 16.
-        byte1 := Number readFrom: (hexString copyFrom: 7 to: 8) base: 16.
+
+        builtInteger := Integer byte1: byte1 byte2: byte2 byte3: byte3 byte4: byte4.
+        self assert: builtInteger = maxSmallInt.
     ].
-    builtInteger := Integer byte1: byte1 byte2: byte2 byte3: byte3 byte4: byte4.
-    self assert: builtInteger = maxSmallInt.
     self assert: builtInteger class = SmallInteger
 ! !