[Git][ghc/ghc][wip/foundation-improve-coverage] testsuite: improve coverage of foundation test
Cheng Shao pushed to branch wip/foundation-improve-coverage at Glasgow Haskell Compiler / GHC Commits: facda723 by Cheng Shao at 2025-12-17T20:33:03+01:00 testsuite: improve coverage of foundation test This patch refactors the `foundation` test a bit to improve coverage: - Instead of using a hard-coded seed, a random seed is now taken from the command line, and printed upon test failure. This improves test coverage over many future CI runs, and shall a failure occur, the seed is available in the CI log for local reproduction. - The iterations count is bumped to 1000 instead of 100, similar to the bump in `test-primops`. Runtime timeout is bumped 2x just to be safe. - Improve `newLCGGen` by using non-atomic loads/stores on a `MutableByteArray#` for storing mutable `Word64`, this test doesn't use parallelism in the first place - Fixed a few compiler warnings and removed redundant pragmas and imports Co-authored-by: Codex <codex@openai.com> - - - - - 3 changed files: - testsuite/tests/numeric/should_run/all.T - testsuite/tests/numeric/should_run/foundation.hs - testsuite/tests/numeric/should_run/foundation.stdout Changes: ===================================== testsuite/tests/numeric/should_run/all.T ===================================== @@ -3,6 +3,8 @@ # extra run flags # expected process return value, if not zero +import random + test('arith001', normal, compile_and_run, ['']) test('arith002', normal, compile_and_run, ['']) test('arith003', normal, compile_and_run, ['']) @@ -82,7 +84,7 @@ test('IntegerToFloat', normal, compile_and_run, ['']) test('T20291', normal, compile_and_run, ['']) test('T22282', normal, compile_and_run, ['']) test('T22671', js_fragile(24259), compile_and_run, ['']) -test('foundation', [when(js_arch(), run_timeout_multiplier(2)), js_fragile(24259), extra_ways(['optasm','ghci','ghci-opt'])], compile_and_run, ['-package transformers -fno-break-points']) +test('foundation', [run_timeout_multiplier(2), js_fragile(24259), extra_ways(['optasm','ghci','ghci-opt']), extra_run_opts(str(random.getrandbits(64)))], compile_and_run, ['-fno-break-points']) test('T24066', normal, compile_and_run, ['']) test('div01', normal, compile_and_run, ['']) test('T24245', normal, compile_and_run, ['']) ===================================== testsuite/tests/numeric/should_run/foundation.hs ===================================== @@ -10,9 +10,7 @@ compare the result of the primop wrappers with the results of interpretation. -} -{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE OverloadedStrings #-} -{-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeAbstractions #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE DerivingStrategies #-} @@ -25,28 +23,23 @@ module Main ( main ) where +import Data.Array.Byte import Data.Bits (Bits((.&.), bit), FiniteBits, finiteBitSize) import Data.Word import Data.Int import GHC.Natural import Data.Typeable -import Data.Proxy import GHC.Int import GHC.Word -import GHC.Word import Data.Function import GHC.Prim import Control.Monad.Reader -import System.IO -import Foreign.Marshal.Alloc -import Foreign.Storable -import Foreign.Ptr import Data.List (intercalate) -import Data.IORef +import System.Environment (getArgs) +import Text.Read (readMaybe) import Unsafe.Coerce import GHC.Types import Data.Char -import Data.Semigroup import System.Exit import qualified GHC.Internal.PrimopWrappers as Wrapper @@ -194,11 +187,16 @@ newtype LCGGen = LCGGen { randomWord64 :: IO Word64 } data LCGParams = LCGParams { seed :: Word64, a :: Word64, c :: Word64, m :: Word64 } newLCGGen :: LCGParams -> IO LCGGen -newLCGGen LCGParams{..} = do - var <- newIORef (fromIntegral seed) - return $ LCGGen $ do - atomicModifyIORef' var (\old_v -> let new_val = (old_v * a + c) `mod` m in (new_val, new_val)) - +newLCGGen LCGParams {seed = W64# seed#, ..} = do + MutableByteArray mba# <- IO $ \s0 -> case newByteArray# 8# s0 of + (# s1, mba# #) -> case writeWord64Array# mba# 0# seed# s1 of + s2 -> (# s2, MutableByteArray mba# #) + pure $ LCGGen $ IO $ \s0 -> case readWord64Array# mba# 0# s0 of + (# s1, old_val# #) -> + let old_val = W64# old_val# + !new_val@(W64# new_val#) = (old_val * a + c) `mod` m + in case writeWord64Array# mba# 0# new_val# s1 of + s2 -> (# s2, new_val #) runPropertyCheck (PropertyBinaryOp res desc s1 s2) = if res then return Success @@ -211,7 +209,7 @@ runPropertyCheck (PropertyAnd a1 a2) = (<>) <$> runPropertyCheck a1 <*> runPrope runProperty :: Property -> ReaderT RunS IO Result runProperty (Prop p) = do - let iterations = 100 + let iterations = 1000 :: Int loop iterations iterations where loop iterations 0 = do @@ -257,14 +255,15 @@ runTestInternal (Property name p) = do nest label $ runProperty (property p) -runTests :: Test -> IO () -runTests t = do +runTests :: Word64 -> Test -> IO () +runTests seed t = do -- These params are the same ones as glibc uses. - h <- newLCGGen (LCGParams { seed = 1238123213, m = 2^31, a = 1103515245, c = 12345 }) + h <- newLCGGen (LCGParams { seed, m = 2 ^ (31 :: Int), a = 1103515245, c = 12345 }) res <- runReaderT (runTestInternal t) (RunS 0 h []) case res of Success -> return () Failure tests -> do + putStrLn $ "Seed: " ++ show seed putStrLn $ "These tests failed: \n" ++ intercalate " \n" (map (showStack 0 . reverse) tests) exitFailure @@ -455,7 +454,19 @@ instance TestPrimop LowerBitsAreDefined where twoNonZero :: (a -> a -> b) -> a -> NonZero a -> b twoNonZero f x (NonZero y) = f x y -main = runTests (Group "ALL" [testNumberRefs, testPrimops]) +getSeedFromArgs :: IO Word64 +getSeedFromArgs = do + args <- getArgs + case args of + [arg] -> case readMaybe arg of + Just seed -> pure seed + Nothing -> die $ "Invalid seed (expected Word64): " ++ show arg + _ -> die "Usage: foundation <seed>" + +main :: IO () +main = do + seed <- getSeedFromArgs + runTests seed (Group "ALL" [testNumberRefs, testPrimops]) -- Test an interpreted primop vs a compiled primop testPrimops = Group "primop" ===================================== testsuite/tests/numeric/should_run/foundation.stdout ===================================== @@ -3,1048 +3,1048 @@ Group ALL Group Int Group Integral Running FromIntegral(Integer(a)) == a - Passed 100 iterations + Passed 1000 iterations Group Property Running Eq - Passed 100 iterations + Passed 1000 iterations Running Show - Passed 100 iterations + Passed 1000 iterations Running Ord - Passed 100 iterations + Passed 1000 iterations Running < - Passed 100 iterations + Passed 1000 iterations Group Additive Running a + azero == a - Passed 100 iterations + Passed 1000 iterations Running azero + a == a - Passed 100 iterations + Passed 1000 iterations Running a + b == b + a - Passed 100 iterations + Passed 1000 iterations Group Multiplicative Running a * 1 == a - Passed 100 iterations + Passed 1000 iterations Running 1 * a == a - Passed 100 iterations + Passed 1000 iterations Running multiplication commutative - Passed 100 iterations + Passed 1000 iterations Running a * b == Integer(a) * Integer(b) - Passed 100 iterations + Passed 1000 iterations Group Divisible Running (x `div` y) * y + (x `mod` y) == x - Passed 100 iterations + Passed 1000 iterations Group Precedence Running + and - (1) - Passed 100 iterations + Passed 1000 iterations Running + and - (2) - Passed 100 iterations + Passed 1000 iterations Running + and * (1) - Passed 100 iterations + Passed 1000 iterations Running + and * (2) - Passed 100 iterations + Passed 1000 iterations Running - and * (1) - Passed 100 iterations + Passed 1000 iterations Running - and * (2) - Passed 100 iterations + Passed 1000 iterations Running * and ^ (1) - Passed 100 iterations + Passed 1000 iterations Running * and ^ (2) - Passed 100 iterations + Passed 1000 iterations Group Int8 Group Integral Running FromIntegral(Integer(a)) == a - Passed 100 iterations + Passed 1000 iterations Group Property Running Eq - Passed 100 iterations + Passed 1000 iterations Running Show - Passed 100 iterations + Passed 1000 iterations Running Ord - Passed 100 iterations + Passed 1000 iterations Running < - Passed 100 iterations + Passed 1000 iterations Group Additive Running a + azero == a - Passed 100 iterations + Passed 1000 iterations Running azero + a == a - Passed 100 iterations + Passed 1000 iterations Running a + b == b + a - Passed 100 iterations + Passed 1000 iterations Group Multiplicative Running a * 1 == a - Passed 100 iterations + Passed 1000 iterations Running 1 * a == a - Passed 100 iterations + Passed 1000 iterations Running multiplication commutative - Passed 100 iterations + Passed 1000 iterations Running a * b == Integer(a) * Integer(b) - Passed 100 iterations + Passed 1000 iterations Group Divisible Running (x `div` y) * y + (x `mod` y) == x - Passed 100 iterations + Passed 1000 iterations Group Precedence Running + and - (1) - Passed 100 iterations + Passed 1000 iterations Running + and - (2) - Passed 100 iterations + Passed 1000 iterations Running + and * (1) - Passed 100 iterations + Passed 1000 iterations Running + and * (2) - Passed 100 iterations + Passed 1000 iterations Running - and * (1) - Passed 100 iterations + Passed 1000 iterations Running - and * (2) - Passed 100 iterations + Passed 1000 iterations Running * and ^ (1) - Passed 100 iterations + Passed 1000 iterations Running * and ^ (2) - Passed 100 iterations + Passed 1000 iterations Group Int16 Group Integral Running FromIntegral(Integer(a)) == a - Passed 100 iterations + Passed 1000 iterations Group Property Running Eq - Passed 100 iterations + Passed 1000 iterations Running Show - Passed 100 iterations + Passed 1000 iterations Running Ord - Passed 100 iterations + Passed 1000 iterations Running < - Passed 100 iterations + Passed 1000 iterations Group Additive Running a + azero == a - Passed 100 iterations + Passed 1000 iterations Running azero + a == a - Passed 100 iterations + Passed 1000 iterations Running a + b == b + a - Passed 100 iterations + Passed 1000 iterations Group Multiplicative Running a * 1 == a - Passed 100 iterations + Passed 1000 iterations Running 1 * a == a - Passed 100 iterations + Passed 1000 iterations Running multiplication commutative - Passed 100 iterations + Passed 1000 iterations Running a * b == Integer(a) * Integer(b) - Passed 100 iterations + Passed 1000 iterations Group Divisible Running (x `div` y) * y + (x `mod` y) == x - Passed 100 iterations + Passed 1000 iterations Group Precedence Running + and - (1) - Passed 100 iterations + Passed 1000 iterations Running + and - (2) - Passed 100 iterations + Passed 1000 iterations Running + and * (1) - Passed 100 iterations + Passed 1000 iterations Running + and * (2) - Passed 100 iterations + Passed 1000 iterations Running - and * (1) - Passed 100 iterations + Passed 1000 iterations Running - and * (2) - Passed 100 iterations + Passed 1000 iterations Running * and ^ (1) - Passed 100 iterations + Passed 1000 iterations Running * and ^ (2) - Passed 100 iterations + Passed 1000 iterations Group Int32 Group Integral Running FromIntegral(Integer(a)) == a - Passed 100 iterations + Passed 1000 iterations Group Property Running Eq - Passed 100 iterations + Passed 1000 iterations Running Show - Passed 100 iterations + Passed 1000 iterations Running Ord - Passed 100 iterations + Passed 1000 iterations Running < - Passed 100 iterations + Passed 1000 iterations Group Additive Running a + azero == a - Passed 100 iterations + Passed 1000 iterations Running azero + a == a - Passed 100 iterations + Passed 1000 iterations Running a + b == b + a - Passed 100 iterations + Passed 1000 iterations Group Multiplicative Running a * 1 == a - Passed 100 iterations + Passed 1000 iterations Running 1 * a == a - Passed 100 iterations + Passed 1000 iterations Running multiplication commutative - Passed 100 iterations + Passed 1000 iterations Running a * b == Integer(a) * Integer(b) - Passed 100 iterations + Passed 1000 iterations Group Divisible Running (x `div` y) * y + (x `mod` y) == x - Passed 100 iterations + Passed 1000 iterations Group Precedence Running + and - (1) - Passed 100 iterations + Passed 1000 iterations Running + and - (2) - Passed 100 iterations + Passed 1000 iterations Running + and * (1) - Passed 100 iterations + Passed 1000 iterations Running + and * (2) - Passed 100 iterations + Passed 1000 iterations Running - and * (1) - Passed 100 iterations + Passed 1000 iterations Running - and * (2) - Passed 100 iterations + Passed 1000 iterations Running * and ^ (1) - Passed 100 iterations + Passed 1000 iterations Running * and ^ (2) - Passed 100 iterations + Passed 1000 iterations Group Int64 Group Integral Running FromIntegral(Integer(a)) == a - Passed 100 iterations + Passed 1000 iterations Group Property Running Eq - Passed 100 iterations + Passed 1000 iterations Running Show - Passed 100 iterations + Passed 1000 iterations Running Ord - Passed 100 iterations + Passed 1000 iterations Running < - Passed 100 iterations + Passed 1000 iterations Group Additive Running a + azero == a - Passed 100 iterations + Passed 1000 iterations Running azero + a == a - Passed 100 iterations + Passed 1000 iterations Running a + b == b + a - Passed 100 iterations + Passed 1000 iterations Group Multiplicative Running a * 1 == a - Passed 100 iterations + Passed 1000 iterations Running 1 * a == a - Passed 100 iterations + Passed 1000 iterations Running multiplication commutative - Passed 100 iterations + Passed 1000 iterations Running a * b == Integer(a) * Integer(b) - Passed 100 iterations + Passed 1000 iterations Group Divisible Running (x `div` y) * y + (x `mod` y) == x - Passed 100 iterations + Passed 1000 iterations Group Precedence Running + and - (1) - Passed 100 iterations + Passed 1000 iterations Running + and - (2) - Passed 100 iterations + Passed 1000 iterations Running + and * (1) - Passed 100 iterations + Passed 1000 iterations Running + and * (2) - Passed 100 iterations + Passed 1000 iterations Running - and * (1) - Passed 100 iterations + Passed 1000 iterations Running - and * (2) - Passed 100 iterations + Passed 1000 iterations Running * and ^ (1) - Passed 100 iterations + Passed 1000 iterations Running * and ^ (2) - Passed 100 iterations + Passed 1000 iterations Group Integer Group Integral Running FromIntegral(Integer(a)) == a - Passed 100 iterations + Passed 1000 iterations Group Property Running Eq - Passed 100 iterations + Passed 1000 iterations Running Show - Passed 100 iterations + Passed 1000 iterations Running Ord - Passed 100 iterations + Passed 1000 iterations Running < - Passed 100 iterations + Passed 1000 iterations Group Additive Running a + azero == a - Passed 100 iterations + Passed 1000 iterations Running azero + a == a - Passed 100 iterations + Passed 1000 iterations Running a + b == b + a - Passed 100 iterations + Passed 1000 iterations Group Multiplicative Running a * 1 == a - Passed 100 iterations + Passed 1000 iterations Running 1 * a == a - Passed 100 iterations + Passed 1000 iterations Running multiplication commutative - Passed 100 iterations + Passed 1000 iterations Running a * b == Integer(a) * Integer(b) - Passed 100 iterations + Passed 1000 iterations Group Divisible Running (x `div` y) * y + (x `mod` y) == x - Passed 100 iterations + Passed 1000 iterations Group Precedence Running + and - (1) - Passed 100 iterations + Passed 1000 iterations Running + and - (2) - Passed 100 iterations + Passed 1000 iterations Running + and * (1) - Passed 100 iterations + Passed 1000 iterations Running + and * (2) - Passed 100 iterations + Passed 1000 iterations Running - and * (1) - Passed 100 iterations + Passed 1000 iterations Running - and * (2) - Passed 100 iterations + Passed 1000 iterations Running * and ^ (1) - Passed 100 iterations + Passed 1000 iterations Running * and ^ (2) - Passed 100 iterations + Passed 1000 iterations Group Word Group Integral Running FromIntegral(Integer(a)) == a - Passed 100 iterations + Passed 1000 iterations Group Property Running Eq - Passed 100 iterations + Passed 1000 iterations Running Show - Passed 100 iterations + Passed 1000 iterations Running Ord - Passed 100 iterations + Passed 1000 iterations Running < - Passed 100 iterations + Passed 1000 iterations Group Additive Running a + azero == a - Passed 100 iterations + Passed 1000 iterations Running azero + a == a - Passed 100 iterations + Passed 1000 iterations Running a + b == b + a - Passed 100 iterations + Passed 1000 iterations Group Multiplicative Running a * 1 == a - Passed 100 iterations + Passed 1000 iterations Running 1 * a == a - Passed 100 iterations + Passed 1000 iterations Running multiplication commutative - Passed 100 iterations + Passed 1000 iterations Running a * b == Integer(a) * Integer(b) - Passed 100 iterations + Passed 1000 iterations Group Divisible Running (x `div` y) * y + (x `mod` y) == x - Passed 100 iterations + Passed 1000 iterations Group Precedence Running + and - (1) - Passed 100 iterations + Passed 1000 iterations Running + and - (2) - Passed 100 iterations + Passed 1000 iterations Running + and * (1) - Passed 100 iterations + Passed 1000 iterations Running + and * (2) - Passed 100 iterations + Passed 1000 iterations Running - and * (1) - Passed 100 iterations + Passed 1000 iterations Running - and * (2) - Passed 100 iterations + Passed 1000 iterations Running * and ^ (1) - Passed 100 iterations + Passed 1000 iterations Running * and ^ (2) - Passed 100 iterations + Passed 1000 iterations Group Word8 Group Integral Running FromIntegral(Integer(a)) == a - Passed 100 iterations + Passed 1000 iterations Group Property Running Eq - Passed 100 iterations + Passed 1000 iterations Running Show - Passed 100 iterations + Passed 1000 iterations Running Ord - Passed 100 iterations + Passed 1000 iterations Running < - Passed 100 iterations + Passed 1000 iterations Group Additive Running a + azero == a - Passed 100 iterations + Passed 1000 iterations Running azero + a == a - Passed 100 iterations + Passed 1000 iterations Running a + b == b + a - Passed 100 iterations + Passed 1000 iterations Group Multiplicative Running a * 1 == a - Passed 100 iterations + Passed 1000 iterations Running 1 * a == a - Passed 100 iterations + Passed 1000 iterations Running multiplication commutative - Passed 100 iterations + Passed 1000 iterations Running a * b == Integer(a) * Integer(b) - Passed 100 iterations + Passed 1000 iterations Group Divisible Running (x `div` y) * y + (x `mod` y) == x - Passed 100 iterations + Passed 1000 iterations Group Precedence Running + and - (1) - Passed 100 iterations + Passed 1000 iterations Running + and - (2) - Passed 100 iterations + Passed 1000 iterations Running + and * (1) - Passed 100 iterations + Passed 1000 iterations Running + and * (2) - Passed 100 iterations + Passed 1000 iterations Running - and * (1) - Passed 100 iterations + Passed 1000 iterations Running - and * (2) - Passed 100 iterations + Passed 1000 iterations Running * and ^ (1) - Passed 100 iterations + Passed 1000 iterations Running * and ^ (2) - Passed 100 iterations + Passed 1000 iterations Group Word16 Group Integral Running FromIntegral(Integer(a)) == a - Passed 100 iterations + Passed 1000 iterations Group Property Running Eq - Passed 100 iterations + Passed 1000 iterations Running Show - Passed 100 iterations + Passed 1000 iterations Running Ord - Passed 100 iterations + Passed 1000 iterations Running < - Passed 100 iterations + Passed 1000 iterations Group Additive Running a + azero == a - Passed 100 iterations + Passed 1000 iterations Running azero + a == a - Passed 100 iterations + Passed 1000 iterations Running a + b == b + a - Passed 100 iterations + Passed 1000 iterations Group Multiplicative Running a * 1 == a - Passed 100 iterations + Passed 1000 iterations Running 1 * a == a - Passed 100 iterations + Passed 1000 iterations Running multiplication commutative - Passed 100 iterations + Passed 1000 iterations Running a * b == Integer(a) * Integer(b) - Passed 100 iterations + Passed 1000 iterations Group Divisible Running (x `div` y) * y + (x `mod` y) == x - Passed 100 iterations + Passed 1000 iterations Group Precedence Running + and - (1) - Passed 100 iterations + Passed 1000 iterations Running + and - (2) - Passed 100 iterations + Passed 1000 iterations Running + and * (1) - Passed 100 iterations + Passed 1000 iterations Running + and * (2) - Passed 100 iterations + Passed 1000 iterations Running - and * (1) - Passed 100 iterations + Passed 1000 iterations Running - and * (2) - Passed 100 iterations + Passed 1000 iterations Running * and ^ (1) - Passed 100 iterations + Passed 1000 iterations Running * and ^ (2) - Passed 100 iterations + Passed 1000 iterations Group Word32 Group Integral Running FromIntegral(Integer(a)) == a - Passed 100 iterations + Passed 1000 iterations Group Property Running Eq - Passed 100 iterations + Passed 1000 iterations Running Show - Passed 100 iterations + Passed 1000 iterations Running Ord - Passed 100 iterations + Passed 1000 iterations Running < - Passed 100 iterations + Passed 1000 iterations Group Additive Running a + azero == a - Passed 100 iterations + Passed 1000 iterations Running azero + a == a - Passed 100 iterations + Passed 1000 iterations Running a + b == b + a - Passed 100 iterations + Passed 1000 iterations Group Multiplicative Running a * 1 == a - Passed 100 iterations + Passed 1000 iterations Running 1 * a == a - Passed 100 iterations + Passed 1000 iterations Running multiplication commutative - Passed 100 iterations + Passed 1000 iterations Running a * b == Integer(a) * Integer(b) - Passed 100 iterations + Passed 1000 iterations Group Divisible Running (x `div` y) * y + (x `mod` y) == x - Passed 100 iterations + Passed 1000 iterations Group Precedence Running + and - (1) - Passed 100 iterations + Passed 1000 iterations Running + and - (2) - Passed 100 iterations + Passed 1000 iterations Running + and * (1) - Passed 100 iterations + Passed 1000 iterations Running + and * (2) - Passed 100 iterations + Passed 1000 iterations Running - and * (1) - Passed 100 iterations + Passed 1000 iterations Running - and * (2) - Passed 100 iterations + Passed 1000 iterations Running * and ^ (1) - Passed 100 iterations + Passed 1000 iterations Running * and ^ (2) - Passed 100 iterations + Passed 1000 iterations Group Word64 Group Integral Running FromIntegral(Integer(a)) == a - Passed 100 iterations + Passed 1000 iterations Group Property Running Eq - Passed 100 iterations + Passed 1000 iterations Running Show - Passed 100 iterations + Passed 1000 iterations Running Ord - Passed 100 iterations + Passed 1000 iterations Running < - Passed 100 iterations + Passed 1000 iterations Group Additive Running a + azero == a - Passed 100 iterations + Passed 1000 iterations Running azero + a == a - Passed 100 iterations + Passed 1000 iterations Running a + b == b + a - Passed 100 iterations + Passed 1000 iterations Group Multiplicative Running a * 1 == a - Passed 100 iterations + Passed 1000 iterations Running 1 * a == a - Passed 100 iterations + Passed 1000 iterations Running multiplication commutative - Passed 100 iterations + Passed 1000 iterations Running a * b == Integer(a) * Integer(b) - Passed 100 iterations + Passed 1000 iterations Group Divisible Running (x `div` y) * y + (x `mod` y) == x - Passed 100 iterations + Passed 1000 iterations Group Precedence Running + and - (1) - Passed 100 iterations + Passed 1000 iterations Running + and - (2) - Passed 100 iterations + Passed 1000 iterations Running + and * (1) - Passed 100 iterations + Passed 1000 iterations Running + and * (2) - Passed 100 iterations + Passed 1000 iterations Running - and * (1) - Passed 100 iterations + Passed 1000 iterations Running - and * (2) - Passed 100 iterations + Passed 1000 iterations Running * and ^ (1) - Passed 100 iterations + Passed 1000 iterations Running * and ^ (2) - Passed 100 iterations + Passed 1000 iterations Group primop Running gtChar# - Passed 100 iterations + Passed 1000 iterations Running geChar# - Passed 100 iterations + Passed 1000 iterations Running eqChar# - Passed 100 iterations + Passed 1000 iterations Running neChar# - Passed 100 iterations + Passed 1000 iterations Running ltChar# - Passed 100 iterations + Passed 1000 iterations Running leChar# - Passed 100 iterations + Passed 1000 iterations Running ord# - Passed 100 iterations + Passed 1000 iterations Running int8ToInt# - Passed 100 iterations + Passed 1000 iterations Running intToInt8# - Passed 100 iterations + Passed 1000 iterations Running negateInt8# - Passed 100 iterations + Passed 1000 iterations Running plusInt8# - Passed 100 iterations + Passed 1000 iterations Running subInt8# - Passed 100 iterations + Passed 1000 iterations Running timesInt8# - Passed 100 iterations + Passed 1000 iterations Running quotInt8# - Passed 100 iterations + Passed 1000 iterations Running remInt8# - Passed 100 iterations + Passed 1000 iterations Running quotRemInt8# - Passed 100 iterations + Passed 1000 iterations Running uncheckedShiftLInt8# - Passed 100 iterations + Passed 1000 iterations Running uncheckedShiftRAInt8# - Passed 100 iterations + Passed 1000 iterations Running uncheckedShiftRLInt8# - Passed 100 iterations + Passed 1000 iterations Running int8ToWord8# - Passed 100 iterations + Passed 1000 iterations Running eqInt8# - Passed 100 iterations + Passed 1000 iterations Running geInt8# - Passed 100 iterations + Passed 1000 iterations Running gtInt8# - Passed 100 iterations + Passed 1000 iterations Running leInt8# - Passed 100 iterations + Passed 1000 iterations Running ltInt8# - Passed 100 iterations + Passed 1000 iterations Running neInt8# - Passed 100 iterations + Passed 1000 iterations Running word8ToWord# - Passed 100 iterations + Passed 1000 iterations Running wordToWord8# - Passed 100 iterations + Passed 1000 iterations Running plusWord8# - Passed 100 iterations + Passed 1000 iterations Running subWord8# - Passed 100 iterations + Passed 1000 iterations Running timesWord8# - Passed 100 iterations + Passed 1000 iterations Running quotWord8# - Passed 100 iterations + Passed 1000 iterations Running remWord8# - Passed 100 iterations + Passed 1000 iterations Running quotRemWord8# - Passed 100 iterations + Passed 1000 iterations Running andWord8# - Passed 100 iterations + Passed 1000 iterations Running orWord8# - Passed 100 iterations + Passed 1000 iterations Running xorWord8# - Passed 100 iterations + Passed 1000 iterations Running notWord8# - Passed 100 iterations + Passed 1000 iterations Running uncheckedShiftLWord8# - Passed 100 iterations + Passed 1000 iterations Running uncheckedShiftRLWord8# - Passed 100 iterations + Passed 1000 iterations Running word8ToInt8# - Passed 100 iterations + Passed 1000 iterations Running eqWord8# - Passed 100 iterations + Passed 1000 iterations Running geWord8# - Passed 100 iterations + Passed 1000 iterations Running gtWord8# - Passed 100 iterations + Passed 1000 iterations Running leWord8# - Passed 100 iterations + Passed 1000 iterations Running ltWord8# - Passed 100 iterations + Passed 1000 iterations Running neWord8# - Passed 100 iterations + Passed 1000 iterations Running int16ToInt# - Passed 100 iterations + Passed 1000 iterations Running intToInt16# - Passed 100 iterations + Passed 1000 iterations Running negateInt16# - Passed 100 iterations + Passed 1000 iterations Running plusInt16# - Passed 100 iterations + Passed 1000 iterations Running subInt16# - Passed 100 iterations + Passed 1000 iterations Running timesInt16# - Passed 100 iterations + Passed 1000 iterations Running quotInt16# - Passed 100 iterations + Passed 1000 iterations Running remInt16# - Passed 100 iterations + Passed 1000 iterations Running quotRemInt16# - Passed 100 iterations + Passed 1000 iterations Running uncheckedShiftLInt16# - Passed 100 iterations + Passed 1000 iterations Running uncheckedShiftRAInt16# - Passed 100 iterations + Passed 1000 iterations Running uncheckedShiftRLInt16# - Passed 100 iterations + Passed 1000 iterations Running int16ToWord16# - Passed 100 iterations + Passed 1000 iterations Running eqInt16# - Passed 100 iterations + Passed 1000 iterations Running geInt16# - Passed 100 iterations + Passed 1000 iterations Running gtInt16# - Passed 100 iterations + Passed 1000 iterations Running leInt16# - Passed 100 iterations + Passed 1000 iterations Running ltInt16# - Passed 100 iterations + Passed 1000 iterations Running neInt16# - Passed 100 iterations + Passed 1000 iterations Running word16ToWord# - Passed 100 iterations + Passed 1000 iterations Running wordToWord16# - Passed 100 iterations + Passed 1000 iterations Running plusWord16# - Passed 100 iterations + Passed 1000 iterations Running subWord16# - Passed 100 iterations + Passed 1000 iterations Running timesWord16# - Passed 100 iterations + Passed 1000 iterations Running quotWord16# - Passed 100 iterations + Passed 1000 iterations Running remWord16# - Passed 100 iterations + Passed 1000 iterations Running quotRemWord16# - Passed 100 iterations + Passed 1000 iterations Running andWord16# - Passed 100 iterations + Passed 1000 iterations Running orWord16# - Passed 100 iterations + Passed 1000 iterations Running xorWord16# - Passed 100 iterations + Passed 1000 iterations Running notWord16# - Passed 100 iterations + Passed 1000 iterations Running uncheckedShiftLWord16# - Passed 100 iterations + Passed 1000 iterations Running uncheckedShiftRLWord16# - Passed 100 iterations + Passed 1000 iterations Running word16ToInt16# - Passed 100 iterations + Passed 1000 iterations Running eqWord16# - Passed 100 iterations + Passed 1000 iterations Running geWord16# - Passed 100 iterations + Passed 1000 iterations Running gtWord16# - Passed 100 iterations + Passed 1000 iterations Running leWord16# - Passed 100 iterations + Passed 1000 iterations Running ltWord16# - Passed 100 iterations + Passed 1000 iterations Running neWord16# - Passed 100 iterations + Passed 1000 iterations Running int32ToInt# - Passed 100 iterations + Passed 1000 iterations Running intToInt32# - Passed 100 iterations + Passed 1000 iterations Running negateInt32# - Passed 100 iterations + Passed 1000 iterations Running plusInt32# - Passed 100 iterations + Passed 1000 iterations Running subInt32# - Passed 100 iterations + Passed 1000 iterations Running timesInt32# - Passed 100 iterations + Passed 1000 iterations Running quotInt32# - Passed 100 iterations + Passed 1000 iterations Running remInt32# - Passed 100 iterations + Passed 1000 iterations Running quotRemInt32# - Passed 100 iterations + Passed 1000 iterations Running uncheckedShiftLInt32# - Passed 100 iterations + Passed 1000 iterations Running uncheckedShiftRAInt32# - Passed 100 iterations + Passed 1000 iterations Running uncheckedShiftRLInt32# - Passed 100 iterations + Passed 1000 iterations Running int32ToWord32# - Passed 100 iterations + Passed 1000 iterations Running eqInt32# - Passed 100 iterations + Passed 1000 iterations Running geInt32# - Passed 100 iterations + Passed 1000 iterations Running gtInt32# - Passed 100 iterations + Passed 1000 iterations Running leInt32# - Passed 100 iterations + Passed 1000 iterations Running ltInt32# - Passed 100 iterations + Passed 1000 iterations Running neInt32# - Passed 100 iterations + Passed 1000 iterations Running word32ToWord# - Passed 100 iterations + Passed 1000 iterations Running wordToWord32# - Passed 100 iterations + Passed 1000 iterations Running plusWord32# - Passed 100 iterations + Passed 1000 iterations Running subWord32# - Passed 100 iterations + Passed 1000 iterations Running timesWord32# - Passed 100 iterations + Passed 1000 iterations Running quotWord32# - Passed 100 iterations + Passed 1000 iterations Running remWord32# - Passed 100 iterations + Passed 1000 iterations Running quotRemWord32# - Passed 100 iterations + Passed 1000 iterations Running andWord32# - Passed 100 iterations + Passed 1000 iterations Running orWord32# - Passed 100 iterations + Passed 1000 iterations Running xorWord32# - Passed 100 iterations + Passed 1000 iterations Running notWord32# - Passed 100 iterations + Passed 1000 iterations Running uncheckedShiftLWord32# - Passed 100 iterations + Passed 1000 iterations Running uncheckedShiftRLWord32# - Passed 100 iterations + Passed 1000 iterations Running word32ToInt32# - Passed 100 iterations + Passed 1000 iterations Running eqWord32# - Passed 100 iterations + Passed 1000 iterations Running geWord32# - Passed 100 iterations + Passed 1000 iterations Running gtWord32# - Passed 100 iterations + Passed 1000 iterations Running leWord32# - Passed 100 iterations + Passed 1000 iterations Running ltWord32# - Passed 100 iterations + Passed 1000 iterations Running neWord32# - Passed 100 iterations + Passed 1000 iterations Running int64ToInt# - Passed 100 iterations + Passed 1000 iterations Running intToInt64# - Passed 100 iterations + Passed 1000 iterations Running negateInt64# - Passed 100 iterations + Passed 1000 iterations Running plusInt64# - Passed 100 iterations + Passed 1000 iterations Running subInt64# - Passed 100 iterations + Passed 1000 iterations Running timesInt64# - Passed 100 iterations + Passed 1000 iterations Running quotInt64# - Passed 100 iterations + Passed 1000 iterations Running remInt64# - Passed 100 iterations + Passed 1000 iterations Running uncheckedIShiftL64# - Passed 100 iterations + Passed 1000 iterations Running uncheckedIShiftRA64# - Passed 100 iterations + Passed 1000 iterations Running uncheckedIShiftRL64# - Passed 100 iterations + Passed 1000 iterations Running int64ToWord64# - Passed 100 iterations + Passed 1000 iterations Running eqInt64# - Passed 100 iterations + Passed 1000 iterations Running geInt64# - Passed 100 iterations + Passed 1000 iterations Running gtInt64# - Passed 100 iterations + Passed 1000 iterations Running leInt64# - Passed 100 iterations + Passed 1000 iterations Running ltInt64# - Passed 100 iterations + Passed 1000 iterations Running neInt64# - Passed 100 iterations + Passed 1000 iterations Running word64ToWord# - Passed 100 iterations + Passed 1000 iterations Running wordToWord64# - Passed 100 iterations + Passed 1000 iterations Running plusWord64# - Passed 100 iterations + Passed 1000 iterations Running subWord64# - Passed 100 iterations + Passed 1000 iterations Running timesWord64# - Passed 100 iterations + Passed 1000 iterations Running quotWord64# - Passed 100 iterations + Passed 1000 iterations Running remWord64# - Passed 100 iterations + Passed 1000 iterations Running and64# - Passed 100 iterations + Passed 1000 iterations Running or64# - Passed 100 iterations + Passed 1000 iterations Running xor64# - Passed 100 iterations + Passed 1000 iterations Running not64# - Passed 100 iterations + Passed 1000 iterations Running uncheckedShiftL64# - Passed 100 iterations + Passed 1000 iterations Running uncheckedShiftRL64# - Passed 100 iterations + Passed 1000 iterations Running word64ToInt64# - Passed 100 iterations + Passed 1000 iterations Running eqWord64# - Passed 100 iterations + Passed 1000 iterations Running geWord64# - Passed 100 iterations + Passed 1000 iterations Running gtWord64# - Passed 100 iterations + Passed 1000 iterations Running leWord64# - Passed 100 iterations + Passed 1000 iterations Running ltWord64# - Passed 100 iterations + Passed 1000 iterations Running neWord64# - Passed 100 iterations + Passed 1000 iterations Running +# - Passed 100 iterations + Passed 1000 iterations Running -# - Passed 100 iterations + Passed 1000 iterations Running *# - Passed 100 iterations + Passed 1000 iterations Running timesInt2# - Passed 100 iterations + Passed 1000 iterations Running mulIntMayOflo# - Passed 100 iterations + Passed 1000 iterations Running quotInt# - Passed 100 iterations + Passed 1000 iterations Running remInt# - Passed 100 iterations + Passed 1000 iterations Running quotRemInt# - Passed 100 iterations + Passed 1000 iterations Running andI# - Passed 100 iterations + Passed 1000 iterations Running orI# - Passed 100 iterations + Passed 1000 iterations Running xorI# - Passed 100 iterations + Passed 1000 iterations Running notI# - Passed 100 iterations + Passed 1000 iterations Running negateInt# - Passed 100 iterations + Passed 1000 iterations Running addIntC# - Passed 100 iterations + Passed 1000 iterations Running subIntC# - Passed 100 iterations + Passed 1000 iterations Running ># - Passed 100 iterations + Passed 1000 iterations Running >=# - Passed 100 iterations + Passed 1000 iterations Running ==# - Passed 100 iterations + Passed 1000 iterations Running /=# - Passed 100 iterations + Passed 1000 iterations Running <# - Passed 100 iterations + Passed 1000 iterations Running <=# - Passed 100 iterations + Passed 1000 iterations Running chr# - Passed 100 iterations + Passed 1000 iterations Running int2Word# - Passed 100 iterations + Passed 1000 iterations Running uncheckedIShiftL# - Passed 100 iterations + Passed 1000 iterations Running uncheckedIShiftRA# - Passed 100 iterations + Passed 1000 iterations Running uncheckedIShiftRL# - Passed 100 iterations + Passed 1000 iterations Running plusWord# - Passed 100 iterations + Passed 1000 iterations Running addWordC# - Passed 100 iterations + Passed 1000 iterations Running subWordC# - Passed 100 iterations + Passed 1000 iterations Running plusWord2# - Passed 100 iterations + Passed 1000 iterations Running minusWord# - Passed 100 iterations + Passed 1000 iterations Running timesWord# - Passed 100 iterations + Passed 1000 iterations Running timesWord2# - Passed 100 iterations + Passed 1000 iterations Running quotWord# - Passed 100 iterations + Passed 1000 iterations Running remWord# - Passed 100 iterations + Passed 1000 iterations Running quotRemWord# - Passed 100 iterations + Passed 1000 iterations Running and# - Passed 100 iterations + Passed 1000 iterations Running or# - Passed 100 iterations + Passed 1000 iterations Running xor# - Passed 100 iterations + Passed 1000 iterations Running not# - Passed 100 iterations + Passed 1000 iterations Running uncheckedShiftL# - Passed 100 iterations + Passed 1000 iterations Running uncheckedShiftRL# - Passed 100 iterations + Passed 1000 iterations Running word2Int# - Passed 100 iterations + Passed 1000 iterations Running gtWord# - Passed 100 iterations + Passed 1000 iterations Running geWord# - Passed 100 iterations + Passed 1000 iterations Running eqWord# - Passed 100 iterations + Passed 1000 iterations Running neWord# - Passed 100 iterations + Passed 1000 iterations Running ltWord# - Passed 100 iterations + Passed 1000 iterations Running leWord# - Passed 100 iterations + Passed 1000 iterations Running popCnt8# - Passed 100 iterations + Passed 1000 iterations Running popCnt16# - Passed 100 iterations + Passed 1000 iterations Running popCnt32# - Passed 100 iterations + Passed 1000 iterations Running popCnt64# - Passed 100 iterations + Passed 1000 iterations Running popCnt# - Passed 100 iterations + Passed 1000 iterations Running pdep8# - Passed 100 iterations + Passed 1000 iterations Running pdep16# - Passed 100 iterations + Passed 1000 iterations Running pdep32# - Passed 100 iterations + Passed 1000 iterations Running pdep64# - Passed 100 iterations + Passed 1000 iterations Running pdep# - Passed 100 iterations + Passed 1000 iterations Running pext8# - Passed 100 iterations + Passed 1000 iterations Running pext16# - Passed 100 iterations + Passed 1000 iterations Running pext32# - Passed 100 iterations + Passed 1000 iterations Running pext64# - Passed 100 iterations + Passed 1000 iterations Running pext# - Passed 100 iterations + Passed 1000 iterations Running clz8# - Passed 100 iterations + Passed 1000 iterations Running clz16# - Passed 100 iterations + Passed 1000 iterations Running clz32# - Passed 100 iterations + Passed 1000 iterations Running clz64# - Passed 100 iterations + Passed 1000 iterations Running clz# - Passed 100 iterations + Passed 1000 iterations Running ctz8# - Passed 100 iterations + Passed 1000 iterations Running ctz16# - Passed 100 iterations + Passed 1000 iterations Running ctz32# - Passed 100 iterations + Passed 1000 iterations Running ctz64# - Passed 100 iterations + Passed 1000 iterations Running ctz# - Passed 100 iterations + Passed 1000 iterations Running byteSwap16# - Passed 100 iterations + Passed 1000 iterations Running byteSwap32# - Passed 100 iterations + Passed 1000 iterations Running byteSwap64# - Passed 100 iterations + Passed 1000 iterations Running byteSwap# - Passed 100 iterations + Passed 1000 iterations Running bitReverse8# - Passed 100 iterations + Passed 1000 iterations Running bitReverse16# - Passed 100 iterations + Passed 1000 iterations Running bitReverse32# - Passed 100 iterations + Passed 1000 iterations Running bitReverse64# - Passed 100 iterations + Passed 1000 iterations Running bitReverse# - Passed 100 iterations + Passed 1000 iterations Running narrow8Int# - Passed 100 iterations + Passed 1000 iterations Running narrow16Int# - Passed 100 iterations + Passed 1000 iterations Running narrow32Int# - Passed 100 iterations + Passed 1000 iterations Running narrow8Word# - Passed 100 iterations + Passed 1000 iterations Running narrow16Word# - Passed 100 iterations + Passed 1000 iterations Running narrow32Word# - Passed 100 iterations + Passed 1000 iterations View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/facda7233b59fcaa93e4626ee8efebdd... -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/facda7233b59fcaa93e4626ee8efebdd... You're receiving this email because of your account on gitlab.haskell.org.
participants (1)
-
Cheng Shao (@TerrorJack)