#DOCUMENTATION by cg
authorClaus Gittinger <cg@exept.de>
Thu, 01 Sep 2016 20:28:55 +0200
changeset 1523 f8d51432b498
parent 1522 95ea02a9fcae
child 1524 851033493e35
#DOCUMENTATION by cg class: RegressionTests::IntegerTest added: #testSmallIntegerNegation
RegressionTests__IntegerTest.st
--- a/RegressionTests__IntegerTest.st	Thu Sep 01 20:25:42 2016 +0200
+++ b/RegressionTests__IntegerTest.st	Thu Sep 01 20:28:55 2016 +0200
@@ -4628,6 +4628,74 @@
 
     "Modified: / 9.6.1999 / 17:47:56 / cg"
     "Created: / 9.6.1999 / 17:49:45 / cg"
+!
+
+testSmallIntegerNegation
+    "tests boundary conditions at small/large phase change."
+
+    |n1 n2 n3|
+
+    n1 := 16r3fffffff.
+    n2 := n1 negated.
+    n3 := n2 negated.
+
+    self assert:(n1 class == SmallInteger).
+    self assert:(n2 class == SmallInteger).
+    self assert:(n3 == n1).
+
+    self assert:(n1 = 16r3FFFFFFF).
+    self assert:(n2 = -16r3FFFFFFF).
+    self assert:(n1 == 16r3FFFFFFF).
+    self assert:(n2 == -16r3FFFFFFF).
+    self assert:(n1 printString = '1073741823').
+    self assert:(n2 printString = '-1073741823').
+
+    "/ ---------------------
+
+    n1 := 16rffffffff.
+    n2 := n1 negated.
+    n3 := n2 negated.
+
+    self assert:(n1 class == SmallInteger).
+    self assert:(n2 class == SmallInteger).
+    self assert:(n3 == n1).
+
+    self assert:(n1 = 16rfFFFFFFF).
+    self assert:(n2 = -16rfFFFFFFF).
+    self assert:(n1 == 16rfFFFFFFF).
+    self assert:(n2 == -16rfFFFFFFF).
+    self assert:(n1 printString = '4294967295').
+    self assert:(n2 printString = '-4294967295').
+
+    "/ ---------------------
+
+    n1 := SmallInteger maxVal.
+    n2 := n1 negated.
+    n3 := n2 negated.
+
+    self assert:(n1 class == SmallInteger).
+    self assert:(n2 class == SmallInteger).
+    self assert:(n3 == n1).
+
+    SmallInteger maxBytes == 4 ifTrue:[
+        self assert:(n1 = 16r3FFFFFFF).
+        self assert:(n2 = -16r3FFFFFFF).
+        self assert:(n1 == 16r3FFFFFFF).
+        self assert:(n2 == -16r3FFFFFFF).
+        self assert:(n1 printString = '1073741823').
+        self assert:(n2 printString = '-1073741823').
+    ] ifFalse:[
+        self assert:(n1 = 16r3FFFFFFFFFFFFFFF).
+        self assert:(n2 = -16r3FFFFFFFFFFFFFFFF).
+        self assert:(n1 == 16r3FFFFFFFFFFFFFFFF).
+        self assert:(n2 == -16r3FFFFFFFFFFFFFFFF).
+        self assert:(n1 printString = '4611686018427387903').
+        self assert:(n2 printString = '-4611686018427387903').
+    ].
+
+    "
+     self basicNew testSmallIntegerNegation
+    "
 ! !
 
 !IntegerTest methodsFor:'tests-class protocol'!