5323 ]. |
5323 ]. |
5324 |
5324 |
5325 "Created: / 24-03-2019 / 11:36:18 / Claus Gittinger" |
5325 "Created: / 24-03-2019 / 11:36:18 / Claus Gittinger" |
5326 "Modified: / 27-03-2019 / 15:16:43 / stefan" |
5326 "Modified: / 27-03-2019 / 15:16:43 / stefan" |
5327 "Modified: / 28-03-2019 / 16:59:52 / Claus Gittinger" |
5327 "Modified: / 28-03-2019 / 16:59:52 / Claus Gittinger" |
|
5328 ! |
|
5329 |
|
5330 testBitShift |
|
5331 self assert:(1 bitShift:1) = 2. |
|
5332 self assert:(-1 bitShift:1) = -2. |
|
5333 |
|
5334 self assert:(1 bitShift:7) = 128. |
|
5335 self assert:(-1 bitShift:7) = -128. |
|
5336 |
|
5337 self assert:(1 bitShift:8) = 16r100. |
|
5338 self assert:(-1 bitShift:8) = 16r-100. |
|
5339 |
|
5340 self assert:(1 bitShift:16) = 16r10000. |
|
5341 self assert:(-1 bitShift:16) = 16r-10000. |
|
5342 |
|
5343 self assert:(1 bitShift:24) = 16r1000000. |
|
5344 self assert:(-1 bitShift:24) = 16r-1000000. |
|
5345 |
|
5346 "/ the following are out of the smallInteger range on 32bit systems |
|
5347 self assert:(1 bitShift:30) = 16r40000000. |
|
5348 self assert:(-1 bitShift:30) = 16r-40000000. |
|
5349 |
|
5350 self assert:(1 bitShift:31) = 16r80000000. |
|
5351 self assert:(-1 bitShift:31) = 16r-80000000. |
|
5352 |
|
5353 self assert:(1 bitShift:32) = 16r100000000. |
|
5354 self assert:(-1 bitShift:32) = 16r-100000000. |
|
5355 |
|
5356 self assert:(1 bitShift:40) = 16r10000000000. |
|
5357 self assert:(-1 bitShift:40) = 16r-10000000000. |
|
5358 |
|
5359 self assert:(1 bitShift:56) = 16r100000000000000. |
|
5360 self assert:(-1 bitShift:56) = 16r-100000000000000. |
|
5361 |
|
5362 "/ the following are out of the smallInteger range on 32bit systems |
|
5363 self assert:(1 bitShift:62) = 16r4000000000000000. |
|
5364 self assert:(-1 bitShift:62) = 16r-4000000000000000. |
|
5365 |
|
5366 self assert:(1 bitShift:63) = 16r8000000000000000. |
|
5367 self assert:(-1 bitShift:63) = 16r-8000000000000000. |
|
5368 |
|
5369 self assert:(1 bitShift:64) = 16r10000000000000000. |
|
5370 self assert:(-1 bitShift:64) = 16r-10000000000000000. |
|
5371 |
|
5372 "Created: / 04-06-2019 / 00:58:47 / Claus Gittinger" |
|
5373 ! |
|
5374 |
|
5375 testRightShift |
|
5376 "right shifts must preserve the sign - even for large integers" |
|
5377 |
|
5378 #(1 7 8 16 24 |
|
5379 30 31 32 33 |
|
5380 40 48 56 |
|
5381 62 63 64 |
|
5382 65 |
|
5383 126 127 128 |
|
5384 1000 2000 |
|
5385 ) do:[:cnt | |
|
5386 self assert:((1 bitShift:cnt) bitShift:cnt negated) = 1. |
|
5387 self assert:((-1 bitShift:cnt) bitShift:cnt negated) = -1. |
|
5388 ]. |
|
5389 |
|
5390 "Created: / 04-06-2019 / 01:05:30 / Claus Gittinger" |
|
5391 ! |
|
5392 |
|
5393 testZigZagCoding |
|
5394 "zigzag is used by google's protocol buffer encoding" |
|
5395 |
|
5396 #(1 7 8 |
|
5397 16r1fffFFFF 16r-1fffFFFF |
|
5398 16r20000000 16r-20000000 |
|
5399 16r3fffFFFF 16r-3fffFFFF |
|
5400 16r40000000 16r-40000000 |
|
5401 16r7fffFFFF 16r-7fffFFFF |
|
5402 16r-80000000 |
|
5403 ) do:[:val | |
|
5404 self assert:(val zigZagEncoded32BitValue zigZagDecodedValue) = val. |
|
5405 self assert:(val zigZagEncoded64BitValue zigZagDecodedValue) = val. |
|
5406 ]. |
|
5407 |
|
5408 #( |
|
5409 16r1fffFFFFffffFFFF 16r-1fffFFFFffffFFFF |
|
5410 16r2000000000000000 16r-2000000000000000 |
|
5411 16r3fffFFFFffffFFFF 16r-3fffFFFFffffFFFF |
|
5412 16r4000000000000000 16r-4000000000000000 |
|
5413 16r7fffFFFFffffFFFF 16r-7fffFFFFffffFFFF |
|
5414 16r-8000000000000000 |
|
5415 ) do:[:val | |
|
5416 self assert:(val zigZagEncoded64BitValue zigZagDecodedValue) = val. |
|
5417 ]. |
|
5418 |
|
5419 "Created: / 04-06-2019 / 01:10:43 / Claus Gittinger" |
5328 ! ! |
5420 ! ! |
5329 |
5421 |
5330 !IntegerTest methodsFor:'tests-class protocol'! |
5422 !IntegerTest methodsFor:'tests-class protocol'! |
5331 |
5423 |
5332 testCreationFromBytes1 |
5424 testCreationFromBytes1 |