summaryrefslogtreecommitdiff
path: root/testsuite/tests/primops/should_run/ArithInt8.hs
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/tests/primops/should_run/ArithInt8.hs')
-rw-r--r--testsuite/tests/primops/should_run/ArithInt8.hs201
1 files changed, 0 insertions, 201 deletions
diff --git a/testsuite/tests/primops/should_run/ArithInt8.hs b/testsuite/tests/primops/should_run/ArithInt8.hs
deleted file mode 100644
index 77f4cea21a..0000000000
--- a/testsuite/tests/primops/should_run/ArithInt8.hs
+++ /dev/null
@@ -1,201 +0,0 @@
-{-# LANGUAGE BangPatterns #-}
-{-# LANGUAGE MagicHash #-}
-{-# LANGUAGE UnboxedTuples #-}
-
-module Main where
-
-import Data.Int
-import Data.List
-import GHC.Prim
-import GHC.Exts
-
-main :: IO ()
-main = do
-
- --
- -- Check if passing Int8# on the stack works (16 parameter function will
- -- need to use stack for some of the them)
- --
- let input =
- [ ( (a + 0), (a + 1), (a + 2), (a + 3),
- (a + 4), (a + 5), (a + 6), (a + 7),
- (a + 8), (a + 9), (a + 10), (a + 11),
- (a + 12), (a + 13), (a + 14), (a + 15) )
- | a <- allInt8
- ]
- expected =
- [ toInt8
- (a + b + c + d + e + f + g + h +
- i + j + k + l + m + n + o + p)
- | (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) <- input
- ]
- actual =
- [ addMany a b c d e f g h i j k l m n o p
- | (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) <- input
- ]
- checkResults "passing Int8# on the stack" input expected actual
-
- --
- -- negateInt8#
- --
- let input = allInt8
- expected = [ toInt8 (negate a) | a <- input ]
- actual = [ apply1 negateInt8# a | a <- input ]
- checkResults "negateInt8#" input expected actual
-
- --
- -- plusInt8#
- --
- let input = [ (a, b) | a <- allInt8, b <- allInt8 ]
- expected = [ toInt8 (a + b) | (a, b) <- input ]
- actual = [ apply2 plusInt8# a b | (a, b) <- input ]
- checkResults "plusInt8#" input expected actual
-
- --
- -- subInt8#
- --
- let input = [ (a, b) | a <- allInt8, b <- allInt8 ]
- expected = [ toInt8 (a - b) | (a, b) <- input ]
- actual = [ apply2 subInt8# a b | (a, b) <- input ]
- checkResults "subInt8#" input expected actual
-
- --
- -- timesInt8#
- --
- let input = [ (a, b) | a <- allInt8, b <- allInt8 ]
- expected = [ toInt8 (a * b) | (a, b) <- input ]
- actual = [ apply2 timesInt8# a b | (a, b) <- input ]
- checkResults "timesInt8#" input expected actual
-
- --
- -- remInt8#
- --
- let input =
- [ (a, b) | a <- allInt8, b <- allInt8
- -- Don't divide by 0 or cause overflow
- , b /= 0, not (a == -128 && b == -1)
- ]
- expected = [ toInt8 (a `rem` b) | (a, b) <- input ]
- actual = [ apply2 remInt8# a b | (a, b) <- input ]
- checkResults "remInt8#" input expected actual
-
- --
- -- quotInt8#
- --
- let input =
- [ (a, b) | a <- allInt8, b <- allInt8
- , b /= 0, not (a == -128 && b == -1)
- ]
- expected = [ toInt8 (a `quot` b) | (a, b) <- input ]
- actual = [ apply2 quotInt8# a b | (a, b) <- input ]
- checkResults "quotInt8#" input expected actual
-
- --
- -- quotRemInt8#
- --
- let input =
- [ (a, b) | a <- allInt8, b <- allInt8
- , b /= 0, not (a == -128 && b == -1)
- ]
- expected =
- [ (toInt8 q, toInt8 r) | (a, b) <- input
- , let (q, r) = a `quotRem` b
- ]
- actual = [ apply3 quotRemInt8# a b | (a, b) <- input ]
- checkResults "quotRemInt8#" input expected actual
-
-
-checkResults
- :: (Eq a, Eq b, Show a, Show b) => String -> [a] -> [b] -> [b] -> IO ()
-checkResults test inputs expected actual =
- case findIndex (\(e, a) -> e /= a) (zip expected actual) of
- Nothing -> putStrLn $ "Pass: " ++ test
- Just i -> error $
- "FAILED: " ++ test ++ " for input: " ++ show (inputs !! i)
- ++ " expected: " ++ show (expected !! i)
- ++ " but got: " ++ show (actual !! i)
-
-allInt8 :: [Int]
-allInt8 = [ minInt8 .. maxInt8 ]
-
-minInt8 :: Int
-minInt8 = fromIntegral (minBound :: Int8)
-
-maxInt8 :: Int
-maxInt8 = fromIntegral (maxBound :: Int8)
-
-toInt8 :: Int -> Int
-toInt8 a = fromIntegral (fromIntegral a :: Int8)
-
-addMany#
- :: Int8# -> Int8# -> Int8# -> Int8#
- -> Int8# -> Int8# -> Int8# -> Int8#
- -> Int8# -> Int8# -> Int8# -> Int8#
- -> Int8# -> Int8# -> Int8# -> Int8#
- -> Int8#
-addMany# a b c d e f g h i j k l m n o p =
- a `plusInt8#` b `plusInt8#` c `plusInt8#` d `plusInt8#`
- e `plusInt8#` f `plusInt8#` g `plusInt8#` h `plusInt8#`
- i `plusInt8#` j `plusInt8#` k `plusInt8#` l `plusInt8#`
- m `plusInt8#` n `plusInt8#` o `plusInt8#` p
-{-# NOINLINE addMany# #-}
-
-addMany
- :: Int -> Int -> Int -> Int
- -> Int -> Int -> Int -> Int
- -> Int -> Int -> Int -> Int
- -> Int -> Int -> Int -> Int
- -> Int
-addMany (I# a) (I# b) (I# c) (I# d)
- (I# e) (I# f) (I# g) (I# h)
- (I# i) (I# j) (I# k) (I# l)
- (I# m) (I# n) (I# o) (I# p)
- = I# (extendInt8# int8)
- where
- !int8 = addMany#
- (narrowInt8# a) (narrowInt8# b) (narrowInt8# c) (narrowInt8# d)
- (narrowInt8# e) (narrowInt8# f) (narrowInt8# g) (narrowInt8# h)
- (narrowInt8# i) (narrowInt8# j) (narrowInt8# k) (narrowInt8# l)
- (narrowInt8# m) (narrowInt8# n) (narrowInt8# o) (narrowInt8# p)
-{-# NOINLINE addMany #-}
-
--- Convenient and also tests higher order functions on Int8#
-apply1 :: (Int8# -> Int8#) -> Int -> Int
-apply1 opToTest (I# a) = I# (extendInt8# (opToTest (narrowInt8# a)))
-{-# NOINLINE apply1 #-}
-
-apply2 :: (Int8# -> Int8# -> Int8#) -> Int -> Int -> Int
-apply2 opToTest (I# a) (I# b) =
- let (# sa, sb #) = (# narrowInt8# a, narrowInt8# b #)
- r = opToTest sa sb
- in I# (extendInt8# r)
-{-# NOINLINE apply2 #-}
-
-apply3 :: (Int8# -> Int8# -> (# Int8#, Int8# #)) -> Int -> Int -> (Int, Int)
-apply3 opToTest (I# a) (I# b) =
- let (# sa, sb #) = (# narrowInt8# a, narrowInt8# b #)
- (# ra, rb #) = opToTest sa sb
- in (I# (extendInt8# ra), I# (extendInt8# rb))
-{-# NOINLINE apply3 #-}
-
-instance
- (Eq a, Eq b, Eq c, Eq d, Eq e, Eq f, Eq g, Eq h,
- Eq i, Eq j, Eq k, Eq l, Eq m, Eq n, Eq o, Eq p)
- => Eq (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) where
- (a1, b1, c1, d1, e1, f1, g1, h1, i1, j1, k1, l1, m1, n1, o1, p1) ==
- (a2, b2, c2, d2, e2, f2, g2, h2, i2, j2, k2, l2, m2, n2, o2, p2) =
- a1 == a2 && b1 == b2 && c1 == c2 && d1 == d2 &&
- e1 == e2 && f1 == f2 && g1 == g2 && h1 == h2 &&
- i1 == i2 && j1 == j2 && k1 == k2 && l1 == l2 &&
- m1 == m2 && n1 == n2 && o1 == o2 && p1 == p2
-
-instance
- (Show a, Show b, Show c, Show d, Show e, Show f, Show g, Show h,
- Show i, Show j, Show k, Show l, Show m, Show n, Show o, Show p)
- => Show (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) where
- show (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) =
- "(" ++ show a ++ "," ++ show b ++ "," ++ show c ++ "," ++ show d ++
- "," ++ show e ++ "," ++ show f ++ "," ++ show g ++ "," ++ show h ++
- "," ++ show i ++ "," ++ show j ++ "," ++ show k ++ "," ++ show l ++
- "," ++ show m ++ "," ++ show n ++ "," ++ show o ++ "," ++ show p ++
- ")"