RegressionTests__SmallIntegerTest.st
changeset 2109 851570e26c15
parent 1882 b4bb993596b6
child 2111 76819317c155
equal deleted inserted replaced
2108:a13e1ed049af 2109:851570e26c15
       
     1 "{ Encoding: utf8 }"
       
     2 
     1 "{ Package: 'stx:goodies/regression' }"
     3 "{ Package: 'stx:goodies/regression' }"
     2 
     4 
     3 "{ NameSpace: RegressionTests }"
     5 "{ NameSpace: RegressionTests }"
     4 
     6 
     5 TestCase subclass:#SmallIntegerTest
     7 TestCase subclass:#SmallIntegerTest
    15 version_CVS
    17 version_CVS
    16     ^ '$Header$'
    18     ^ '$Header$'
    17 ! !
    19 ! !
    18 
    20 
    19 !SmallIntegerTest methodsFor:'tests-arithmetic'!
    21 !SmallIntegerTest methodsFor:'tests-arithmetic'!
    20 
       
    21 testBitShift
       
    22     #(
       
    23 	(1 1 2)
       
    24 	(1 2 4)
       
    25 	(1 3 8)
       
    26 	(1 7 16r080)
       
    27 	(1 8 16r100)
       
    28 	(1 15 16r08000)
       
    29 	(1 16 16r10000)
       
    30 	(1 17 16r20000)
       
    31 	(1 30 16r040000000)
       
    32 	(1 31 16r080000000)
       
    33 	(1 32 16r100000000)
       
    34 	(1 33 16r200000000)
       
    35 
       
    36 	(1 62 16r04000000000000000)
       
    37 	(1 63 16r08000000000000000)
       
    38 	(1 64 16r10000000000000000)
       
    39 	(1 65 16r20000000000000000)
       
    40 
       
    41 	(1 126 16r040000000000000000000000000000000)
       
    42 	(1 127 16r080000000000000000000000000000000)
       
    43 	(1 128 16r100000000000000000000000000000000)
       
    44 	(1 129 16r200000000000000000000000000000000)
       
    45 
       
    46 	(16r10 1 16r20)
       
    47 	(16r10 2 16r40)
       
    48 	(16r10 3 16r80)
       
    49 	(16r10 7 16r0800)
       
    50 	(16r10 8 16r1000)
       
    51 	(16r10 15 16r080000)
       
    52 	(16r10 16 16r100000)
       
    53 	(16r10 17 16r200000)
       
    54 	(16r10 30 16r0400000000)
       
    55 	(16r10 31 16r0800000000)
       
    56 	(16r10 32 16r1000000000)
       
    57 	(16r10 33 16r2000000000)
       
    58 
       
    59 	(16r10 62 16r040000000000000000)
       
    60 	(16r10 63 16r080000000000000000)
       
    61 	(16r10 64 16r100000000000000000)
       
    62 	(16r10 65 16r200000000000000000)
       
    63 
       
    64 	(16r10 126 16r0400000000000000000000000000000000)
       
    65 	(16r10 127 16r0800000000000000000000000000000000)
       
    66 	(16r10 128 16r1000000000000000000000000000000000)
       
    67 	(16r10 129 16r2000000000000000000000000000000000)
       
    68     ) triplesDo:[:val :cnt :expected |
       
    69 	|rslt1 rslt2|
       
    70 
       
    71 	rslt1 := val bitShift:cnt.
       
    72 	self assert:(rslt1 = expected).
       
    73 	expected class == SmallInteger ifTrue:[
       
    74 	    self assert:(rslt1 == expected)
       
    75 	].
       
    76 	rslt2 := rslt1 bitShift:cnt negated.
       
    77 	self assert:(rslt2 = val).
       
    78 	val class == SmallInteger ifTrue:[
       
    79 	    self assert:(rslt2 == val)
       
    80 	].
       
    81     ].
       
    82 !
       
    83 
       
    84 testBitShiftNegative
       
    85     #(
       
    86         (-1 1 -2)
       
    87         (-1 2 -4)
       
    88         (-1 3 -8)
       
    89         (-1 7 16r-080)
       
    90         (-1 8 16r-100)
       
    91         (-1 15 16r-08000)
       
    92         (-1 16 16r-10000)
       
    93         (-1 17 16r-20000)
       
    94         (-1 30 16r-040000000)
       
    95         (-1 31 16r-080000000)
       
    96         (-1 32 16r-100000000)
       
    97         (-1 33 16r-200000000)
       
    98 
       
    99         (-1 62 16r-04000000000000000)
       
   100         (-1 63 16r-08000000000000000)
       
   101         (-1 64 16r-10000000000000000)
       
   102         (-1 65 16r-20000000000000000)
       
   103 
       
   104         (-1 126 16r-040000000000000000000000000000000)
       
   105         (-1 127 16r-080000000000000000000000000000000)
       
   106         (-1 128 16r-100000000000000000000000000000000)
       
   107         (-1 129 16r-200000000000000000000000000000000)
       
   108 
       
   109         (16r-10 1 16r-20)
       
   110         (16r-10 2 16r-40)
       
   111         (16r-10 3 16r-80)
       
   112         (16r-10 7 16r-0800)
       
   113         (16r-10 8 16r-1000)
       
   114         (16r-10 15 16r-080000)
       
   115         (16r-10 16 16r-100000)
       
   116         (16r-10 17 16r-200000)
       
   117         (16r-10 30 16r-0400000000)
       
   118         (16r-10 31 16r-0800000000)
       
   119         (16r-10 32 16r-1000000000)
       
   120         (16r-10 33 16r-2000000000)
       
   121 
       
   122         (16r-10 62 16r-040000000000000000)
       
   123         (16r-10 63 16r-080000000000000000)
       
   124         (16r-10 64 16r-100000000000000000)
       
   125         (16r-10 65 16r-200000000000000000)
       
   126 
       
   127         (16r-10 126 16r-0400000000000000000000000000000000)
       
   128         (16r-10 127 16r-0800000000000000000000000000000000)
       
   129         (16r-10 128 16r-1000000000000000000000000000000000)
       
   130         (16r-10 129 16r-2000000000000000000000000000000000)
       
   131     ) triplesDo:[:val :cnt :expected |
       
   132         |rslt1 rslt2|
       
   133 
       
   134         rslt1 := val bitShift:cnt.
       
   135         self assert:(rslt1 = expected).
       
   136         expected class == SmallInteger ifTrue:[
       
   137             self assert:(rslt1 == expected)
       
   138         ].
       
   139         rslt2 := rslt1 bitShift:cnt negated.
       
   140         self assert:(rslt2 = val).
       
   141         val class == SmallInteger ifTrue:[
       
   142             self assert:(rslt2 == val)
       
   143         ].
       
   144     ].
       
   145 
       
   146     "Modified (format): / 19-09-2017 / 16:29:36 / stefan"
       
   147 !
       
   148 
    22 
   149 testDivide
    23 testDivide
   150         |zero us1 us2 us3 us4 usm2 usm4|
    24         |zero us1 us2 us3 us4 usm2 usm4|
   151 
    25 
   152         "circumvent compiler error about division by zero"
    26         "circumvent compiler error about division by zero"
   273     self assert:(SmallInteger minVal negated negated class == SmallInteger).
   147     self assert:(SmallInteger minVal negated negated class == SmallInteger).
   274 
   148 
   275     "Modified: / 28-02-2017 / 16:42:04 / cg"
   149     "Modified: / 28-02-2017 / 16:42:04 / cg"
   276 ! !
   150 ! !
   277 
   151 
       
   152 !SmallIntegerTest methodsFor:'tests-bit fiddling'!
       
   153 
       
   154 testBitCount
       
   155      1 to:1000000 do:[:n |
       
   156         self assert:(n bitCount = ((n printStringRadix:2) occurrencesOf:$1))
       
   157      ].
       
   158 
       
   159      #( 16r00000000
       
   160         16r00010000 16r00100000 16r01000000 16r10000000
       
   161         16r00020000 16r00200000 16r02000000 16r20000000
       
   162         16r00040000 16r00400000 16r04000000 16r40000000
       
   163         16r00080000 16r00800000 16r08000000 16r80000000
       
   164 
       
   165         16rFFFFFFFF 16r7FFFFFFF 16r3FFFFFFF 16r1FFFFFFF
       
   166         16rEEEEEEEE 16r7EEEEEEE 16r3EEEEEEE 16r1EEEEEEE
       
   167         16rDDDDDDDD 16r7DDDDDDD 16r3DDDDDDD 16r1DDDDDDD
       
   168         16rCCCCCCCC 16r7CCCCCCC 16r3CCCCCCC 16r1CCCCCCC
       
   169 
       
   170         16r8000000000010000 16r8000000000100000 16r8000000001000000 16r8000000010000000
       
   171         16r8000000000020000 16r8000000000200000 16r8000000002000000 16r8000000020000000
       
   172         16r8000000000040000 16r8000000000400000 16r8000000004000000 16r8000000040000000
       
   173         16r8000000000080000 16r8000000000800000 16r8000000008000000 16r8000000080000000
       
   174 
       
   175         16r80000000FFFFFFFF 16r800000007FFFFFFF 16r800000003FFFFFFF 16r800000001FFFFFFF
       
   176         16r80000000EEEEEEEE 16r800000007EEEEEEE 16r800000003EEEEEEE 16r800000001EEEEEEE
       
   177         16r80000000DDDDDDDD 16r800000007DDDDDDD 16r800000003DDDDDDD 16r800000001DDDDDDD
       
   178         16r80000000CCCCCCCC 16r800000007CCCCCCC 16r800000003CCCCCCC 16r800000001CCCCCCC
       
   179 
       
   180         16rFFFFFFFFFFFFFFFF 16r7FFFFFFFFFFFFFFF 16r3FFFFFFFFFFFFFFF 16r1FFFFFFFFFFFFFFF
       
   181      ) do:[:n |
       
   182         self assert:(n bitCount = ((n printStringRadix:2) occurrencesOf:$1))
       
   183      ].
       
   184 
       
   185     "Created: / 20-03-2019 / 12:43:06 / Claus Gittinger"
       
   186 !
       
   187 
       
   188 testBitShift
       
   189     #(
       
   190 	(1 1 2)
       
   191 	(1 2 4)
       
   192 	(1 3 8)
       
   193 	(1 7 16r080)
       
   194 	(1 8 16r100)
       
   195 	(1 15 16r08000)
       
   196 	(1 16 16r10000)
       
   197 	(1 17 16r20000)
       
   198 	(1 30 16r040000000)
       
   199 	(1 31 16r080000000)
       
   200 	(1 32 16r100000000)
       
   201 	(1 33 16r200000000)
       
   202 
       
   203 	(1 62 16r04000000000000000)
       
   204 	(1 63 16r08000000000000000)
       
   205 	(1 64 16r10000000000000000)
       
   206 	(1 65 16r20000000000000000)
       
   207 
       
   208 	(1 126 16r040000000000000000000000000000000)
       
   209 	(1 127 16r080000000000000000000000000000000)
       
   210 	(1 128 16r100000000000000000000000000000000)
       
   211 	(1 129 16r200000000000000000000000000000000)
       
   212 
       
   213 	(16r10 1 16r20)
       
   214 	(16r10 2 16r40)
       
   215 	(16r10 3 16r80)
       
   216 	(16r10 7 16r0800)
       
   217 	(16r10 8 16r1000)
       
   218 	(16r10 15 16r080000)
       
   219 	(16r10 16 16r100000)
       
   220 	(16r10 17 16r200000)
       
   221 	(16r10 30 16r0400000000)
       
   222 	(16r10 31 16r0800000000)
       
   223 	(16r10 32 16r1000000000)
       
   224 	(16r10 33 16r2000000000)
       
   225 
       
   226 	(16r10 62 16r040000000000000000)
       
   227 	(16r10 63 16r080000000000000000)
       
   228 	(16r10 64 16r100000000000000000)
       
   229 	(16r10 65 16r200000000000000000)
       
   230 
       
   231 	(16r10 126 16r0400000000000000000000000000000000)
       
   232 	(16r10 127 16r0800000000000000000000000000000000)
       
   233 	(16r10 128 16r1000000000000000000000000000000000)
       
   234 	(16r10 129 16r2000000000000000000000000000000000)
       
   235     ) triplesDo:[:val :cnt :expected |
       
   236 	|rslt1 rslt2|
       
   237 
       
   238 	rslt1 := val bitShift:cnt.
       
   239 	self assert:(rslt1 = expected).
       
   240 	expected class == SmallInteger ifTrue:[
       
   241 	    self assert:(rslt1 == expected)
       
   242 	].
       
   243 	rslt2 := rslt1 bitShift:cnt negated.
       
   244 	self assert:(rslt2 = val).
       
   245 	val class == SmallInteger ifTrue:[
       
   246 	    self assert:(rslt2 == val)
       
   247 	].
       
   248     ].
       
   249 !
       
   250 
       
   251 testBitShiftNegative
       
   252     #(
       
   253         (-1 1 -2)
       
   254         (-1 2 -4)
       
   255         (-1 3 -8)
       
   256         (-1 7 16r-080)
       
   257         (-1 8 16r-100)
       
   258         (-1 15 16r-08000)
       
   259         (-1 16 16r-10000)
       
   260         (-1 17 16r-20000)
       
   261         (-1 30 16r-040000000)
       
   262         (-1 31 16r-080000000)
       
   263         (-1 32 16r-100000000)
       
   264         (-1 33 16r-200000000)
       
   265 
       
   266         (-1 62 16r-04000000000000000)
       
   267         (-1 63 16r-08000000000000000)
       
   268         (-1 64 16r-10000000000000000)
       
   269         (-1 65 16r-20000000000000000)
       
   270 
       
   271         (-1 126 16r-040000000000000000000000000000000)
       
   272         (-1 127 16r-080000000000000000000000000000000)
       
   273         (-1 128 16r-100000000000000000000000000000000)
       
   274         (-1 129 16r-200000000000000000000000000000000)
       
   275 
       
   276         (16r-10 1 16r-20)
       
   277         (16r-10 2 16r-40)
       
   278         (16r-10 3 16r-80)
       
   279         (16r-10 7 16r-0800)
       
   280         (16r-10 8 16r-1000)
       
   281         (16r-10 15 16r-080000)
       
   282         (16r-10 16 16r-100000)
       
   283         (16r-10 17 16r-200000)
       
   284         (16r-10 30 16r-0400000000)
       
   285         (16r-10 31 16r-0800000000)
       
   286         (16r-10 32 16r-1000000000)
       
   287         (16r-10 33 16r-2000000000)
       
   288 
       
   289         (16r-10 62 16r-040000000000000000)
       
   290         (16r-10 63 16r-080000000000000000)
       
   291         (16r-10 64 16r-100000000000000000)
       
   292         (16r-10 65 16r-200000000000000000)
       
   293 
       
   294         (16r-10 126 16r-0400000000000000000000000000000000)
       
   295         (16r-10 127 16r-0800000000000000000000000000000000)
       
   296         (16r-10 128 16r-1000000000000000000000000000000000)
       
   297         (16r-10 129 16r-2000000000000000000000000000000000)
       
   298     ) triplesDo:[:val :cnt :expected |
       
   299         |rslt1 rslt2|
       
   300 
       
   301         rslt1 := val bitShift:cnt.
       
   302         self assert:(rslt1 = expected).
       
   303         expected class == SmallInteger ifTrue:[
       
   304             self assert:(rslt1 == expected)
       
   305         ].
       
   306         rslt2 := rslt1 bitShift:cnt negated.
       
   307         self assert:(rslt2 = val).
       
   308         val class == SmallInteger ifTrue:[
       
   309             self assert:(rslt2 == val)
       
   310         ].
       
   311     ].
       
   312 
       
   313     "Modified (format): / 19-09-2017 / 16:29:36 / stefan"
       
   314 ! !
       
   315 
   278 !SmallIntegerTest methodsFor:'tests-class protocol'!
   316 !SmallIntegerTest methodsFor:'tests-class protocol'!
   279 
   317 
   280 testBasicNew
   318 testBasicNew
   281     self should: [SmallInteger basicNew] raise: TestResult error.
   319     self should: [SmallInteger basicNew] raise: TestResult error.
   282 !
   320 !