summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSylvain Henry <sylvain@haskus.fr>2021-06-17 12:15:53 +0200
committerMarge Bot <ben+marge-bot@smart-cactus.org>2021-06-23 20:34:23 -0400
commite2d8023dfe1f2f981fc77fe3decd907352592f26 (patch)
treebf6727dc7ec5bec55123700ee88bdc06bf18512f
parent8191785ed7a28ed7a797990ce8851034162d68bd (diff)
downloadhaskell-e2d8023dfe1f2f981fc77fe3decd907352592f26.tar.gz
Add some tests for sized primops
-rw-r--r--testsuite/tests/primops/should_run/Sized.hs272
-rw-r--r--testsuite/tests/primops/should_run/Sized.stdout1311
-rw-r--r--testsuite/tests/primops/should_run/all.T1
3 files changed, 1584 insertions, 0 deletions
diff --git a/testsuite/tests/primops/should_run/Sized.hs b/testsuite/tests/primops/should_run/Sized.hs
new file mode 100644
index 0000000000..55358e92a9
--- /dev/null
+++ b/testsuite/tests/primops/should_run/Sized.hs
@@ -0,0 +1,272 @@
+{-# LANGUAGE MagicHash #-}
+{-# LANGUAGE BlockArguments #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | Test sized primops (Int8#, Word16#, etc.)
+module Main where
+
+import GHC.Exts
+import GHC.Word
+import GHC.Int
+import GHC.Num.Integer
+import Control.Monad
+
+data N a = N
+ { name :: String
+ , min_bound :: a
+ , max_bound :: a
+ , signed :: Bool
+ , nbits :: Word
+ , shift_right_logical :: a -> Word -> a
+ , shift_right_arith :: Maybe (a -> Word -> a)
+ , shift_left :: a -> Word -> a
+ , eq :: a -> a -> Bool
+ , gt :: a -> a -> Bool
+ , ge :: a -> a -> Bool
+ , lt :: a -> a -> Bool
+ , le :: a -> a -> Bool
+ , from_integer :: Integer -> a
+ , mbit_and :: Maybe (a -> a -> a)
+ , mbit_or :: Maybe (a -> a -> a)
+ , mbit_xor :: Maybe (a -> a -> a)
+ }
+
+w8 :: N Word8
+w8 = N
+ { name = "W8"
+ , min_bound = minBound
+ , max_bound = maxBound
+ , signed = False
+ , nbits = 8
+ , shift_right_logical = \(W8# a) (W# n) -> W8# (uncheckedShiftRLWord8# a (word2Int# n))
+ , shift_right_arith = Nothing
+ , shift_left = \(W8# a) (W# n) -> W8# (uncheckedShiftLWord8# a (word2Int# n))
+ , eq = \(W8# a) (W8# b) -> isTrue# (eqWord8# a b)
+ , gt = \(W8# a) (W8# b) -> isTrue# (gtWord8# a b)
+ , ge = \(W8# a) (W8# b) -> isTrue# (geWord8# a b)
+ , lt = \(W8# a) (W8# b) -> isTrue# (ltWord8# a b)
+ , le = \(W8# a) (W8# b) -> isTrue# (leWord8# a b)
+ , from_integer = fromIntegral
+ , mbit_and = Just \(W8# a) (W8# b) -> W8# (andWord8# a b)
+ , mbit_or = Just \(W8# a) (W8# b) -> W8# (orWord8# a b)
+ , mbit_xor = Just \(W8# a) (W8# b) -> W8# (xorWord8# a b)
+ }
+
+w16 :: N Word16
+w16 = N
+ { name = "W16"
+ , min_bound = minBound
+ , max_bound = maxBound
+ , signed = False
+ , nbits = 16
+ , shift_right_logical = \(W16# a) (W# n) -> W16# (uncheckedShiftRLWord16# a (word2Int# n))
+ , shift_right_arith = Nothing
+ , shift_left = \(W16# a) (W# n) -> W16# (uncheckedShiftLWord16# a (word2Int# n))
+ , eq = \(W16# a) (W16# b) -> isTrue# (eqWord16# a b)
+ , gt = \(W16# a) (W16# b) -> isTrue# (gtWord16# a b)
+ , ge = \(W16# a) (W16# b) -> isTrue# (geWord16# a b)
+ , lt = \(W16# a) (W16# b) -> isTrue# (ltWord16# a b)
+ , le = \(W16# a) (W16# b) -> isTrue# (leWord16# a b)
+ , from_integer = fromIntegral
+ , mbit_and = Just \(W16# a) (W16# b) -> W16# (andWord16# a b)
+ , mbit_or = Just \(W16# a) (W16# b) -> W16# (orWord16# a b)
+ , mbit_xor = Just \(W16# a) (W16# b) -> W16# (xorWord16# a b)
+ }
+
+w32 :: N Word32
+w32 = N
+ { name = "W32"
+ , min_bound = minBound
+ , max_bound = maxBound
+ , signed = False
+ , nbits = 32
+ , shift_right_logical = \(W32# a) (W# n) -> W32# (uncheckedShiftRLWord32# a (word2Int# n))
+ , shift_right_arith = Nothing
+ , shift_left = \(W32# a) (W# n) -> W32# (uncheckedShiftLWord32# a (word2Int# n))
+ , eq = \(W32# a) (W32# b) -> isTrue# (eqWord32# a b)
+ , gt = \(W32# a) (W32# b) -> isTrue# (gtWord32# a b)
+ , ge = \(W32# a) (W32# b) -> isTrue# (geWord32# a b)
+ , lt = \(W32# a) (W32# b) -> isTrue# (ltWord32# a b)
+ , le = \(W32# a) (W32# b) -> isTrue# (leWord32# a b)
+ , from_integer = fromIntegral
+ , mbit_and = Just \(W32# a) (W32# b) -> W32# (andWord32# a b)
+ , mbit_or = Just \(W32# a) (W32# b) -> W32# (orWord32# a b)
+ , mbit_xor = Just \(W32# a) (W32# b) -> W32# (xorWord32# a b)
+ }
+
+
+i8 :: N Int8
+i8 = N
+ { name = "I8"
+ , min_bound = minBound
+ , max_bound = maxBound
+ , signed = True
+ , nbits = 8
+ , shift_right_logical = \(I8# a) (W# n) -> I8# (uncheckedShiftRLInt8# a (word2Int# n))
+ , shift_right_arith = Just \(I8# a) (W# n) -> I8# (uncheckedShiftRAInt8# a (word2Int# n))
+ , shift_left = \(I8# a) (W# n) -> I8# (uncheckedShiftLInt8# a (word2Int# n))
+ , eq = \(I8# a) (I8# b) -> isTrue# (eqInt8# a b)
+ , gt = \(I8# a) (I8# b) -> isTrue# (gtInt8# a b)
+ , ge = \(I8# a) (I8# b) -> isTrue# (geInt8# a b)
+ , lt = \(I8# a) (I8# b) -> isTrue# (ltInt8# a b)
+ , le = \(I8# a) (I8# b) -> isTrue# (leInt8# a b)
+ , from_integer = fromIntegral
+ , mbit_and = Nothing
+ , mbit_or = Nothing
+ , mbit_xor = Nothing
+ }
+
+i16 :: N Int16
+i16 = N
+ { name = "I16"
+ , min_bound = minBound
+ , max_bound = maxBound
+ , signed = True
+ , nbits = 16
+ , shift_right_logical = \(I16# a) (W# n) -> I16# (uncheckedShiftRLInt16# a (word2Int# n))
+ , shift_right_arith = Just \(I16# a) (W# n) -> I16# (uncheckedShiftRAInt16# a (word2Int# n))
+ , shift_left = \(I16# a) (W# n) -> I16# (uncheckedShiftLInt16# a (word2Int# n))
+ , eq = \(I16# a) (I16# b) -> isTrue# (eqInt16# a b)
+ , gt = \(I16# a) (I16# b) -> isTrue# (gtInt16# a b)
+ , ge = \(I16# a) (I16# b) -> isTrue# (geInt16# a b)
+ , lt = \(I16# a) (I16# b) -> isTrue# (ltInt16# a b)
+ , le = \(I16# a) (I16# b) -> isTrue# (leInt16# a b)
+ , from_integer = fromIntegral
+ , mbit_and = Nothing
+ , mbit_or = Nothing
+ , mbit_xor = Nothing
+ }
+
+i32 :: N Int32
+i32 = N
+ { name = "I32"
+ , min_bound = minBound
+ , max_bound = maxBound
+ , signed = True
+ , nbits = 32
+ , shift_right_logical = \(I32# a) (W# n) -> I32# (uncheckedShiftRLInt32# a (word2Int# n))
+ , shift_right_arith = Just \(I32# a) (W# n) -> I32# (uncheckedShiftRAInt32# a (word2Int# n))
+ , shift_left = \(I32# a) (W# n) -> I32# (uncheckedShiftLInt32# a (word2Int# n))
+ , eq = \(I32# a) (I32# b) -> isTrue# (eqInt32# a b)
+ , gt = \(I32# a) (I32# b) -> isTrue# (gtInt32# a b)
+ , ge = \(I32# a) (I32# b) -> isTrue# (geInt32# a b)
+ , lt = \(I32# a) (I32# b) -> isTrue# (ltInt32# a b)
+ , le = \(I32# a) (I32# b) -> isTrue# (leInt32# a b)
+ , from_integer = fromIntegral
+ , mbit_and = Nothing
+ , mbit_or = Nothing
+ , mbit_xor = Nothing
+ }
+
+
+main :: IO ()
+main = do
+ test w8
+ test w16
+ test w32
+
+ test i8
+ test i16
+ test i32
+
+{-# NOINLINE test #-}
+test :: (Integral a, Show a) => N a -> IO ()
+test sys@(N {..}) = do
+
+ putStrLn $ "--------------------------"
+ putStrLn $ "Testing " ++ name
+ putStrLn $ "--------------------------"
+
+ let assert s False = putStrLn ("FAILED: " ++ s)
+ --assert s True = return ()
+ assert s True = putStrLn ("PASSED: " ++ s)
+
+ let zero = from_integer 0
+ let one = from_integer 1
+
+ -- right-shift zero must be zero
+ forM_ [0..nbits-1] \n ->
+ assert ("0 >> " ++ show n ++ " == 0")
+ (zero `eq` shift_right_logical zero n)
+
+ -- left-shift zero must be zero
+ forM_ [0..nbits-1] \n ->
+ assert ("0 << " ++ show n ++ " == 0")
+ (zero `eq` shift_left zero n)
+
+ -- left-shift 1
+ forM_ [0..nbits-1] \n -> do
+ let expected = from_integer (1 `integerShiftL` n)
+ assert ("1 << " ++ show n ++ " == " ++ show expected)
+ (expected `eq` shift_left one n)
+
+ -- logical right-shift minBound
+ forM_ [0..nbits-1] \n -> do
+ let expected
+ | n == 0 = min_bound
+ | otherwise = from_integer (integerAbs (fromIntegral min_bound) `integerShiftR` n)
+ assert (show min_bound ++ " >> " ++ show n ++ " == " ++ show expected ++ " (logical)")
+ (expected `eq` shift_right_logical min_bound n)
+
+ -- arithmetic right-shift minBound
+ forM_ shift_right_arith \shift_right_arithmetic -> do
+ forM_ [0..nbits-1] \n -> do
+ let minb = fromIntegral min_bound :: Integer
+ let expected = from_integer (minb `integerShiftR` n)
+ assert (show min_bound ++ " >> " ++ show n ++ " == " ++ show expected ++ " (arithmetic)")
+ (expected `eq` shift_right_arithmetic min_bound n)
+
+ -- and with 0 must be 0
+ forM_ mbit_and \bit_and -> do
+ forM_ [0..nbits-1] \n -> do
+ let v = one `shift_left` n
+ assert ("0 .&. " ++ show v ++ " == 0")
+ (zero `eq` bit_and v zero)
+
+ -- test with an overflowed value
+ let v = max_bound + max_bound + max_bound
+ assert ("0 .&. " ++ show v ++ " == 0")
+ (zero `eq` bit_and v zero)
+
+ -- or with 0 must be constant
+ forM_ mbit_or \bit_or -> do
+ forM_ [0..nbits-1] \n -> do
+ let v = one `shift_left` n
+ assert ("0 .|. " ++ show v ++ " == " ++ show v)
+ (v `eq` bit_or v zero)
+
+ -- test with an overflowed value
+ let v = max_bound + max_bound + max_bound
+ assert ("0 .|. " ++ show v ++ " == " ++ show v)
+ (v `eq` bit_or v zero)
+
+ -- xor . xor = id
+ forM_ mbit_xor \bit_xor -> do
+ forM_ [0..nbits-2] \n -> do
+ -- v0 == v0' but hopefully GHC doesn't see it statically
+ let v0 = one `shift_left` n
+ let v1 = one `shift_left` (n+1)
+ let v0' = v1 `shift_right_logical` 1
+ let v = max_bound + max_bound + max_bound
+ assert (show v ++ " `xor` " ++ show v0 ++ " == " ++ show v0' ++ " `xor` " ++ show v)
+ (bit_xor v v0 `eq` bit_xor v0' v)
+
+ -- test comparison operators
+ forM_ [0..nbits-2-(if signed then 1 else 0)] \n -> do
+ -- v0 == v0' but hopefully GHC doesn't see it statically
+ let v0 = one `shift_left` n
+ let v1 = one `shift_left` (n+1)
+ let v0' = v1 `shift_right_logical` 1
+ assert (show v0 ++ " < " ++ show v1)
+ (v0 `lt` v1)
+ assert (show v0 ++ " <= " ++ show v1)
+ (v0 `le` v1)
+ assert (show v0 ++ " > " ++ show v1)
+ (v1 `gt` v0)
+
+ assert (show v0 ++ " <= " ++ show v0')
+ (v0 `le` v0')
+ assert (show v0 ++ " >= " ++ show v0')
+ (v0 `ge` v0')
+ assert (show v0 ++ " == " ++ show v0')
+ (v0 `eq` v0')
diff --git a/testsuite/tests/primops/should_run/Sized.stdout b/testsuite/tests/primops/should_run/Sized.stdout
new file mode 100644
index 0000000000..8d8e33a13f
--- /dev/null
+++ b/testsuite/tests/primops/should_run/Sized.stdout
@@ -0,0 +1,1311 @@
+--------------------------
+Testing W8
+--------------------------
+PASSED: 0 >> 0 == 0
+PASSED: 0 >> 1 == 0
+PASSED: 0 >> 2 == 0
+PASSED: 0 >> 3 == 0
+PASSED: 0 >> 4 == 0
+PASSED: 0 >> 5 == 0
+PASSED: 0 >> 6 == 0
+PASSED: 0 >> 7 == 0
+PASSED: 0 << 0 == 0
+PASSED: 0 << 1 == 0
+PASSED: 0 << 2 == 0
+PASSED: 0 << 3 == 0
+PASSED: 0 << 4 == 0
+PASSED: 0 << 5 == 0
+PASSED: 0 << 6 == 0
+PASSED: 0 << 7 == 0
+PASSED: 1 << 0 == 1
+PASSED: 1 << 1 == 2
+PASSED: 1 << 2 == 4
+PASSED: 1 << 3 == 8
+PASSED: 1 << 4 == 16
+PASSED: 1 << 5 == 32
+PASSED: 1 << 6 == 64
+PASSED: 1 << 7 == 128
+PASSED: 0 >> 0 == 0 (logical)
+PASSED: 0 >> 1 == 0 (logical)
+PASSED: 0 >> 2 == 0 (logical)
+PASSED: 0 >> 3 == 0 (logical)
+PASSED: 0 >> 4 == 0 (logical)
+PASSED: 0 >> 5 == 0 (logical)
+PASSED: 0 >> 6 == 0 (logical)
+PASSED: 0 >> 7 == 0 (logical)
+PASSED: 0 .&. 1 == 0
+PASSED: 0 .&. 2 == 0
+PASSED: 0 .&. 4 == 0
+PASSED: 0 .&. 8 == 0
+PASSED: 0 .&. 16 == 0
+PASSED: 0 .&. 32 == 0
+PASSED: 0 .&. 64 == 0
+PASSED: 0 .&. 128 == 0
+PASSED: 0 .&. 253 == 0
+PASSED: 0 .|. 1 == 1
+PASSED: 0 .|. 2 == 2
+PASSED: 0 .|. 4 == 4
+PASSED: 0 .|. 8 == 8
+PASSED: 0 .|. 16 == 16
+PASSED: 0 .|. 32 == 32
+PASSED: 0 .|. 64 == 64
+PASSED: 0 .|. 128 == 128
+PASSED: 0 .|. 253 == 253
+PASSED: 253 `xor` 1 == 1 `xor` 253
+PASSED: 253 `xor` 2 == 2 `xor` 253
+PASSED: 253 `xor` 4 == 4 `xor` 253
+PASSED: 253 `xor` 8 == 8 `xor` 253
+PASSED: 253 `xor` 16 == 16 `xor` 253
+PASSED: 253 `xor` 32 == 32 `xor` 253
+PASSED: 253 `xor` 64 == 64 `xor` 253
+PASSED: 1 < 2
+PASSED: 1 <= 2
+PASSED: 1 > 2
+PASSED: 1 <= 1
+PASSED: 1 >= 1
+PASSED: 1 == 1
+PASSED: 2 < 4
+PASSED: 2 <= 4
+PASSED: 2 > 4
+PASSED: 2 <= 2
+PASSED: 2 >= 2
+PASSED: 2 == 2
+PASSED: 4 < 8
+PASSED: 4 <= 8
+PASSED: 4 > 8
+PASSED: 4 <= 4
+PASSED: 4 >= 4
+PASSED: 4 == 4
+PASSED: 8 < 16
+PASSED: 8 <= 16
+PASSED: 8 > 16
+PASSED: 8 <= 8
+PASSED: 8 >= 8
+PASSED: 8 == 8
+PASSED: 16 < 32
+PASSED: 16 <= 32
+PASSED: 16 > 32
+PASSED: 16 <= 16
+PASSED: 16 >= 16
+PASSED: 16 == 16
+PASSED: 32 < 64
+PASSED: 32 <= 64
+PASSED: 32 > 64
+PASSED: 32 <= 32
+PASSED: 32 >= 32
+PASSED: 32 == 32
+PASSED: 64 < 128
+PASSED: 64 <= 128
+PASSED: 64 > 128
+PASSED: 64 <= 64
+PASSED: 64 >= 64
+PASSED: 64 == 64
+--------------------------
+Testing W16
+--------------------------
+PASSED: 0 >> 0 == 0
+PASSED: 0 >> 1 == 0
+PASSED: 0 >> 2 == 0
+PASSED: 0 >> 3 == 0
+PASSED: 0 >> 4 == 0
+PASSED: 0 >> 5 == 0
+PASSED: 0 >> 6 == 0
+PASSED: 0 >> 7 == 0
+PASSED: 0 >> 8 == 0
+PASSED: 0 >> 9 == 0
+PASSED: 0 >> 10 == 0
+PASSED: 0 >> 11 == 0
+PASSED: 0 >> 12 == 0
+PASSED: 0 >> 13 == 0
+PASSED: 0 >> 14 == 0
+PASSED: 0 >> 15 == 0
+PASSED: 0 << 0 == 0
+PASSED: 0 << 1 == 0
+PASSED: 0 << 2 == 0
+PASSED: 0 << 3 == 0
+PASSED: 0 << 4 == 0
+PASSED: 0 << 5 == 0
+PASSED: 0 << 6 == 0
+PASSED: 0 << 7 == 0
+PASSED: 0 << 8 == 0
+PASSED: 0 << 9 == 0
+PASSED: 0 << 10 == 0
+PASSED: 0 << 11 == 0
+PASSED: 0 << 12 == 0
+PASSED: 0 << 13 == 0
+PASSED: 0 << 14 == 0
+PASSED: 0 << 15 == 0
+PASSED: 1 << 0 == 1
+PASSED: 1 << 1 == 2
+PASSED: 1 << 2 == 4
+PASSED: 1 << 3 == 8
+PASSED: 1 << 4 == 16
+PASSED: 1 << 5 == 32
+PASSED: 1 << 6 == 64
+PASSED: 1 << 7 == 128
+PASSED: 1 << 8 == 256
+PASSED: 1 << 9 == 512
+PASSED: 1 << 10 == 1024
+PASSED: 1 << 11 == 2048
+PASSED: 1 << 12 == 4096
+PASSED: 1 << 13 == 8192
+PASSED: 1 << 14 == 16384
+PASSED: 1 << 15 == 32768
+PASSED: 0 >> 0 == 0 (logical)
+PASSED: 0 >> 1 == 0 (logical)
+PASSED: 0 >> 2 == 0 (logical)
+PASSED: 0 >> 3 == 0 (logical)
+PASSED: 0 >> 4 == 0 (logical)
+PASSED: 0 >> 5 == 0 (logical)
+PASSED: 0 >> 6 == 0 (logical)
+PASSED: 0 >> 7 == 0 (logical)
+PASSED: 0 >> 8 == 0 (logical)
+PASSED: 0 >> 9 == 0 (logical)
+PASSED: 0 >> 10 == 0 (logical)
+PASSED: 0 >> 11 == 0 (logical)
+PASSED: 0 >> 12 == 0 (logical)
+PASSED: 0 >> 13 == 0 (logical)
+PASSED: 0 >> 14 == 0 (logical)
+PASSED: 0 >> 15 == 0 (logical)
+PASSED: 0 .&. 1 == 0
+PASSED: 0 .&. 2 == 0
+PASSED: 0 .&. 4 == 0
+PASSED: 0 .&. 8 == 0
+PASSED: 0 .&. 16 == 0
+PASSED: 0 .&. 32 == 0
+PASSED: 0 .&. 64 == 0
+PASSED: 0 .&. 128 == 0
+PASSED: 0 .&. 256 == 0
+PASSED: 0 .&. 512 == 0
+PASSED: 0 .&. 1024 == 0
+PASSED: 0 .&. 2048 == 0
+PASSED: 0 .&. 4096 == 0
+PASSED: 0 .&. 8192 == 0
+PASSED: 0 .&. 16384 == 0
+PASSED: 0 .&. 32768 == 0
+PASSED: 0 .&. 65533 == 0
+PASSED: 0 .|. 1 == 1
+PASSED: 0 .|. 2 == 2
+PASSED: 0 .|. 4 == 4
+PASSED: 0 .|. 8 == 8
+PASSED: 0 .|. 16 == 16
+PASSED: 0 .|. 32 == 32
+PASSED: 0 .|. 64 == 64
+PASSED: 0 .|. 128 == 128
+PASSED: 0 .|. 256 == 256
+PASSED: 0 .|. 512 == 512
+PASSED: 0 .|. 1024 == 1024
+PASSED: 0 .|. 2048 == 2048
+PASSED: 0 .|. 4096 == 4096
+PASSED: 0 .|. 8192 == 8192
+PASSED: 0 .|. 16384 == 16384
+PASSED: 0 .|. 32768 == 32768
+PASSED: 0 .|. 65533 == 65533
+PASSED: 65533 `xor` 1 == 1 `xor` 65533
+PASSED: 65533 `xor` 2 == 2 `xor` 65533
+PASSED: 65533 `xor` 4 == 4 `xor` 65533
+PASSED: 65533 `xor` 8 == 8 `xor` 65533
+PASSED: 65533 `xor` 16 == 16 `xor` 65533
+PASSED: 65533 `xor` 32 == 32 `xor` 65533
+PASSED: 65533 `xor` 64 == 64 `xor` 65533
+PASSED: 65533 `xor` 128 == 128 `xor` 65533
+PASSED: 65533 `xor` 256 == 256 `xor` 65533
+PASSED: 65533 `xor` 512 == 512 `xor` 65533
+PASSED: 65533 `xor` 1024 == 1024 `xor` 65533
+PASSED: 65533 `xor` 2048 == 2048 `xor` 65533
+PASSED: 65533 `xor` 4096 == 4096 `xor` 65533
+PASSED: 65533 `xor` 8192 == 8192 `xor` 65533
+PASSED: 65533 `xor` 16384 == 16384 `xor` 65533
+PASSED: 1 < 2
+PASSED: 1 <= 2
+PASSED: 1 > 2
+PASSED: 1 <= 1
+PASSED: 1 >= 1
+PASSED: 1 == 1
+PASSED: 2 < 4
+PASSED: 2 <= 4
+PASSED: 2 > 4
+PASSED: 2 <= 2
+PASSED: 2 >= 2
+PASSED: 2 == 2
+PASSED: 4 < 8
+PASSED: 4 <= 8
+PASSED: 4 > 8
+PASSED: 4 <= 4
+PASSED: 4 >= 4
+PASSED: 4 == 4
+PASSED: 8 < 16
+PASSED: 8 <= 16
+PASSED: 8 > 16
+PASSED: 8 <= 8
+PASSED: 8 >= 8
+PASSED: 8 == 8
+PASSED: 16 < 32
+PASSED: 16 <= 32
+PASSED: 16 > 32
+PASSED: 16 <= 16
+PASSED: 16 >= 16
+PASSED: 16 == 16
+PASSED: 32 < 64
+PASSED: 32 <= 64
+PASSED: 32 > 64
+PASSED: 32 <= 32
+PASSED: 32 >= 32
+PASSED: 32 == 32
+PASSED: 64 < 128
+PASSED: 64 <= 128
+PASSED: 64 > 128
+PASSED: 64 <= 64
+PASSED: 64 >= 64
+PASSED: 64 == 64
+PASSED: 128 < 256
+PASSED: 128 <= 256
+PASSED: 128 > 256
+PASSED: 128 <= 128
+PASSED: 128 >= 128
+PASSED: 128 == 128
+PASSED: 256 < 512
+PASSED: 256 <= 512
+PASSED: 256 > 512
+PASSED: 256 <= 256
+PASSED: 256 >= 256
+PASSED: 256 == 256
+PASSED: 512 < 1024
+PASSED: 512 <= 1024
+PASSED: 512 > 1024
+PASSED: 512 <= 512
+PASSED: 512 >= 512
+PASSED: 512 == 512
+PASSED: 1024 < 2048
+PASSED: 1024 <= 2048
+PASSED: 1024 > 2048
+PASSED: 1024 <= 1024
+PASSED: 1024 >= 1024
+PASSED: 1024 == 1024
+PASSED: 2048 < 4096
+PASSED: 2048 <= 4096
+PASSED: 2048 > 4096
+PASSED: 2048 <= 2048
+PASSED: 2048 >= 2048
+PASSED: 2048 == 2048
+PASSED: 4096 < 8192
+PASSED: 4096 <= 8192
+PASSED: 4096 > 8192
+PASSED: 4096 <= 4096
+PASSED: 4096 >= 4096
+PASSED: 4096 == 4096
+PASSED: 8192 < 16384
+PASSED: 8192 <= 16384
+PASSED: 8192 > 16384
+PASSED: 8192 <= 8192
+PASSED: 8192 >= 8192
+PASSED: 8192 == 8192
+PASSED: 16384 < 32768
+PASSED: 16384 <= 32768
+PASSED: 16384 > 32768
+PASSED: 16384 <= 16384
+PASSED: 16384 >= 16384
+PASSED: 16384 == 16384
+--------------------------
+Testing W32
+--------------------------
+PASSED: 0 >> 0 == 0
+PASSED: 0 >> 1 == 0
+PASSED: 0 >> 2 == 0
+PASSED: 0 >> 3 == 0
+PASSED: 0 >> 4 == 0
+PASSED: 0 >> 5 == 0
+PASSED: 0 >> 6 == 0
+PASSED: 0 >> 7 == 0
+PASSED: 0 >> 8 == 0
+PASSED: 0 >> 9 == 0
+PASSED: 0 >> 10 == 0
+PASSED: 0 >> 11 == 0
+PASSED: 0 >> 12 == 0
+PASSED: 0 >> 13 == 0
+PASSED: 0 >> 14 == 0
+PASSED: 0 >> 15 == 0
+PASSED: 0 >> 16 == 0
+PASSED: 0 >> 17 == 0
+PASSED: 0 >> 18 == 0
+PASSED: 0 >> 19 == 0
+PASSED: 0 >> 20 == 0
+PASSED: 0 >> 21 == 0
+PASSED: 0 >> 22 == 0
+PASSED: 0 >> 23 == 0
+PASSED: 0 >> 24 == 0
+PASSED: 0 >> 25 == 0
+PASSED: 0 >> 26 == 0
+PASSED: 0 >> 27 == 0
+PASSED: 0 >> 28 == 0
+PASSED: 0 >> 29 == 0
+PASSED: 0 >> 30 == 0
+PASSED: 0 >> 31 == 0
+PASSED: 0 << 0 == 0
+PASSED: 0 << 1 == 0
+PASSED: 0 << 2 == 0
+PASSED: 0 << 3 == 0
+PASSED: 0 << 4 == 0
+PASSED: 0 << 5 == 0
+PASSED: 0 << 6 == 0
+PASSED: 0 << 7 == 0
+PASSED: 0 << 8 == 0
+PASSED: 0 << 9 == 0
+PASSED: 0 << 10 == 0
+PASSED: 0 << 11 == 0
+PASSED: 0 << 12 == 0
+PASSED: 0 << 13 == 0
+PASSED: 0 << 14 == 0
+PASSED: 0 << 15 == 0
+PASSED: 0 << 16 == 0
+PASSED: 0 << 17 == 0
+PASSED: 0 << 18 == 0
+PASSED: 0 << 19 == 0
+PASSED: 0 << 20 == 0
+PASSED: 0 << 21 == 0
+PASSED: 0 << 22 == 0
+PASSED: 0 << 23 == 0
+PASSED: 0 << 24 == 0
+PASSED: 0 << 25 == 0
+PASSED: 0 << 26 == 0
+PASSED: 0 << 27 == 0
+PASSED: 0 << 28 == 0
+PASSED: 0 << 29 == 0
+PASSED: 0 << 30 == 0
+PASSED: 0 << 31 == 0
+PASSED: 1 << 0 == 1
+PASSED: 1 << 1 == 2
+PASSED: 1 << 2 == 4
+PASSED: 1 << 3 == 8
+PASSED: 1 << 4 == 16
+PASSED: 1 << 5 == 32
+PASSED: 1 << 6 == 64
+PASSED: 1 << 7 == 128
+PASSED: 1 << 8 == 256
+PASSED: 1 << 9 == 512
+PASSED: 1 << 10 == 1024
+PASSED: 1 << 11 == 2048
+PASSED: 1 << 12 == 4096
+PASSED: 1 << 13 == 8192
+PASSED: 1 << 14 == 16384
+PASSED: 1 << 15 == 32768
+PASSED: 1 << 16 == 65536
+PASSED: 1 << 17 == 131072
+PASSED: 1 << 18 == 262144
+PASSED: 1 << 19 == 524288
+PASSED: 1 << 20 == 1048576
+PASSED: 1 << 21 == 2097152
+PASSED: 1 << 22 == 4194304
+PASSED: 1 << 23 == 8388608
+PASSED: 1 << 24 == 16777216
+PASSED: 1 << 25 == 33554432
+PASSED: 1 << 26 == 67108864
+PASSED: 1 << 27 == 134217728
+PASSED: 1 << 28 == 268435456
+PASSED: 1 << 29 == 536870912
+PASSED: 1 << 30 == 1073741824
+PASSED: 1 << 31 == 2147483648
+PASSED: 0 >> 0 == 0 (logical)
+PASSED: 0 >> 1 == 0 (logical)
+PASSED: 0 >> 2 == 0 (logical)
+PASSED: 0 >> 3 == 0 (logical)
+PASSED: 0 >> 4 == 0 (logical)
+PASSED: 0 >> 5 == 0 (logical)
+PASSED: 0 >> 6 == 0 (logical)
+PASSED: 0 >> 7 == 0 (logical)
+PASSED: 0 >> 8 == 0 (logical)
+PASSED: 0 >> 9 == 0 (logical)
+PASSED: 0 >> 10 == 0 (logical)
+PASSED: 0 >> 11 == 0 (logical)
+PASSED: 0 >> 12 == 0 (logical)
+PASSED: 0 >> 13 == 0 (logical)
+PASSED: 0 >> 14 == 0 (logical)
+PASSED: 0 >> 15 == 0 (logical)
+PASSED: 0 >> 16 == 0 (logical)
+PASSED: 0 >> 17 == 0 (logical)
+PASSED: 0 >> 18 == 0 (logical)
+PASSED: 0 >> 19 == 0 (logical)
+PASSED: 0 >> 20 == 0 (logical)
+PASSED: 0 >> 21 == 0 (logical)
+PASSED: 0 >> 22 == 0 (logical)
+PASSED: 0 >> 23 == 0 (logical)
+PASSED: 0 >> 24 == 0 (logical)
+PASSED: 0 >> 25 == 0 (logical)
+PASSED: 0 >> 26 == 0 (logical)
+PASSED: 0 >> 27 == 0 (logical)
+PASSED: 0 >> 28 == 0 (logical)
+PASSED: 0 >> 29 == 0 (logical)
+PASSED: 0 >> 30 == 0 (logical)
+PASSED: 0 >> 31 == 0 (logical)
+PASSED: 0 .&. 1 == 0
+PASSED: 0 .&. 2 == 0
+PASSED: 0 .&. 4 == 0
+PASSED: 0 .&. 8 == 0
+PASSED: 0 .&. 16 == 0
+PASSED: 0 .&. 32 == 0
+PASSED: 0 .&. 64 == 0
+PASSED: 0 .&. 128 == 0
+PASSED: 0 .&. 256 == 0
+PASSED: 0 .&. 512 == 0
+PASSED: 0 .&. 1024 == 0
+PASSED: 0 .&. 2048 == 0
+PASSED: 0 .&. 4096 == 0
+PASSED: 0 .&. 8192 == 0
+PASSED: 0 .&. 16384 == 0
+PASSED: 0 .&. 32768 == 0
+PASSED: 0 .&. 65536 == 0
+PASSED: 0 .&. 131072 == 0
+PASSED: 0 .&. 262144 == 0
+PASSED: 0 .&. 524288 == 0
+PASSED: 0 .&. 1048576 == 0
+PASSED: 0 .&. 2097152 == 0
+PASSED: 0 .&. 4194304 == 0
+PASSED: 0 .&. 8388608 == 0
+PASSED: 0 .&. 16777216 == 0
+PASSED: 0 .&. 33554432 == 0
+PASSED: 0 .&. 67108864 == 0
+PASSED: 0 .&. 134217728 == 0
+PASSED: 0 .&. 268435456 == 0
+PASSED: 0 .&. 536870912 == 0
+PASSED: 0 .&. 1073741824 == 0
+PASSED: 0 .&. 2147483648 == 0
+PASSED: 0 .&. 4294967293 == 0
+PASSED: 0 .|. 1 == 1
+PASSED: 0 .|. 2 == 2
+PASSED: 0 .|. 4 == 4
+PASSED: 0 .|. 8 == 8
+PASSED: 0 .|. 16 == 16
+PASSED: 0 .|. 32 == 32
+PASSED: 0 .|. 64 == 64
+PASSED: 0 .|. 128 == 128
+PASSED: 0 .|. 256 == 256
+PASSED: 0 .|. 512 == 512
+PASSED: 0 .|. 1024 == 1024
+PASSED: 0 .|. 2048 == 2048
+PASSED: 0 .|. 4096 == 4096
+PASSED: 0 .|. 8192 == 8192
+PASSED: 0 .|. 16384 == 16384
+PASSED: 0 .|. 32768 == 32768
+PASSED: 0 .|. 65536 == 65536
+PASSED: 0 .|. 131072 == 131072
+PASSED: 0 .|. 262144 == 262144
+PASSED: 0 .|. 524288 == 524288
+PASSED: 0 .|. 1048576 == 1048576
+PASSED: 0 .|. 2097152 == 2097152
+PASSED: 0 .|. 4194304 == 4194304
+PASSED: 0 .|. 8388608 == 8388608
+PASSED: 0 .|. 16777216 == 16777216
+PASSED: 0 .|. 33554432 == 33554432
+PASSED: 0 .|. 67108864 == 67108864
+PASSED: 0 .|. 134217728 == 134217728
+PASSED: 0 .|. 268435456 == 268435456
+PASSED: 0 .|. 536870912 == 536870912
+PASSED: 0 .|. 1073741824 == 1073741824
+PASSED: 0 .|. 2147483648 == 2147483648
+PASSED: 0 .|. 4294967293 == 4294967293
+PASSED: 4294967293 `xor` 1 == 1 `xor` 4294967293
+PASSED: 4294967293 `xor` 2 == 2 `xor` 4294967293
+PASSED: 4294967293 `xor` 4 == 4 `xor` 4294967293
+PASSED: 4294967293 `xor` 8 == 8 `xor` 4294967293
+PASSED: 4294967293 `xor` 16 == 16 `xor` 4294967293
+PASSED: 4294967293 `xor` 32 == 32 `xor` 4294967293
+PASSED: 4294967293 `xor` 64 == 64 `xor` 4294967293
+PASSED: 4294967293 `xor` 128 == 128 `xor` 4294967293
+PASSED: 4294967293 `xor` 256 == 256 `xor` 4294967293
+PASSED: 4294967293 `xor` 512 == 512 `xor` 4294967293
+PASSED: 4294967293 `xor` 1024 == 1024 `xor` 4294967293
+PASSED: 4294967293 `xor` 2048 == 2048 `xor` 4294967293
+PASSED: 4294967293 `xor` 4096 == 4096 `xor` 4294967293
+PASSED: 4294967293 `xor` 8192 == 8192 `xor` 4294967293
+PASSED: 4294967293 `xor` 16384 == 16384 `xor` 4294967293
+PASSED: 4294967293 `xor` 32768 == 32768 `xor` 4294967293
+PASSED: 4294967293 `xor` 65536 == 65536 `xor` 4294967293
+PASSED: 4294967293 `xor` 131072 == 131072 `xor` 4294967293
+PASSED: 4294967293 `xor` 262144 == 262144 `xor` 4294967293
+PASSED: 4294967293 `xor` 524288 == 524288 `xor` 4294967293
+PASSED: 4294967293 `xor` 1048576 == 1048576 `xor` 4294967293
+PASSED: 4294967293 `xor` 2097152 == 2097152 `xor` 4294967293
+PASSED: 4294967293 `xor` 4194304 == 4194304 `xor` 4294967293
+PASSED: 4294967293 `xor` 8388608 == 8388608 `xor` 4294967293
+PASSED: 4294967293 `xor` 16777216 == 16777216 `xor` 4294967293
+PASSED: 4294967293 `xor` 33554432 == 33554432 `xor` 4294967293
+PASSED: 4294967293 `xor` 67108864 == 67108864 `xor` 4294967293
+PASSED: 4294967293 `xor` 134217728 == 134217728 `xor` 4294967293
+PASSED: 4294967293 `xor` 268435456 == 268435456 `xor` 4294967293
+PASSED: 4294967293 `xor` 536870912 == 536870912 `xor` 4294967293
+PASSED: 4294967293 `xor` 1073741824 == 1073741824 `xor` 4294967293
+PASSED: 1 < 2
+PASSED: 1 <= 2
+PASSED: 1 > 2
+PASSED: 1 <= 1
+PASSED: 1 >= 1
+PASSED: 1 == 1
+PASSED: 2 < 4
+PASSED: 2 <= 4
+PASSED: 2 > 4
+PASSED: 2 <= 2
+PASSED: 2 >= 2
+PASSED: 2 == 2
+PASSED: 4 < 8
+PASSED: 4 <= 8
+PASSED: 4 > 8
+PASSED: 4 <= 4
+PASSED: 4 >= 4
+PASSED: 4 == 4
+PASSED: 8 < 16
+PASSED: 8 <= 16
+PASSED: 8 > 16
+PASSED: 8 <= 8
+PASSED: 8 >= 8
+PASSED: 8 == 8
+PASSED: 16 < 32
+PASSED: 16 <= 32
+PASSED: 16 > 32
+PASSED: 16 <= 16
+PASSED: 16 >= 16
+PASSED: 16 == 16
+PASSED: 32 < 64
+PASSED: 32 <= 64
+PASSED: 32 > 64
+PASSED: 32 <= 32
+PASSED: 32 >= 32
+PASSED: 32 == 32
+PASSED: 64 < 128
+PASSED: 64 <= 128
+PASSED: 64 > 128
+PASSED: 64 <= 64
+PASSED: 64 >= 64
+PASSED: 64 == 64
+PASSED: 128 < 256
+PASSED: 128 <= 256
+PASSED: 128 > 256
+PASSED: 128 <= 128
+PASSED: 128 >= 128
+PASSED: 128 == 128
+PASSED: 256 < 512
+PASSED: 256 <= 512
+PASSED: 256 > 512
+PASSED: 256 <= 256
+PASSED: 256 >= 256
+PASSED: 256 == 256
+PASSED: 512 < 1024
+PASSED: 512 <= 1024
+PASSED: 512 > 1024
+PASSED: 512 <= 512
+PASSED: 512 >= 512
+PASSED: 512 == 512
+PASSED: 1024 < 2048
+PASSED: 1024 <= 2048
+PASSED: 1024 > 2048
+PASSED: 1024 <= 1024
+PASSED: 1024 >= 1024
+PASSED: 1024 == 1024
+PASSED: 2048 < 4096
+PASSED: 2048 <= 4096
+PASSED: 2048 > 4096
+PASSED: 2048 <= 2048
+PASSED: 2048 >= 2048
+PASSED: 2048 == 2048
+PASSED: 4096 < 8192
+PASSED: 4096 <= 8192
+PASSED: 4096 > 8192
+PASSED: 4096 <= 4096
+PASSED: 4096 >= 4096
+PASSED: 4096 == 4096
+PASSED: 8192 < 16384
+PASSED: 8192 <= 16384
+PASSED: 8192 > 16384
+PASSED: 8192 <= 8192
+PASSED: 8192 >= 8192
+PASSED: 8192 == 8192
+PASSED: 16384 < 32768
+PASSED: 16384 <= 32768
+PASSED: 16384 > 32768
+PASSED: 16384 <= 16384
+PASSED: 16384 >= 16384
+PASSED: 16384 == 16384
+PASSED: 32768 < 65536
+PASSED: 32768 <= 65536
+PASSED: 32768 > 65536
+PASSED: 32768 <= 32768
+PASSED: 32768 >= 32768
+PASSED: 32768 == 32768
+PASSED: 65536 < 131072
+PASSED: 65536 <= 131072
+PASSED: 65536 > 131072
+PASSED: 65536 <= 65536
+PASSED: 65536 >= 65536
+PASSED: 65536 == 65536
+PASSED: 131072 < 262144
+PASSED: 131072 <= 262144
+PASSED: 131072 > 262144
+PASSED: 131072 <= 131072
+PASSED: 131072 >= 131072
+PASSED: 131072 == 131072
+PASSED: 262144 < 524288
+PASSED: 262144 <= 524288
+PASSED: 262144 > 524288
+PASSED: 262144 <= 262144
+PASSED: 262144 >= 262144
+PASSED: 262144 == 262144
+PASSED: 524288 < 1048576
+PASSED: 524288 <= 1048576
+PASSED: 524288 > 1048576
+PASSED: 524288 <= 524288
+PASSED: 524288 >= 524288
+PASSED: 524288 == 524288
+PASSED: 1048576 < 2097152
+PASSED: 1048576 <= 2097152
+PASSED: 1048576 > 2097152
+PASSED: 1048576 <= 1048576
+PASSED: 1048576 >= 1048576
+PASSED: 1048576 == 1048576
+PASSED: 2097152 < 4194304
+PASSED: 2097152 <= 4194304
+PASSED: 2097152 > 4194304
+PASSED: 2097152 <= 2097152
+PASSED: 2097152 >= 2097152
+PASSED: 2097152 == 2097152
+PASSED: 4194304 < 8388608
+PASSED: 4194304 <= 8388608
+PASSED: 4194304 > 8388608
+PASSED: 4194304 <= 4194304
+PASSED: 4194304 >= 4194304
+PASSED: 4194304 == 4194304
+PASSED: 8388608 < 16777216
+PASSED: 8388608 <= 16777216
+PASSED: 8388608 > 16777216
+PASSED: 8388608 <= 8388608
+PASSED: 8388608 >= 8388608
+PASSED: 8388608 == 8388608
+PASSED: 16777216 < 33554432
+PASSED: 16777216 <= 33554432
+PASSED: 16777216 > 33554432
+PASSED: 16777216 <= 16777216
+PASSED: 16777216 >= 16777216
+PASSED: 16777216 == 16777216
+PASSED: 33554432 < 67108864
+PASSED: 33554432 <= 67108864
+PASSED: 33554432 > 67108864
+PASSED: 33554432 <= 33554432
+PASSED: 33554432 >= 33554432
+PASSED: 33554432 == 33554432
+PASSED: 67108864 < 134217728
+PASSED: 67108864 <= 134217728
+PASSED: 67108864 > 134217728
+PASSED: 67108864 <= 67108864
+PASSED: 67108864 >= 67108864
+PASSED: 67108864 == 67108864
+PASSED: 134217728 < 268435456
+PASSED: 134217728 <= 268435456
+PASSED: 134217728 > 268435456
+PASSED: 134217728 <= 134217728
+PASSED: 134217728 >= 134217728
+PASSED: 134217728 == 134217728
+PASSED: 268435456 < 536870912
+PASSED: 268435456 <= 536870912
+PASSED: 268435456 > 536870912
+PASSED: 268435456 <= 268435456
+PASSED: 268435456 >= 268435456
+PASSED: 268435456 == 268435456
+PASSED: 536870912 < 1073741824
+PASSED: 536870912 <= 1073741824
+PASSED: 536870912 > 1073741824
+PASSED: 536870912 <= 536870912
+PASSED: 536870912 >= 536870912
+PASSED: 536870912 == 536870912
+PASSED: 1073741824 < 2147483648
+PASSED: 1073741824 <= 2147483648
+PASSED: 1073741824 > 2147483648
+PASSED: 1073741824 <= 1073741824
+PASSED: 1073741824 >= 1073741824
+PASSED: 1073741824 == 1073741824
+--------------------------
+Testing I8
+--------------------------
+PASSED: 0 >> 0 == 0
+PASSED: 0 >> 1 == 0
+PASSED: 0 >> 2 == 0
+PASSED: 0 >> 3 == 0
+PASSED: 0 >> 4 == 0
+PASSED: 0 >> 5 == 0
+PASSED: 0 >> 6 == 0
+PASSED: 0 >> 7 == 0
+PASSED: 0 << 0 == 0
+PASSED: 0 << 1 == 0
+PASSED: 0 << 2 == 0
+PASSED: 0 << 3 == 0
+PASSED: 0 << 4 == 0
+PASSED: 0 << 5 == 0
+PASSED: 0 << 6 == 0
+PASSED: 0 << 7 == 0
+PASSED: 1 << 0 == 1
+PASSED: 1 << 1 == 2
+PASSED: 1 << 2 == 4
+PASSED: 1 << 3 == 8
+PASSED: 1 << 4 == 16
+PASSED: 1 << 5 == 32
+PASSED: 1 << 6 == 64
+PASSED: 1 << 7 == -128
+PASSED: -128 >> 0 == -128 (logical)
+PASSED: -128 >> 1 == 64 (logical)
+PASSED: -128 >> 2 == 32 (logical)
+PASSED: -128 >> 3 == 16 (logical)
+PASSED: -128 >> 4 == 8 (logical)
+PASSED: -128 >> 5 == 4 (logical)
+PASSED: -128 >> 6 == 2 (logical)
+PASSED: -128 >> 7 == 1 (logical)
+PASSED: -128 >> 0 == -128 (arithmetic)
+PASSED: -128 >> 1 == -64 (arithmetic)
+PASSED: -128 >> 2 == -32 (arithmetic)
+PASSED: -128 >> 3 == -16 (arithmetic)
+PASSED: -128 >> 4 == -8 (arithmetic)
+PASSED: -128 >> 5 == -4 (arithmetic)
+PASSED: -128 >> 6 == -2 (arithmetic)
+PASSED: -128 >> 7 == -1 (arithmetic)
+PASSED: 1 < 2
+PASSED: 1 <= 2
+PASSED: 1 > 2
+PASSED: 1 <= 1
+PASSED: 1 >= 1
+PASSED: 1 == 1
+PASSED: 2 < 4
+PASSED: 2 <= 4
+PASSED: 2 > 4
+PASSED: 2 <= 2
+PASSED: 2 >= 2
+PASSED: 2 == 2
+PASSED: 4 < 8
+PASSED: 4 <= 8
+PASSED: 4 > 8
+PASSED: 4 <= 4
+PASSED: 4 >= 4
+PASSED: 4 == 4
+PASSED: 8 < 16
+PASSED: 8 <= 16
+PASSED: 8 > 16
+PASSED: 8 <= 8
+PASSED: 8 >= 8
+PASSED: 8 == 8
+PASSED: 16 < 32
+PASSED: 16 <= 32
+PASSED: 16 > 32
+PASSED: 16 <= 16
+PASSED: 16 >= 16
+PASSED: 16 == 16
+PASSED: 32 < 64
+PASSED: 32 <= 64
+PASSED: 32 > 64
+PASSED: 32 <= 32
+PASSED: 32 >= 32
+PASSED: 32 == 32
+--------------------------
+Testing I16
+--------------------------
+PASSED: 0 >> 0 == 0
+PASSED: 0 >> 1 == 0
+PASSED: 0 >> 2 == 0
+PASSED: 0 >> 3 == 0
+PASSED: 0 >> 4 == 0
+PASSED: 0 >> 5 == 0
+PASSED: 0 >> 6 == 0
+PASSED: 0 >> 7 == 0
+PASSED: 0 >> 8 == 0
+PASSED: 0 >> 9 == 0
+PASSED: 0 >> 10 == 0
+PASSED: 0 >> 11 == 0
+PASSED: 0 >> 12 == 0
+PASSED: 0 >> 13 == 0
+PASSED: 0 >> 14 == 0
+PASSED: 0 >> 15 == 0
+PASSED: 0 << 0 == 0
+PASSED: 0 << 1 == 0
+PASSED: 0 << 2 == 0
+PASSED: 0 << 3 == 0
+PASSED: 0 << 4 == 0
+PASSED: 0 << 5 == 0
+PASSED: 0 << 6 == 0
+PASSED: 0 << 7 == 0
+PASSED: 0 << 8 == 0
+PASSED: 0 << 9 == 0
+PASSED: 0 << 10 == 0
+PASSED: 0 << 11 == 0
+PASSED: 0 << 12 == 0
+PASSED: 0 << 13 == 0
+PASSED: 0 << 14 == 0
+PASSED: 0 << 15 == 0
+PASSED: 1 << 0 == 1
+PASSED: 1 << 1 == 2
+PASSED: 1 << 2 == 4
+PASSED: 1 << 3 == 8
+PASSED: 1 << 4 == 16
+PASSED: 1 << 5 == 32
+PASSED: 1 << 6 == 64
+PASSED: 1 << 7 == 128
+PASSED: 1 << 8 == 256
+PASSED: 1 << 9 == 512
+PASSED: 1 << 10 == 1024
+PASSED: 1 << 11 == 2048
+PASSED: 1 << 12 == 4096
+PASSED: 1 << 13 == 8192
+PASSED: 1 << 14 == 16384
+PASSED: 1 << 15 == -32768
+PASSED: -32768 >> 0 == -32768 (logical)
+PASSED: -32768 >> 1 == 16384 (logical)
+PASSED: -32768 >> 2 == 8192 (logical)
+PASSED: -32768 >> 3 == 4096 (logical)
+PASSED: -32768 >> 4 == 2048 (logical)
+PASSED: -32768 >> 5 == 1024 (logical)
+PASSED: -32768 >> 6 == 512 (logical)
+PASSED: -32768 >> 7 == 256 (logical)
+PASSED: -32768 >> 8 == 128 (logical)
+PASSED: -32768 >> 9 == 64 (logical)
+PASSED: -32768 >> 10 == 32 (logical)
+PASSED: -32768 >> 11 == 16 (logical)
+PASSED: -32768 >> 12 == 8 (logical)
+PASSED: -32768 >> 13 == 4 (logical)
+PASSED: -32768 >> 14 == 2 (logical)
+PASSED: -32768 >> 15 == 1 (logical)
+PASSED: -32768 >> 0 == -32768 (arithmetic)
+PASSED: -32768 >> 1 == -16384 (arithmetic)
+PASSED: -32768 >> 2 == -8192 (arithmetic)
+PASSED: -32768 >> 3 == -4096 (arithmetic)
+PASSED: -32768 >> 4 == -2048 (arithmetic)
+PASSED: -32768 >> 5 == -1024 (arithmetic)
+PASSED: -32768 >> 6 == -512 (arithmetic)
+PASSED: -32768 >> 7 == -256 (arithmetic)
+PASSED: -32768 >> 8 == -128 (arithmetic)
+PASSED: -32768 >> 9 == -64 (arithmetic)
+PASSED: -32768 >> 10 == -32 (arithmetic)
+PASSED: -32768 >> 11 == -16 (arithmetic)
+PASSED: -32768 >> 12 == -8 (arithmetic)
+PASSED: -32768 >> 13 == -4 (arithmetic)
+PASSED: -32768 >> 14 == -2 (arithmetic)
+PASSED: -32768 >> 15 == -1 (arithmetic)
+PASSED: 1 < 2
+PASSED: 1 <= 2
+PASSED: 1 > 2
+PASSED: 1 <= 1
+PASSED: 1 >= 1
+PASSED: 1 == 1
+PASSED: 2 < 4
+PASSED: 2 <= 4
+PASSED: 2 > 4
+PASSED: 2 <= 2
+PASSED: 2 >= 2
+PASSED: 2 == 2
+PASSED: 4 < 8
+PASSED: 4 <= 8
+PASSED: 4 > 8
+PASSED: 4 <= 4
+PASSED: 4 >= 4
+PASSED: 4 == 4
+PASSED: 8 < 16
+PASSED: 8 <= 16
+PASSED: 8 > 16
+PASSED: 8 <= 8
+PASSED: 8 >= 8
+PASSED: 8 == 8
+PASSED: 16 < 32
+PASSED: 16 <= 32
+PASSED: 16 > 32
+PASSED: 16 <= 16
+PASSED: 16 >= 16
+PASSED: 16 == 16
+PASSED: 32 < 64
+PASSED: 32 <= 64
+PASSED: 32 > 64
+PASSED: 32 <= 32
+PASSED: 32 >= 32
+PASSED: 32 == 32
+PASSED: 64 < 128
+PASSED: 64 <= 128
+PASSED: 64 > 128
+PASSED: 64 <= 64
+PASSED: 64 >= 64
+PASSED: 64 == 64
+PASSED: 128 < 256
+PASSED: 128 <= 256
+PASSED: 128 > 256
+PASSED: 128 <= 128
+PASSED: 128 >= 128
+PASSED: 128 == 128
+PASSED: 256 < 512
+PASSED: 256 <= 512
+PASSED: 256 > 512
+PASSED: 256 <= 256
+PASSED: 256 >= 256
+PASSED: 256 == 256
+PASSED: 512 < 1024
+PASSED: 512 <= 1024
+PASSED: 512 > 1024
+PASSED: 512 <= 512
+PASSED: 512 >= 512
+PASSED: 512 == 512
+PASSED: 1024 < 2048
+PASSED: 1024 <= 2048
+PASSED: 1024 > 2048
+PASSED: 1024 <= 1024
+PASSED: 1024 >= 1024
+PASSED: 1024 == 1024
+PASSED: 2048 < 4096
+PASSED: 2048 <= 4096
+PASSED: 2048 > 4096
+PASSED: 2048 <= 2048
+PASSED: 2048 >= 2048
+PASSED: 2048 == 2048
+PASSED: 4096 < 8192
+PASSED: 4096 <= 8192
+PASSED: 4096 > 8192
+PASSED: 4096 <= 4096
+PASSED: 4096 >= 4096
+PASSED: 4096 == 4096
+PASSED: 8192 < 16384
+PASSED: 8192 <= 16384
+PASSED: 8192 > 16384
+PASSED: 8192 <= 8192
+PASSED: 8192 >= 8192
+PASSED: 8192 == 8192
+--------------------------
+Testing I32
+--------------------------
+PASSED: 0 >> 0 == 0
+PASSED: 0 >> 1 == 0
+PASSED: 0 >> 2 == 0
+PASSED: 0 >> 3 == 0
+PASSED: 0 >> 4 == 0
+PASSED: 0 >> 5 == 0
+PASSED: 0 >> 6 == 0
+PASSED: 0 >> 7 == 0
+PASSED: 0 >> 8 == 0
+PASSED: 0 >> 9 == 0
+PASSED: 0 >> 10 == 0
+PASSED: 0 >> 11 == 0
+PASSED: 0 >> 12 == 0
+PASSED: 0 >> 13 == 0
+PASSED: 0 >> 14 == 0
+PASSED: 0 >> 15 == 0
+PASSED: 0 >> 16 == 0
+PASSED: 0 >> 17 == 0
+PASSED: 0 >> 18 == 0
+PASSED: 0 >> 19 == 0
+PASSED: 0 >> 20 == 0
+PASSED: 0 >> 21 == 0
+PASSED: 0 >> 22 == 0
+PASSED: 0 >> 23 == 0
+PASSED: 0 >> 24 == 0
+PASSED: 0 >> 25 == 0
+PASSED: 0 >> 26 == 0
+PASSED: 0 >> 27 == 0
+PASSED: 0 >> 28 == 0
+PASSED: 0 >> 29 == 0
+PASSED: 0 >> 30 == 0
+PASSED: 0 >> 31 == 0
+PASSED: 0 << 0 == 0
+PASSED: 0 << 1 == 0
+PASSED: 0 << 2 == 0
+PASSED: 0 << 3 == 0
+PASSED: 0 << 4 == 0
+PASSED: 0 << 5 == 0
+PASSED: 0 << 6 == 0
+PASSED: 0 << 7 == 0
+PASSED: 0 << 8 == 0
+PASSED: 0 << 9 == 0
+PASSED: 0 << 10 == 0
+PASSED: 0 << 11 == 0
+PASSED: 0 << 12 == 0
+PASSED: 0 << 13 == 0
+PASSED: 0 << 14 == 0
+PASSED: 0 << 15 == 0
+PASSED: 0 << 16 == 0
+PASSED: 0 << 17 == 0
+PASSED: 0 << 18 == 0
+PASSED: 0 << 19 == 0
+PASSED: 0 << 20 == 0
+PASSED: 0 << 21 == 0
+PASSED: 0 << 22 == 0
+PASSED: 0 << 23 == 0
+PASSED: 0 << 24 == 0
+PASSED: 0 << 25 == 0
+PASSED: 0 << 26 == 0
+PASSED: 0 << 27 == 0
+PASSED: 0 << 28 == 0
+PASSED: 0 << 29 == 0
+PASSED: 0 << 30 == 0
+PASSED: 0 << 31 == 0
+PASSED: 1 << 0 == 1
+PASSED: 1 << 1 == 2
+PASSED: 1 << 2 == 4
+PASSED: 1 << 3 == 8
+PASSED: 1 << 4 == 16
+PASSED: 1 << 5 == 32
+PASSED: 1 << 6 == 64
+PASSED: 1 << 7 == 128
+PASSED: 1 << 8 == 256
+PASSED: 1 << 9 == 512
+PASSED: 1 << 10 == 1024
+PASSED: 1 << 11 == 2048
+PASSED: 1 << 12 == 4096
+PASSED: 1 << 13 == 8192
+PASSED: 1 << 14 == 16384
+PASSED: 1 << 15 == 32768
+PASSED: 1 << 16 == 65536
+PASSED: 1 << 17 == 131072
+PASSED: 1 << 18 == 262144
+PASSED: 1 << 19 == 524288
+PASSED: 1 << 20 == 1048576
+PASSED: 1 << 21 == 2097152
+PASSED: 1 << 22 == 4194304
+PASSED: 1 << 23 == 8388608
+PASSED: 1 << 24 == 16777216
+PASSED: 1 << 25 == 33554432
+PASSED: 1 << 26 == 67108864
+PASSED: 1 << 27 == 134217728
+PASSED: 1 << 28 == 268435456
+PASSED: 1 << 29 == 536870912
+PASSED: 1 << 30 == 1073741824
+PASSED: 1 << 31 == -2147483648
+PASSED: -2147483648 >> 0 == -2147483648 (logical)
+PASSED: -2147483648 >> 1 == 1073741824 (logical)
+PASSED: -2147483648 >> 2 == 536870912 (logical)
+PASSED: -2147483648 >> 3 == 268435456 (logical)
+PASSED: -2147483648 >> 4 == 134217728 (logical)
+PASSED: -2147483648 >> 5 == 67108864 (logical)
+PASSED: -2147483648 >> 6 == 33554432 (logical)
+PASSED: -2147483648 >> 7 == 16777216 (logical)
+PASSED: -2147483648 >> 8 == 8388608 (logical)
+PASSED: -2147483648 >> 9 == 4194304 (logical)
+PASSED: -2147483648 >> 10 == 2097152 (logical)
+PASSED: -2147483648 >> 11 == 1048576 (logical)
+PASSED: -2147483648 >> 12 == 524288 (logical)
+PASSED: -2147483648 >> 13 == 262144 (logical)
+PASSED: -2147483648 >> 14 == 131072 (logical)
+PASSED: -2147483648 >> 15 == 65536 (logical)
+PASSED: -2147483648 >> 16 == 32768 (logical)
+PASSED: -2147483648 >> 17 == 16384 (logical)
+PASSED: -2147483648 >> 18 == 8192 (logical)
+PASSED: -2147483648 >> 19 == 4096 (logical)
+PASSED: -2147483648 >> 20 == 2048 (logical)
+PASSED: -2147483648 >> 21 == 1024 (logical)
+PASSED: -2147483648 >> 22 == 512 (logical)
+PASSED: -2147483648 >> 23 == 256 (logical)
+PASSED: -2147483648 >> 24 == 128 (logical)
+PASSED: -2147483648 >> 25 == 64 (logical)
+PASSED: -2147483648 >> 26 == 32 (logical)
+PASSED: -2147483648 >> 27 == 16 (logical)
+PASSED: -2147483648 >> 28 == 8 (logical)
+PASSED: -2147483648 >> 29 == 4 (logical)
+PASSED: -2147483648 >> 30 == 2 (logical)
+PASSED: -2147483648 >> 31 == 1 (logical)
+PASSED: -2147483648 >> 0 == -2147483648 (arithmetic)
+PASSED: -2147483648 >> 1 == -1073741824 (arithmetic)
+PASSED: -2147483648 >> 2 == -536870912 (arithmetic)
+PASSED: -2147483648 >> 3 == -268435456 (arithmetic)
+PASSED: -2147483648 >> 4 == -134217728 (arithmetic)
+PASSED: -2147483648 >> 5 == -67108864 (arithmetic)
+PASSED: -2147483648 >> 6 == -33554432 (arithmetic)
+PASSED: -2147483648 >> 7 == -16777216 (arithmetic)
+PASSED: -2147483648 >> 8 == -8388608 (arithmetic)
+PASSED: -2147483648 >> 9 == -4194304 (arithmetic)
+PASSED: -2147483648 >> 10 == -2097152 (arithmetic)
+PASSED: -2147483648 >> 11 == -1048576 (arithmetic)
+PASSED: -2147483648 >> 12 == -524288 (arithmetic)
+PASSED: -2147483648 >> 13 == -262144 (arithmetic)
+PASSED: -2147483648 >> 14 == -131072 (arithmetic)
+PASSED: -2147483648 >> 15 == -65536 (arithmetic)
+PASSED: -2147483648 >> 16 == -32768 (arithmetic)
+PASSED: -2147483648 >> 17 == -16384 (arithmetic)
+PASSED: -2147483648 >> 18 == -8192 (arithmetic)
+PASSED: -2147483648 >> 19 == -4096 (arithmetic)
+PASSED: -2147483648 >> 20 == -2048 (arithmetic)
+PASSED: -2147483648 >> 21 == -1024 (arithmetic)
+PASSED: -2147483648 >> 22 == -512 (arithmetic)
+PASSED: -2147483648 >> 23 == -256 (arithmetic)
+PASSED: -2147483648 >> 24 == -128 (arithmetic)
+PASSED: -2147483648 >> 25 == -64 (arithmetic)
+PASSED: -2147483648 >> 26 == -32 (arithmetic)
+PASSED: -2147483648 >> 27 == -16 (arithmetic)
+PASSED: -2147483648 >> 28 == -8 (arithmetic)
+PASSED: -2147483648 >> 29 == -4 (arithmetic)
+PASSED: -2147483648 >> 30 == -2 (arithmetic)
+PASSED: -2147483648 >> 31 == -1 (arithmetic)
+PASSED: 1 < 2
+PASSED: 1 <= 2
+PASSED: 1 > 2
+PASSED: 1 <= 1
+PASSED: 1 >= 1
+PASSED: 1 == 1
+PASSED: 2 < 4
+PASSED: 2 <= 4
+PASSED: 2 > 4
+PASSED: 2 <= 2
+PASSED: 2 >= 2
+PASSED: 2 == 2
+PASSED: 4 < 8
+PASSED: 4 <= 8
+PASSED: 4 > 8
+PASSED: 4 <= 4
+PASSED: 4 >= 4
+PASSED: 4 == 4
+PASSED: 8 < 16
+PASSED: 8 <= 16
+PASSED: 8 > 16
+PASSED: 8 <= 8
+PASSED: 8 >= 8
+PASSED: 8 == 8
+PASSED: 16 < 32
+PASSED: 16 <= 32
+PASSED: 16 > 32
+PASSED: 16 <= 16
+PASSED: 16 >= 16
+PASSED: 16 == 16
+PASSED: 32 < 64
+PASSED: 32 <= 64
+PASSED: 32 > 64
+PASSED: 32 <= 32
+PASSED: 32 >= 32
+PASSED: 32 == 32
+PASSED: 64 < 128
+PASSED: 64 <= 128
+PASSED: 64 > 128
+PASSED: 64 <= 64
+PASSED: 64 >= 64
+PASSED: 64 == 64
+PASSED: 128 < 256
+PASSED: 128 <= 256
+PASSED: 128 > 256
+PASSED: 128 <= 128
+PASSED: 128 >= 128
+PASSED: 128 == 128
+PASSED: 256 < 512
+PASSED: 256 <= 512
+PASSED: 256 > 512
+PASSED: 256 <= 256
+PASSED: 256 >= 256
+PASSED: 256 == 256
+PASSED: 512 < 1024
+PASSED: 512 <= 1024
+PASSED: 512 > 1024
+PASSED: 512 <= 512
+PASSED: 512 >= 512
+PASSED: 512 == 512
+PASSED: 1024 < 2048
+PASSED: 1024 <= 2048
+PASSED: 1024 > 2048
+PASSED: 1024 <= 1024
+PASSED: 1024 >= 1024
+PASSED: 1024 == 1024
+PASSED: 2048 < 4096
+PASSED: 2048 <= 4096
+PASSED: 2048 > 4096
+PASSED: 2048 <= 2048
+PASSED: 2048 >= 2048
+PASSED: 2048 == 2048
+PASSED: 4096 < 8192
+PASSED: 4096 <= 8192
+PASSED: 4096 > 8192
+PASSED: 4096 <= 4096
+PASSED: 4096 >= 4096
+PASSED: 4096 == 4096
+PASSED: 8192 < 16384
+PASSED: 8192 <= 16384
+PASSED: 8192 > 16384
+PASSED: 8192 <= 8192
+PASSED: 8192 >= 8192
+PASSED: 8192 == 8192
+PASSED: 16384 < 32768
+PASSED: 16384 <= 32768
+PASSED: 16384 > 32768
+PASSED: 16384 <= 16384
+PASSED: 16384 >= 16384
+PASSED: 16384 == 16384
+PASSED: 32768 < 65536
+PASSED: 32768 <= 65536
+PASSED: 32768 > 65536
+PASSED: 32768 <= 32768
+PASSED: 32768 >= 32768
+PASSED: 32768 == 32768
+PASSED: 65536 < 131072
+PASSED: 65536 <= 131072
+PASSED: 65536 > 131072
+PASSED: 65536 <= 65536
+PASSED: 65536 >= 65536
+PASSED: 65536 == 65536
+PASSED: 131072 < 262144
+PASSED: 131072 <= 262144
+PASSED: 131072 > 262144
+PASSED: 131072 <= 131072
+PASSED: 131072 >= 131072
+PASSED: 131072 == 131072
+PASSED: 262144 < 524288
+PASSED: 262144 <= 524288
+PASSED: 262144 > 524288
+PASSED: 262144 <= 262144
+PASSED: 262144 >= 262144
+PASSED: 262144 == 262144
+PASSED: 524288 < 1048576
+PASSED: 524288 <= 1048576
+PASSED: 524288 > 1048576
+PASSED: 524288 <= 524288
+PASSED: 524288 >= 524288
+PASSED: 524288 == 524288
+PASSED: 1048576 < 2097152
+PASSED: 1048576 <= 2097152
+PASSED: 1048576 > 2097152
+PASSED: 1048576 <= 1048576
+PASSED: 1048576 >= 1048576
+PASSED: 1048576 == 1048576
+PASSED: 2097152 < 4194304
+PASSED: 2097152 <= 4194304
+PASSED: 2097152 > 4194304
+PASSED: 2097152 <= 2097152
+PASSED: 2097152 >= 2097152
+PASSED: 2097152 == 2097152
+PASSED: 4194304 < 8388608
+PASSED: 4194304 <= 8388608
+PASSED: 4194304 > 8388608
+PASSED: 4194304 <= 4194304
+PASSED: 4194304 >= 4194304
+PASSED: 4194304 == 4194304
+PASSED: 8388608 < 16777216
+PASSED: 8388608 <= 16777216
+PASSED: 8388608 > 16777216
+PASSED: 8388608 <= 8388608
+PASSED: 8388608 >= 8388608
+PASSED: 8388608 == 8388608
+PASSED: 16777216 < 33554432
+PASSED: 16777216 <= 33554432
+PASSED: 16777216 > 33554432
+PASSED: 16777216 <= 16777216
+PASSED: 16777216 >= 16777216
+PASSED: 16777216 == 16777216
+PASSED: 33554432 < 67108864
+PASSED: 33554432 <= 67108864
+PASSED: 33554432 > 67108864
+PASSED: 33554432 <= 33554432
+PASSED: 33554432 >= 33554432
+PASSED: 33554432 == 33554432
+PASSED: 67108864 < 134217728
+PASSED: 67108864 <= 134217728
+PASSED: 67108864 > 134217728
+PASSED: 67108864 <= 67108864
+PASSED: 67108864 >= 67108864
+PASSED: 67108864 == 67108864
+PASSED: 134217728 < 268435456
+PASSED: 134217728 <= 268435456
+PASSED: 134217728 > 268435456
+PASSED: 134217728 <= 134217728
+PASSED: 134217728 >= 134217728
+PASSED: 134217728 == 134217728
+PASSED: 268435456 < 536870912
+PASSED: 268435456 <= 536870912
+PASSED: 268435456 > 536870912
+PASSED: 268435456 <= 268435456
+PASSED: 268435456 >= 268435456
+PASSED: 268435456 == 268435456
+PASSED: 536870912 < 1073741824
+PASSED: 536870912 <= 1073741824
+PASSED: 536870912 > 1073741824
+PASSED: 536870912 <= 536870912
+PASSED: 536870912 >= 536870912
+PASSED: 536870912 == 536870912
diff --git a/testsuite/tests/primops/should_run/all.T b/testsuite/tests/primops/should_run/all.T
index 954cc30ef9..cad58c1909 100644
--- a/testsuite/tests/primops/should_run/all.T
+++ b/testsuite/tests/primops/should_run/all.T
@@ -37,3 +37,4 @@ test('ShrinkSmallMutableArrayB', normal, compile_and_run, [''])
test('T14664', normal, compile_and_run, [''])
test('CStringLength', normal, compile_and_run, ['-O2'])
test('NonNativeSwitch', normal, compile_and_run, ['-O2'])
+test('Sized', normal, compile_and_run, [''])