Cheng Shao pushed to branch wip/foundation-improve-coverage at Glasgow Haskell Compiler / GHC
Commits:
3c001377 by Cheng Shao at 2025-12-13T05:03:15-05:00
ci: use treeless fetch for perf notes
This patch improves the ci logic for fetching perf notes by using
treeless fetch
(https://github.blog/open-source/git/get-up-to-speed-with-partial-clone-and-s...),
to avoid downloading all blobs of the perf notes repo at once, and
only fetch the actually required blobs on-demand when needed. This
makes the initial `test-metrics.sh pull` operation much faster, and
also more robust, since we are seeing an increasing rate of 504 errors
in CI when fetching all perf notes at once, which is a major source of
CI flakiness at this point.
Co-authored-by: Codex
- - - - -
123a8d77 by Peter Trommler at 2025-12-13T05:03:57-05:00
Cmm: remove restriction in MachOp folding
- - - - -
0b54b5fd by Andreas Klebinger at 2025-12-13T05:04:38-05:00
Remove explicit Typeable deriviations.
- - - - -
08b13f7b by Cheng Shao at 2025-12-13T05:05:18-05:00
ci: set gc.auto=0 during setup stage
This patch sets `gc.auto=0` during `setup` stage of CI, see added
comment for detailed explanation.
- - - - -
1a841641 by Cheng Shao at 2025-12-13T23:34:32+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 10000 instead of 100, similar to
the bump in `test-primops`. Runtime timeout is bumped 2x just to be
safe, though it's 2m39s on my machine and well within default
timeout 300s.
- 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
- - - - -
16 changed files:
- .gitlab/ci.sh
- .gitlab/test-metrics.sh
- compiler/GHC/Cmm/Opt.hs
- hadrian/src/Hadrian/Haskell/Cabal/Type.hs
- hadrian/src/Hadrian/Haskell/Hash.hs
- hadrian/src/Hadrian/Oracles/ArgsHash.hs
- hadrian/src/Hadrian/Oracles/Cabal/Type.hs
- hadrian/src/Hadrian/Oracles/DirectoryContents.hs
- hadrian/src/Hadrian/Oracles/Path.hs
- hadrian/src/Hadrian/Oracles/TextFile.hs
- hadrian/src/Hadrian/Utilities.hs
- hadrian/src/Oracles/Flavour.hs
- hadrian/src/Oracles/ModuleFiles.hs
- testsuite/tests/numeric/should_run/all.T
- testsuite/tests/numeric/should_run/foundation.hs
- testsuite/tests/numeric/should_run/foundation.stdout
Changes:
=====================================
.gitlab/ci.sh
=====================================
@@ -259,6 +259,12 @@ function setup() {
git config user.email "ghc-ci@gitlab-haskell.org"
git config user.name "GHC GitLab CI"
+ # Disable auto gc. Useless in a temporary checkout, and
+ # non-deterministic "Auto packing the repository in background for
+ # optimum performance." message could pop up that confuses the
+ # testsuite driver!
+ git config gc.auto 0
+
info "====================================================="
info "Toolchain versions"
info "====================================================="
=====================================
.gitlab/test-metrics.sh
=====================================
@@ -17,12 +17,14 @@ fail() {
function pull() {
local ref="refs/notes/$REF"
- # 2023-10-04: `git fetch` started failing, first on Darwin in CI and then on
- # Linux locally, both using git version 2.40.1. See #24055. One workaround is
- # to set a larger http.postBuffer, although this is definitely a workaround.
- # The default should work just fine. The error could be in git, GitLab, or
- # perhaps the networking tube (including all proxies etc) between the two.
- run git -c http.postBuffer=2097152 fetch -f "$NOTES_ORIGIN" "$ref:$ref"
+
+ # Fetch performance notes from a dedicated promisor remote using a
+ # treeless filter, so that individual note blobs are fetched lazily
+ # as needed.
+ git remote add perf-notes "$NOTES_ORIGIN" || true
+ git config fetch.recurseSubmodules false
+ git config remote.perf-notes.partialclonefilter tree:0
+ run git fetch --force perf-notes "$ref:$ref"
echo "perf notes ref $ref is $(git rev-parse $ref)"
}
@@ -81,4 +83,3 @@ case $1 in
pull) pull ;;
*) fail "Invalid mode $1" ;;
esac
-
=====================================
compiler/GHC/Cmm/Opt.hs
=====================================
@@ -290,9 +290,7 @@ cmmMachOpFoldM _ (MO_Sub _) [CmmLit lit, CmmLit (CmmInt i rep)]
-- the same comparison at the larger size.
cmmMachOpFoldM platform cmp [CmmMachOp conv [x], CmmLit (CmmInt i _)]
- | -- powerPC NCG has a TODO for I8/I16 comparisons, so don't try
- platformArch platform `elem` [ArchX86, ArchX86_64],
- -- if the operand is widened:
+ | -- if the operand is widened:
Just (rep, signed, narrow_fn) <- maybe_conversion conv,
-- and this is a comparison operation:
Just narrow_cmp <- maybe_comparison cmp rep signed,
=====================================
hadrian/src/Hadrian/Haskell/Cabal/Type.hs
=====================================
@@ -31,7 +31,7 @@ data PackageData = PackageData
, description :: String
, packageDependencies :: [Package]
, genericPackageDescription :: GenericPackageDescription
- } deriving (Eq, Generic, Show, Typeable)
+ } deriving (Eq, Generic, Show)
-- | Haskell package metadata obtained after resolving package configuration
-- flags and associated conditionals according to the current build context.
@@ -75,7 +75,7 @@ data ContextData = ContextData
, contextLibdir :: FilePath
-- The location where dynamic libraries go
, contextDynLibdir :: FilePath
- } deriving (Eq, Generic, Show, Typeable)
+ } deriving (Eq, Generic, Show)
instance Binary PackageData
instance Hashable PackageData where hashWithSalt salt = hashWithSalt salt . show
=====================================
hadrian/src/Hadrian/Haskell/Hash.hs
=====================================
@@ -108,7 +108,7 @@ data PackageHashConfigInputs = PackageHashConfigInputs {
deriving Show
newtype PkgHashKey = PkgHashKey (Stage, Package)
- deriving (Binary, Eq, Hashable, NFData, Show, Typeable)
+ deriving (Binary, Eq, Hashable, NFData, Show)
type instance RuleResult PkgHashKey = String
pkgHash :: Stage -> Package -> Action String
=====================================
hadrian/src/Hadrian/Oracles/ArgsHash.hs
=====================================
@@ -38,7 +38,7 @@ trackArgsHash t = do
void (askOracle $ ArgsHash hashedTarget :: Action Int)
newtype ArgsHash c b = ArgsHash (Target c b)
- deriving (Binary, Eq, Hashable, NFData, Show, Typeable)
+ deriving (Binary, Eq, Hashable, NFData, Show)
type instance RuleResult (ArgsHash c b) = Int
-- | This oracle stores per-target argument list hashes in the Shake database,
=====================================
hadrian/src/Hadrian/Oracles/Cabal/Type.hs
=====================================
@@ -26,13 +26,13 @@ import Stage
-- | This type of oracle key is used by 'Hadrian.Oracles.Cabal.readPackageData'
-- to cache reading and parsing of 'Hadrian.Haskell.Cabal.Type.PackageData'.
newtype PackageDataKey = PackageDataKey Package
- deriving (Binary, Eq, Hashable, NFData, Show, Typeable)
+ deriving (Binary, Eq, Hashable, NFData, Show)
type instance RuleResult PackageDataKey = PackageData
-- | This type of oracle key is used by 'Hadrian.Oracles.Cabal.readContextData'
-- to cache reading and parsing of 'Hadrian.Haskell.Cabal.Type.ContextData'.
newtype ContextDataKey = ContextDataKey Context
- deriving (Binary, Eq, Hashable, NFData, Show, Typeable)
+ deriving (Binary, Eq, Hashable, NFData, Show)
type instance RuleResult ContextDataKey = ContextData
-- TODO: Should @PackageConfiguration@ be simply @()@? Presumably the pair
@@ -40,7 +40,7 @@ type instance RuleResult ContextDataKey = ContextData
-- | The result of Cabal package configuration produced by the oracle
-- 'Hadrian.Oracles.Cabal.configurePackageGHC'.
newtype PackageConfiguration = PackageConfiguration (C.Compiler, C.Platform)
- deriving (Binary, Eq, Show, Typeable)
+ deriving (Binary, Eq, Show)
instance NFData PackageConfiguration where
rnf (PackageConfiguration (c, p)) =
@@ -58,5 +58,5 @@ instance Hashable PackageConfiguration where
-- | This type of oracle key is used by 'Hadrian.Oracles.Cabal.configurePackageGHC'
-- to cache configuration of a Cabal package.
newtype PackageConfigurationKey = PackageConfigurationKey (Package, Stage)
- deriving (Binary, Eq, Hashable, NFData, Show, Typeable)
+ deriving (Binary, Eq, Hashable, NFData, Show)
type instance RuleResult PackageConfigurationKey = PackageConfiguration
=====================================
hadrian/src/Hadrian/Oracles/DirectoryContents.hs
=====================================
@@ -15,7 +15,7 @@ import Hadrian.Utilities
import qualified System.Directory.Extra as IO
data Match = Test FilePattern | Not Match | And [Match] | Or [Match]
- deriving (Generic, Eq, Show, Typeable)
+ deriving (Generic, Eq, Show)
instance Binary Match
instance Hashable Match
@@ -54,7 +54,7 @@ copyDirectoryContentsUntracked expr source target = do
mapM_ cp =<< directoryContents expr source
newtype DirectoryContents = DirectoryContents (Match, FilePath)
- deriving (Binary, Eq, Hashable, NFData, Show, Typeable)
+ deriving (Binary, Eq, Hashable, NFData, Show)
type instance RuleResult DirectoryContents = [FilePath]
-- | This oracle answers 'directoryContents' queries and tracks the results.
=====================================
hadrian/src/Hadrian/Oracles/Path.hs
=====================================
@@ -34,11 +34,11 @@ fixAbsolutePathOnWindows path =
return path
newtype LookupInPath = LookupInPath String
- deriving (Binary, Eq, Hashable, NFData, Show, Typeable)
+ deriving (Binary, Eq, Hashable, NFData, Show)
type instance RuleResult LookupInPath = String
newtype WindowsPath = WindowsPath FilePath
- deriving (Binary, Eq, Hashable, NFData, Show, Typeable)
+ deriving (Binary, Eq, Hashable, NFData, Show)
type instance RuleResult WindowsPath = String
-- | Oracles for looking up paths. These are slow and require caching.
=====================================
hadrian/src/Hadrian/Oracles/TextFile.hs
=====================================
@@ -118,15 +118,15 @@ queryTargetTarget :: (Toolchain.Target -> a) -> Action a
queryTargetTarget f = f <$> getTargetTarget
newtype KeyValue = KeyValue (FilePath, String)
- deriving (Binary, Eq, Hashable, NFData, Show, Typeable)
+ deriving (Binary, Eq, Hashable, NFData, Show)
type instance RuleResult KeyValue = Maybe String
newtype KeyValues = KeyValues (FilePath, String)
- deriving (Binary, Eq, Hashable, NFData, Show, Typeable)
+ deriving (Binary, Eq, Hashable, NFData, Show)
type instance RuleResult KeyValues = Maybe [String]
newtype TargetFile = TargetFile FilePath
- deriving (Binary, Eq, Hashable, NFData, Show, Typeable)
+ deriving (Binary, Eq, Hashable, NFData, Show)
type instance RuleResult TargetFile = Toolchain.Target
-- | These oracle rules are used to cache and track answers to the following
=====================================
hadrian/src/Hadrian/Utilities.hs
=====================================
@@ -298,7 +298,7 @@ userSettingRules defaultValue = do
extra <- shakeExtra <$> getShakeOptionsRules
return $ lookupExtra defaultValue extra
-newtype BuildRoot = BuildRoot FilePath deriving (Typeable, Eq, Show)
+newtype BuildRoot = BuildRoot FilePath deriving (Eq, Show)
-- | All build results are put into the 'buildRoot' directory.
buildRoot :: Action FilePath
@@ -484,7 +484,6 @@ putColoured code msg = do
else putInfo msg
newtype BuildProgressColour = BuildProgressColour String
- deriving Typeable
-- | By default, Hadrian tries to figure out if the current terminal
-- supports colors using this function. The default can be overridden
@@ -511,7 +510,6 @@ putBuild msg = do
putColoured code msg
newtype SuccessColour = SuccessColour String
- deriving Typeable
-- | Generate an encoded colour for successful output from names
mkSuccessColour :: Colour -> SuccessColour
@@ -528,7 +526,6 @@ putSuccess msg = do
putColoured code msg
newtype FailureColour = FailureColour String
- deriving Typeable
-- | Generate an encoded colour for failure output messages
mkFailureColour :: Colour -> FailureColour
@@ -544,7 +541,7 @@ putFailure msg = do
FailureColour code <- userSetting red
putColoured code msg
-data ProgressInfo = None | Brief | Normal | Unicorn deriving (Eq, Show, Typeable)
+data ProgressInfo = None | Brief | Normal | Unicorn deriving (Eq, Show)
-- | Version of 'putBuild' controlled by @--progress-info@ command line argument.
putProgressInfo :: String -> Action ()
=====================================
hadrian/src/Oracles/Flavour.hs
=====================================
@@ -14,11 +14,11 @@ import Flavour
import Settings (flavour)
newtype DynGhcPrograms =
- DynGhcPrograms () deriving (Show, Typeable, Eq, Hashable, Binary, NFData)
+ DynGhcPrograms () deriving (Show, Eq, Hashable, Binary, NFData)
type instance RuleResult DynGhcPrograms = Bool
newtype GhcProfiled =
- GhcProfiled Stage deriving (Show, Typeable, Eq, Hashable, Binary, NFData)
+ GhcProfiled Stage deriving (Show, Eq, Hashable, Binary, NFData)
type instance RuleResult GhcProfiled = Bool
oracles :: Rules ()
=====================================
hadrian/src/Oracles/ModuleFiles.hs
=====================================
@@ -16,11 +16,11 @@ import Expression
type ModuleName = String
newtype ModuleFiles = ModuleFiles (Stage, Package)
- deriving (Binary, Eq, Hashable, NFData, Show, Typeable)
+ deriving (Binary, Eq, Hashable, NFData, Show)
type instance RuleResult ModuleFiles = [Maybe FilePath]
newtype Generator = Generator (Stage, Package, FilePath)
- deriving (Binary, Eq, Hashable, NFData, Show, Typeable)
+ deriving (Binary, Eq, Hashable, NFData, Show)
type instance RuleResult Generator = Maybe FilePath
-- | We scan for the following Haskell source extensions when looking for module
=====================================
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 = 10000 :: 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 10000 iterations
Group Property
Running Eq
- Passed 100 iterations
+ Passed 10000 iterations
Running Show
- Passed 100 iterations
+ Passed 10000 iterations
Running Ord
- Passed 100 iterations
+ Passed 10000 iterations
Running <
- Passed 100 iterations
+ Passed 10000 iterations
Group Additive
Running a + azero == a
- Passed 100 iterations
+ Passed 10000 iterations
Running azero + a == a
- Passed 100 iterations
+ Passed 10000 iterations
Running a + b == b + a
- Passed 100 iterations
+ Passed 10000 iterations
Group Multiplicative
Running a * 1 == a
- Passed 100 iterations
+ Passed 10000 iterations
Running 1 * a == a
- Passed 100 iterations
+ Passed 10000 iterations
Running multiplication commutative
- Passed 100 iterations
+ Passed 10000 iterations
Running a * b == Integer(a) * Integer(b)
- Passed 100 iterations
+ Passed 10000 iterations
Group Divisible
Running (x `div` y) * y + (x `mod` y) == x
- Passed 100 iterations
+ Passed 10000 iterations
Group Precedence
Running + and - (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running + and - (2)
- Passed 100 iterations
+ Passed 10000 iterations
Running + and * (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running + and * (2)
- Passed 100 iterations
+ Passed 10000 iterations
Running - and * (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running - and * (2)
- Passed 100 iterations
+ Passed 10000 iterations
Running * and ^ (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running * and ^ (2)
- Passed 100 iterations
+ Passed 10000 iterations
Group Int8
Group Integral
Running FromIntegral(Integer(a)) == a
- Passed 100 iterations
+ Passed 10000 iterations
Group Property
Running Eq
- Passed 100 iterations
+ Passed 10000 iterations
Running Show
- Passed 100 iterations
+ Passed 10000 iterations
Running Ord
- Passed 100 iterations
+ Passed 10000 iterations
Running <
- Passed 100 iterations
+ Passed 10000 iterations
Group Additive
Running a + azero == a
- Passed 100 iterations
+ Passed 10000 iterations
Running azero + a == a
- Passed 100 iterations
+ Passed 10000 iterations
Running a + b == b + a
- Passed 100 iterations
+ Passed 10000 iterations
Group Multiplicative
Running a * 1 == a
- Passed 100 iterations
+ Passed 10000 iterations
Running 1 * a == a
- Passed 100 iterations
+ Passed 10000 iterations
Running multiplication commutative
- Passed 100 iterations
+ Passed 10000 iterations
Running a * b == Integer(a) * Integer(b)
- Passed 100 iterations
+ Passed 10000 iterations
Group Divisible
Running (x `div` y) * y + (x `mod` y) == x
- Passed 100 iterations
+ Passed 10000 iterations
Group Precedence
Running + and - (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running + and - (2)
- Passed 100 iterations
+ Passed 10000 iterations
Running + and * (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running + and * (2)
- Passed 100 iterations
+ Passed 10000 iterations
Running - and * (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running - and * (2)
- Passed 100 iterations
+ Passed 10000 iterations
Running * and ^ (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running * and ^ (2)
- Passed 100 iterations
+ Passed 10000 iterations
Group Int16
Group Integral
Running FromIntegral(Integer(a)) == a
- Passed 100 iterations
+ Passed 10000 iterations
Group Property
Running Eq
- Passed 100 iterations
+ Passed 10000 iterations
Running Show
- Passed 100 iterations
+ Passed 10000 iterations
Running Ord
- Passed 100 iterations
+ Passed 10000 iterations
Running <
- Passed 100 iterations
+ Passed 10000 iterations
Group Additive
Running a + azero == a
- Passed 100 iterations
+ Passed 10000 iterations
Running azero + a == a
- Passed 100 iterations
+ Passed 10000 iterations
Running a + b == b + a
- Passed 100 iterations
+ Passed 10000 iterations
Group Multiplicative
Running a * 1 == a
- Passed 100 iterations
+ Passed 10000 iterations
Running 1 * a == a
- Passed 100 iterations
+ Passed 10000 iterations
Running multiplication commutative
- Passed 100 iterations
+ Passed 10000 iterations
Running a * b == Integer(a) * Integer(b)
- Passed 100 iterations
+ Passed 10000 iterations
Group Divisible
Running (x `div` y) * y + (x `mod` y) == x
- Passed 100 iterations
+ Passed 10000 iterations
Group Precedence
Running + and - (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running + and - (2)
- Passed 100 iterations
+ Passed 10000 iterations
Running + and * (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running + and * (2)
- Passed 100 iterations
+ Passed 10000 iterations
Running - and * (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running - and * (2)
- Passed 100 iterations
+ Passed 10000 iterations
Running * and ^ (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running * and ^ (2)
- Passed 100 iterations
+ Passed 10000 iterations
Group Int32
Group Integral
Running FromIntegral(Integer(a)) == a
- Passed 100 iterations
+ Passed 10000 iterations
Group Property
Running Eq
- Passed 100 iterations
+ Passed 10000 iterations
Running Show
- Passed 100 iterations
+ Passed 10000 iterations
Running Ord
- Passed 100 iterations
+ Passed 10000 iterations
Running <
- Passed 100 iterations
+ Passed 10000 iterations
Group Additive
Running a + azero == a
- Passed 100 iterations
+ Passed 10000 iterations
Running azero + a == a
- Passed 100 iterations
+ Passed 10000 iterations
Running a + b == b + a
- Passed 100 iterations
+ Passed 10000 iterations
Group Multiplicative
Running a * 1 == a
- Passed 100 iterations
+ Passed 10000 iterations
Running 1 * a == a
- Passed 100 iterations
+ Passed 10000 iterations
Running multiplication commutative
- Passed 100 iterations
+ Passed 10000 iterations
Running a * b == Integer(a) * Integer(b)
- Passed 100 iterations
+ Passed 10000 iterations
Group Divisible
Running (x `div` y) * y + (x `mod` y) == x
- Passed 100 iterations
+ Passed 10000 iterations
Group Precedence
Running + and - (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running + and - (2)
- Passed 100 iterations
+ Passed 10000 iterations
Running + and * (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running + and * (2)
- Passed 100 iterations
+ Passed 10000 iterations
Running - and * (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running - and * (2)
- Passed 100 iterations
+ Passed 10000 iterations
Running * and ^ (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running * and ^ (2)
- Passed 100 iterations
+ Passed 10000 iterations
Group Int64
Group Integral
Running FromIntegral(Integer(a)) == a
- Passed 100 iterations
+ Passed 10000 iterations
Group Property
Running Eq
- Passed 100 iterations
+ Passed 10000 iterations
Running Show
- Passed 100 iterations
+ Passed 10000 iterations
Running Ord
- Passed 100 iterations
+ Passed 10000 iterations
Running <
- Passed 100 iterations
+ Passed 10000 iterations
Group Additive
Running a + azero == a
- Passed 100 iterations
+ Passed 10000 iterations
Running azero + a == a
- Passed 100 iterations
+ Passed 10000 iterations
Running a + b == b + a
- Passed 100 iterations
+ Passed 10000 iterations
Group Multiplicative
Running a * 1 == a
- Passed 100 iterations
+ Passed 10000 iterations
Running 1 * a == a
- Passed 100 iterations
+ Passed 10000 iterations
Running multiplication commutative
- Passed 100 iterations
+ Passed 10000 iterations
Running a * b == Integer(a) * Integer(b)
- Passed 100 iterations
+ Passed 10000 iterations
Group Divisible
Running (x `div` y) * y + (x `mod` y) == x
- Passed 100 iterations
+ Passed 10000 iterations
Group Precedence
Running + and - (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running + and - (2)
- Passed 100 iterations
+ Passed 10000 iterations
Running + and * (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running + and * (2)
- Passed 100 iterations
+ Passed 10000 iterations
Running - and * (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running - and * (2)
- Passed 100 iterations
+ Passed 10000 iterations
Running * and ^ (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running * and ^ (2)
- Passed 100 iterations
+ Passed 10000 iterations
Group Integer
Group Integral
Running FromIntegral(Integer(a)) == a
- Passed 100 iterations
+ Passed 10000 iterations
Group Property
Running Eq
- Passed 100 iterations
+ Passed 10000 iterations
Running Show
- Passed 100 iterations
+ Passed 10000 iterations
Running Ord
- Passed 100 iterations
+ Passed 10000 iterations
Running <
- Passed 100 iterations
+ Passed 10000 iterations
Group Additive
Running a + azero == a
- Passed 100 iterations
+ Passed 10000 iterations
Running azero + a == a
- Passed 100 iterations
+ Passed 10000 iterations
Running a + b == b + a
- Passed 100 iterations
+ Passed 10000 iterations
Group Multiplicative
Running a * 1 == a
- Passed 100 iterations
+ Passed 10000 iterations
Running 1 * a == a
- Passed 100 iterations
+ Passed 10000 iterations
Running multiplication commutative
- Passed 100 iterations
+ Passed 10000 iterations
Running a * b == Integer(a) * Integer(b)
- Passed 100 iterations
+ Passed 10000 iterations
Group Divisible
Running (x `div` y) * y + (x `mod` y) == x
- Passed 100 iterations
+ Passed 10000 iterations
Group Precedence
Running + and - (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running + and - (2)
- Passed 100 iterations
+ Passed 10000 iterations
Running + and * (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running + and * (2)
- Passed 100 iterations
+ Passed 10000 iterations
Running - and * (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running - and * (2)
- Passed 100 iterations
+ Passed 10000 iterations
Running * and ^ (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running * and ^ (2)
- Passed 100 iterations
+ Passed 10000 iterations
Group Word
Group Integral
Running FromIntegral(Integer(a)) == a
- Passed 100 iterations
+ Passed 10000 iterations
Group Property
Running Eq
- Passed 100 iterations
+ Passed 10000 iterations
Running Show
- Passed 100 iterations
+ Passed 10000 iterations
Running Ord
- Passed 100 iterations
+ Passed 10000 iterations
Running <
- Passed 100 iterations
+ Passed 10000 iterations
Group Additive
Running a + azero == a
- Passed 100 iterations
+ Passed 10000 iterations
Running azero + a == a
- Passed 100 iterations
+ Passed 10000 iterations
Running a + b == b + a
- Passed 100 iterations
+ Passed 10000 iterations
Group Multiplicative
Running a * 1 == a
- Passed 100 iterations
+ Passed 10000 iterations
Running 1 * a == a
- Passed 100 iterations
+ Passed 10000 iterations
Running multiplication commutative
- Passed 100 iterations
+ Passed 10000 iterations
Running a * b == Integer(a) * Integer(b)
- Passed 100 iterations
+ Passed 10000 iterations
Group Divisible
Running (x `div` y) * y + (x `mod` y) == x
- Passed 100 iterations
+ Passed 10000 iterations
Group Precedence
Running + and - (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running + and - (2)
- Passed 100 iterations
+ Passed 10000 iterations
Running + and * (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running + and * (2)
- Passed 100 iterations
+ Passed 10000 iterations
Running - and * (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running - and * (2)
- Passed 100 iterations
+ Passed 10000 iterations
Running * and ^ (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running * and ^ (2)
- Passed 100 iterations
+ Passed 10000 iterations
Group Word8
Group Integral
Running FromIntegral(Integer(a)) == a
- Passed 100 iterations
+ Passed 10000 iterations
Group Property
Running Eq
- Passed 100 iterations
+ Passed 10000 iterations
Running Show
- Passed 100 iterations
+ Passed 10000 iterations
Running Ord
- Passed 100 iterations
+ Passed 10000 iterations
Running <
- Passed 100 iterations
+ Passed 10000 iterations
Group Additive
Running a + azero == a
- Passed 100 iterations
+ Passed 10000 iterations
Running azero + a == a
- Passed 100 iterations
+ Passed 10000 iterations
Running a + b == b + a
- Passed 100 iterations
+ Passed 10000 iterations
Group Multiplicative
Running a * 1 == a
- Passed 100 iterations
+ Passed 10000 iterations
Running 1 * a == a
- Passed 100 iterations
+ Passed 10000 iterations
Running multiplication commutative
- Passed 100 iterations
+ Passed 10000 iterations
Running a * b == Integer(a) * Integer(b)
- Passed 100 iterations
+ Passed 10000 iterations
Group Divisible
Running (x `div` y) * y + (x `mod` y) == x
- Passed 100 iterations
+ Passed 10000 iterations
Group Precedence
Running + and - (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running + and - (2)
- Passed 100 iterations
+ Passed 10000 iterations
Running + and * (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running + and * (2)
- Passed 100 iterations
+ Passed 10000 iterations
Running - and * (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running - and * (2)
- Passed 100 iterations
+ Passed 10000 iterations
Running * and ^ (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running * and ^ (2)
- Passed 100 iterations
+ Passed 10000 iterations
Group Word16
Group Integral
Running FromIntegral(Integer(a)) == a
- Passed 100 iterations
+ Passed 10000 iterations
Group Property
Running Eq
- Passed 100 iterations
+ Passed 10000 iterations
Running Show
- Passed 100 iterations
+ Passed 10000 iterations
Running Ord
- Passed 100 iterations
+ Passed 10000 iterations
Running <
- Passed 100 iterations
+ Passed 10000 iterations
Group Additive
Running a + azero == a
- Passed 100 iterations
+ Passed 10000 iterations
Running azero + a == a
- Passed 100 iterations
+ Passed 10000 iterations
Running a + b == b + a
- Passed 100 iterations
+ Passed 10000 iterations
Group Multiplicative
Running a * 1 == a
- Passed 100 iterations
+ Passed 10000 iterations
Running 1 * a == a
- Passed 100 iterations
+ Passed 10000 iterations
Running multiplication commutative
- Passed 100 iterations
+ Passed 10000 iterations
Running a * b == Integer(a) * Integer(b)
- Passed 100 iterations
+ Passed 10000 iterations
Group Divisible
Running (x `div` y) * y + (x `mod` y) == x
- Passed 100 iterations
+ Passed 10000 iterations
Group Precedence
Running + and - (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running + and - (2)
- Passed 100 iterations
+ Passed 10000 iterations
Running + and * (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running + and * (2)
- Passed 100 iterations
+ Passed 10000 iterations
Running - and * (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running - and * (2)
- Passed 100 iterations
+ Passed 10000 iterations
Running * and ^ (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running * and ^ (2)
- Passed 100 iterations
+ Passed 10000 iterations
Group Word32
Group Integral
Running FromIntegral(Integer(a)) == a
- Passed 100 iterations
+ Passed 10000 iterations
Group Property
Running Eq
- Passed 100 iterations
+ Passed 10000 iterations
Running Show
- Passed 100 iterations
+ Passed 10000 iterations
Running Ord
- Passed 100 iterations
+ Passed 10000 iterations
Running <
- Passed 100 iterations
+ Passed 10000 iterations
Group Additive
Running a + azero == a
- Passed 100 iterations
+ Passed 10000 iterations
Running azero + a == a
- Passed 100 iterations
+ Passed 10000 iterations
Running a + b == b + a
- Passed 100 iterations
+ Passed 10000 iterations
Group Multiplicative
Running a * 1 == a
- Passed 100 iterations
+ Passed 10000 iterations
Running 1 * a == a
- Passed 100 iterations
+ Passed 10000 iterations
Running multiplication commutative
- Passed 100 iterations
+ Passed 10000 iterations
Running a * b == Integer(a) * Integer(b)
- Passed 100 iterations
+ Passed 10000 iterations
Group Divisible
Running (x `div` y) * y + (x `mod` y) == x
- Passed 100 iterations
+ Passed 10000 iterations
Group Precedence
Running + and - (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running + and - (2)
- Passed 100 iterations
+ Passed 10000 iterations
Running + and * (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running + and * (2)
- Passed 100 iterations
+ Passed 10000 iterations
Running - and * (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running - and * (2)
- Passed 100 iterations
+ Passed 10000 iterations
Running * and ^ (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running * and ^ (2)
- Passed 100 iterations
+ Passed 10000 iterations
Group Word64
Group Integral
Running FromIntegral(Integer(a)) == a
- Passed 100 iterations
+ Passed 10000 iterations
Group Property
Running Eq
- Passed 100 iterations
+ Passed 10000 iterations
Running Show
- Passed 100 iterations
+ Passed 10000 iterations
Running Ord
- Passed 100 iterations
+ Passed 10000 iterations
Running <
- Passed 100 iterations
+ Passed 10000 iterations
Group Additive
Running a + azero == a
- Passed 100 iterations
+ Passed 10000 iterations
Running azero + a == a
- Passed 100 iterations
+ Passed 10000 iterations
Running a + b == b + a
- Passed 100 iterations
+ Passed 10000 iterations
Group Multiplicative
Running a * 1 == a
- Passed 100 iterations
+ Passed 10000 iterations
Running 1 * a == a
- Passed 100 iterations
+ Passed 10000 iterations
Running multiplication commutative
- Passed 100 iterations
+ Passed 10000 iterations
Running a * b == Integer(a) * Integer(b)
- Passed 100 iterations
+ Passed 10000 iterations
Group Divisible
Running (x `div` y) * y + (x `mod` y) == x
- Passed 100 iterations
+ Passed 10000 iterations
Group Precedence
Running + and - (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running + and - (2)
- Passed 100 iterations
+ Passed 10000 iterations
Running + and * (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running + and * (2)
- Passed 100 iterations
+ Passed 10000 iterations
Running - and * (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running - and * (2)
- Passed 100 iterations
+ Passed 10000 iterations
Running * and ^ (1)
- Passed 100 iterations
+ Passed 10000 iterations
Running * and ^ (2)
- Passed 100 iterations
+ Passed 10000 iterations
Group primop
Running gtChar#
- Passed 100 iterations
+ Passed 10000 iterations
Running geChar#
- Passed 100 iterations
+ Passed 10000 iterations
Running eqChar#
- Passed 100 iterations
+ Passed 10000 iterations
Running neChar#
- Passed 100 iterations
+ Passed 10000 iterations
Running ltChar#
- Passed 100 iterations
+ Passed 10000 iterations
Running leChar#
- Passed 100 iterations
+ Passed 10000 iterations
Running ord#
- Passed 100 iterations
+ Passed 10000 iterations
Running int8ToInt#
- Passed 100 iterations
+ Passed 10000 iterations
Running intToInt8#
- Passed 100 iterations
+ Passed 10000 iterations
Running negateInt8#
- Passed 100 iterations
+ Passed 10000 iterations
Running plusInt8#
- Passed 100 iterations
+ Passed 10000 iterations
Running subInt8#
- Passed 100 iterations
+ Passed 10000 iterations
Running timesInt8#
- Passed 100 iterations
+ Passed 10000 iterations
Running quotInt8#
- Passed 100 iterations
+ Passed 10000 iterations
Running remInt8#
- Passed 100 iterations
+ Passed 10000 iterations
Running quotRemInt8#
- Passed 100 iterations
+ Passed 10000 iterations
Running uncheckedShiftLInt8#
- Passed 100 iterations
+ Passed 10000 iterations
Running uncheckedShiftRAInt8#
- Passed 100 iterations
+ Passed 10000 iterations
Running uncheckedShiftRLInt8#
- Passed 100 iterations
+ Passed 10000 iterations
Running int8ToWord8#
- Passed 100 iterations
+ Passed 10000 iterations
Running eqInt8#
- Passed 100 iterations
+ Passed 10000 iterations
Running geInt8#
- Passed 100 iterations
+ Passed 10000 iterations
Running gtInt8#
- Passed 100 iterations
+ Passed 10000 iterations
Running leInt8#
- Passed 100 iterations
+ Passed 10000 iterations
Running ltInt8#
- Passed 100 iterations
+ Passed 10000 iterations
Running neInt8#
- Passed 100 iterations
+ Passed 10000 iterations
Running word8ToWord#
- Passed 100 iterations
+ Passed 10000 iterations
Running wordToWord8#
- Passed 100 iterations
+ Passed 10000 iterations
Running plusWord8#
- Passed 100 iterations
+ Passed 10000 iterations
Running subWord8#
- Passed 100 iterations
+ Passed 10000 iterations
Running timesWord8#
- Passed 100 iterations
+ Passed 10000 iterations
Running quotWord8#
- Passed 100 iterations
+ Passed 10000 iterations
Running remWord8#
- Passed 100 iterations
+ Passed 10000 iterations
Running quotRemWord8#
- Passed 100 iterations
+ Passed 10000 iterations
Running andWord8#
- Passed 100 iterations
+ Passed 10000 iterations
Running orWord8#
- Passed 100 iterations
+ Passed 10000 iterations
Running xorWord8#
- Passed 100 iterations
+ Passed 10000 iterations
Running notWord8#
- Passed 100 iterations
+ Passed 10000 iterations
Running uncheckedShiftLWord8#
- Passed 100 iterations
+ Passed 10000 iterations
Running uncheckedShiftRLWord8#
- Passed 100 iterations
+ Passed 10000 iterations
Running word8ToInt8#
- Passed 100 iterations
+ Passed 10000 iterations
Running eqWord8#
- Passed 100 iterations
+ Passed 10000 iterations
Running geWord8#
- Passed 100 iterations
+ Passed 10000 iterations
Running gtWord8#
- Passed 100 iterations
+ Passed 10000 iterations
Running leWord8#
- Passed 100 iterations
+ Passed 10000 iterations
Running ltWord8#
- Passed 100 iterations
+ Passed 10000 iterations
Running neWord8#
- Passed 100 iterations
+ Passed 10000 iterations
Running int16ToInt#
- Passed 100 iterations
+ Passed 10000 iterations
Running intToInt16#
- Passed 100 iterations
+ Passed 10000 iterations
Running negateInt16#
- Passed 100 iterations
+ Passed 10000 iterations
Running plusInt16#
- Passed 100 iterations
+ Passed 10000 iterations
Running subInt16#
- Passed 100 iterations
+ Passed 10000 iterations
Running timesInt16#
- Passed 100 iterations
+ Passed 10000 iterations
Running quotInt16#
- Passed 100 iterations
+ Passed 10000 iterations
Running remInt16#
- Passed 100 iterations
+ Passed 10000 iterations
Running quotRemInt16#
- Passed 100 iterations
+ Passed 10000 iterations
Running uncheckedShiftLInt16#
- Passed 100 iterations
+ Passed 10000 iterations
Running uncheckedShiftRAInt16#
- Passed 100 iterations
+ Passed 10000 iterations
Running uncheckedShiftRLInt16#
- Passed 100 iterations
+ Passed 10000 iterations
Running int16ToWord16#
- Passed 100 iterations
+ Passed 10000 iterations
Running eqInt16#
- Passed 100 iterations
+ Passed 10000 iterations
Running geInt16#
- Passed 100 iterations
+ Passed 10000 iterations
Running gtInt16#
- Passed 100 iterations
+ Passed 10000 iterations
Running leInt16#
- Passed 100 iterations
+ Passed 10000 iterations
Running ltInt16#
- Passed 100 iterations
+ Passed 10000 iterations
Running neInt16#
- Passed 100 iterations
+ Passed 10000 iterations
Running word16ToWord#
- Passed 100 iterations
+ Passed 10000 iterations
Running wordToWord16#
- Passed 100 iterations
+ Passed 10000 iterations
Running plusWord16#
- Passed 100 iterations
+ Passed 10000 iterations
Running subWord16#
- Passed 100 iterations
+ Passed 10000 iterations
Running timesWord16#
- Passed 100 iterations
+ Passed 10000 iterations
Running quotWord16#
- Passed 100 iterations
+ Passed 10000 iterations
Running remWord16#
- Passed 100 iterations
+ Passed 10000 iterations
Running quotRemWord16#
- Passed 100 iterations
+ Passed 10000 iterations
Running andWord16#
- Passed 100 iterations
+ Passed 10000 iterations
Running orWord16#
- Passed 100 iterations
+ Passed 10000 iterations
Running xorWord16#
- Passed 100 iterations
+ Passed 10000 iterations
Running notWord16#
- Passed 100 iterations
+ Passed 10000 iterations
Running uncheckedShiftLWord16#
- Passed 100 iterations
+ Passed 10000 iterations
Running uncheckedShiftRLWord16#
- Passed 100 iterations
+ Passed 10000 iterations
Running word16ToInt16#
- Passed 100 iterations
+ Passed 10000 iterations
Running eqWord16#
- Passed 100 iterations
+ Passed 10000 iterations
Running geWord16#
- Passed 100 iterations
+ Passed 10000 iterations
Running gtWord16#
- Passed 100 iterations
+ Passed 10000 iterations
Running leWord16#
- Passed 100 iterations
+ Passed 10000 iterations
Running ltWord16#
- Passed 100 iterations
+ Passed 10000 iterations
Running neWord16#
- Passed 100 iterations
+ Passed 10000 iterations
Running int32ToInt#
- Passed 100 iterations
+ Passed 10000 iterations
Running intToInt32#
- Passed 100 iterations
+ Passed 10000 iterations
Running negateInt32#
- Passed 100 iterations
+ Passed 10000 iterations
Running plusInt32#
- Passed 100 iterations
+ Passed 10000 iterations
Running subInt32#
- Passed 100 iterations
+ Passed 10000 iterations
Running timesInt32#
- Passed 100 iterations
+ Passed 10000 iterations
Running quotInt32#
- Passed 100 iterations
+ Passed 10000 iterations
Running remInt32#
- Passed 100 iterations
+ Passed 10000 iterations
Running quotRemInt32#
- Passed 100 iterations
+ Passed 10000 iterations
Running uncheckedShiftLInt32#
- Passed 100 iterations
+ Passed 10000 iterations
Running uncheckedShiftRAInt32#
- Passed 100 iterations
+ Passed 10000 iterations
Running uncheckedShiftRLInt32#
- Passed 100 iterations
+ Passed 10000 iterations
Running int32ToWord32#
- Passed 100 iterations
+ Passed 10000 iterations
Running eqInt32#
- Passed 100 iterations
+ Passed 10000 iterations
Running geInt32#
- Passed 100 iterations
+ Passed 10000 iterations
Running gtInt32#
- Passed 100 iterations
+ Passed 10000 iterations
Running leInt32#
- Passed 100 iterations
+ Passed 10000 iterations
Running ltInt32#
- Passed 100 iterations
+ Passed 10000 iterations
Running neInt32#
- Passed 100 iterations
+ Passed 10000 iterations
Running word32ToWord#
- Passed 100 iterations
+ Passed 10000 iterations
Running wordToWord32#
- Passed 100 iterations
+ Passed 10000 iterations
Running plusWord32#
- Passed 100 iterations
+ Passed 10000 iterations
Running subWord32#
- Passed 100 iterations
+ Passed 10000 iterations
Running timesWord32#
- Passed 100 iterations
+ Passed 10000 iterations
Running quotWord32#
- Passed 100 iterations
+ Passed 10000 iterations
Running remWord32#
- Passed 100 iterations
+ Passed 10000 iterations
Running quotRemWord32#
- Passed 100 iterations
+ Passed 10000 iterations
Running andWord32#
- Passed 100 iterations
+ Passed 10000 iterations
Running orWord32#
- Passed 100 iterations
+ Passed 10000 iterations
Running xorWord32#
- Passed 100 iterations
+ Passed 10000 iterations
Running notWord32#
- Passed 100 iterations
+ Passed 10000 iterations
Running uncheckedShiftLWord32#
- Passed 100 iterations
+ Passed 10000 iterations
Running uncheckedShiftRLWord32#
- Passed 100 iterations
+ Passed 10000 iterations
Running word32ToInt32#
- Passed 100 iterations
+ Passed 10000 iterations
Running eqWord32#
- Passed 100 iterations
+ Passed 10000 iterations
Running geWord32#
- Passed 100 iterations
+ Passed 10000 iterations
Running gtWord32#
- Passed 100 iterations
+ Passed 10000 iterations
Running leWord32#
- Passed 100 iterations
+ Passed 10000 iterations
Running ltWord32#
- Passed 100 iterations
+ Passed 10000 iterations
Running neWord32#
- Passed 100 iterations
+ Passed 10000 iterations
Running int64ToInt#
- Passed 100 iterations
+ Passed 10000 iterations
Running intToInt64#
- Passed 100 iterations
+ Passed 10000 iterations
Running negateInt64#
- Passed 100 iterations
+ Passed 10000 iterations
Running plusInt64#
- Passed 100 iterations
+ Passed 10000 iterations
Running subInt64#
- Passed 100 iterations
+ Passed 10000 iterations
Running timesInt64#
- Passed 100 iterations
+ Passed 10000 iterations
Running quotInt64#
- Passed 100 iterations
+ Passed 10000 iterations
Running remInt64#
- Passed 100 iterations
+ Passed 10000 iterations
Running uncheckedIShiftL64#
- Passed 100 iterations
+ Passed 10000 iterations
Running uncheckedIShiftRA64#
- Passed 100 iterations
+ Passed 10000 iterations
Running uncheckedIShiftRL64#
- Passed 100 iterations
+ Passed 10000 iterations
Running int64ToWord64#
- Passed 100 iterations
+ Passed 10000 iterations
Running eqInt64#
- Passed 100 iterations
+ Passed 10000 iterations
Running geInt64#
- Passed 100 iterations
+ Passed 10000 iterations
Running gtInt64#
- Passed 100 iterations
+ Passed 10000 iterations
Running leInt64#
- Passed 100 iterations
+ Passed 10000 iterations
Running ltInt64#
- Passed 100 iterations
+ Passed 10000 iterations
Running neInt64#
- Passed 100 iterations
+ Passed 10000 iterations
Running word64ToWord#
- Passed 100 iterations
+ Passed 10000 iterations
Running wordToWord64#
- Passed 100 iterations
+ Passed 10000 iterations
Running plusWord64#
- Passed 100 iterations
+ Passed 10000 iterations
Running subWord64#
- Passed 100 iterations
+ Passed 10000 iterations
Running timesWord64#
- Passed 100 iterations
+ Passed 10000 iterations
Running quotWord64#
- Passed 100 iterations
+ Passed 10000 iterations
Running remWord64#
- Passed 100 iterations
+ Passed 10000 iterations
Running and64#
- Passed 100 iterations
+ Passed 10000 iterations
Running or64#
- Passed 100 iterations
+ Passed 10000 iterations
Running xor64#
- Passed 100 iterations
+ Passed 10000 iterations
Running not64#
- Passed 100 iterations
+ Passed 10000 iterations
Running uncheckedShiftL64#
- Passed 100 iterations
+ Passed 10000 iterations
Running uncheckedShiftRL64#
- Passed 100 iterations
+ Passed 10000 iterations
Running word64ToInt64#
- Passed 100 iterations
+ Passed 10000 iterations
Running eqWord64#
- Passed 100 iterations
+ Passed 10000 iterations
Running geWord64#
- Passed 100 iterations
+ Passed 10000 iterations
Running gtWord64#
- Passed 100 iterations
+ Passed 10000 iterations
Running leWord64#
- Passed 100 iterations
+ Passed 10000 iterations
Running ltWord64#
- Passed 100 iterations
+ Passed 10000 iterations
Running neWord64#
- Passed 100 iterations
+ Passed 10000 iterations
Running +#
- Passed 100 iterations
+ Passed 10000 iterations
Running -#
- Passed 100 iterations
+ Passed 10000 iterations
Running *#
- Passed 100 iterations
+ Passed 10000 iterations
Running timesInt2#
- Passed 100 iterations
+ Passed 10000 iterations
Running mulIntMayOflo#
- Passed 100 iterations
+ Passed 10000 iterations
Running quotInt#
- Passed 100 iterations
+ Passed 10000 iterations
Running remInt#
- Passed 100 iterations
+ Passed 10000 iterations
Running quotRemInt#
- Passed 100 iterations
+ Passed 10000 iterations
Running andI#
- Passed 100 iterations
+ Passed 10000 iterations
Running orI#
- Passed 100 iterations
+ Passed 10000 iterations
Running xorI#
- Passed 100 iterations
+ Passed 10000 iterations
Running notI#
- Passed 100 iterations
+ Passed 10000 iterations
Running negateInt#
- Passed 100 iterations
+ Passed 10000 iterations
Running addIntC#
- Passed 100 iterations
+ Passed 10000 iterations
Running subIntC#
- Passed 100 iterations
+ Passed 10000 iterations
Running >#
- Passed 100 iterations
+ Passed 10000 iterations
Running >=#
- Passed 100 iterations
+ Passed 10000 iterations
Running ==#
- Passed 100 iterations
+ Passed 10000 iterations
Running /=#
- Passed 100 iterations
+ Passed 10000 iterations
Running <#
- Passed 100 iterations
+ Passed 10000 iterations
Running <=#
- Passed 100 iterations
+ Passed 10000 iterations
Running chr#
- Passed 100 iterations
+ Passed 10000 iterations
Running int2Word#
- Passed 100 iterations
+ Passed 10000 iterations
Running uncheckedIShiftL#
- Passed 100 iterations
+ Passed 10000 iterations
Running uncheckedIShiftRA#
- Passed 100 iterations
+ Passed 10000 iterations
Running uncheckedIShiftRL#
- Passed 100 iterations
+ Passed 10000 iterations
Running plusWord#
- Passed 100 iterations
+ Passed 10000 iterations
Running addWordC#
- Passed 100 iterations
+ Passed 10000 iterations
Running subWordC#
- Passed 100 iterations
+ Passed 10000 iterations
Running plusWord2#
- Passed 100 iterations
+ Passed 10000 iterations
Running minusWord#
- Passed 100 iterations
+ Passed 10000 iterations
Running timesWord#
- Passed 100 iterations
+ Passed 10000 iterations
Running timesWord2#
- Passed 100 iterations
+ Passed 10000 iterations
Running quotWord#
- Passed 100 iterations
+ Passed 10000 iterations
Running remWord#
- Passed 100 iterations
+ Passed 10000 iterations
Running quotRemWord#
- Passed 100 iterations
+ Passed 10000 iterations
Running and#
- Passed 100 iterations
+ Passed 10000 iterations
Running or#
- Passed 100 iterations
+ Passed 10000 iterations
Running xor#
- Passed 100 iterations
+ Passed 10000 iterations
Running not#
- Passed 100 iterations
+ Passed 10000 iterations
Running uncheckedShiftL#
- Passed 100 iterations
+ Passed 10000 iterations
Running uncheckedShiftRL#
- Passed 100 iterations
+ Passed 10000 iterations
Running word2Int#
- Passed 100 iterations
+ Passed 10000 iterations
Running gtWord#
- Passed 100 iterations
+ Passed 10000 iterations
Running geWord#
- Passed 100 iterations
+ Passed 10000 iterations
Running eqWord#
- Passed 100 iterations
+ Passed 10000 iterations
Running neWord#
- Passed 100 iterations
+ Passed 10000 iterations
Running ltWord#
- Passed 100 iterations
+ Passed 10000 iterations
Running leWord#
- Passed 100 iterations
+ Passed 10000 iterations
Running popCnt8#
- Passed 100 iterations
+ Passed 10000 iterations
Running popCnt16#
- Passed 100 iterations
+ Passed 10000 iterations
Running popCnt32#
- Passed 100 iterations
+ Passed 10000 iterations
Running popCnt64#
- Passed 100 iterations
+ Passed 10000 iterations
Running popCnt#
- Passed 100 iterations
+ Passed 10000 iterations
Running pdep8#
- Passed 100 iterations
+ Passed 10000 iterations
Running pdep16#
- Passed 100 iterations
+ Passed 10000 iterations
Running pdep32#
- Passed 100 iterations
+ Passed 10000 iterations
Running pdep64#
- Passed 100 iterations
+ Passed 10000 iterations
Running pdep#
- Passed 100 iterations
+ Passed 10000 iterations
Running pext8#
- Passed 100 iterations
+ Passed 10000 iterations
Running pext16#
- Passed 100 iterations
+ Passed 10000 iterations
Running pext32#
- Passed 100 iterations
+ Passed 10000 iterations
Running pext64#
- Passed 100 iterations
+ Passed 10000 iterations
Running pext#
- Passed 100 iterations
+ Passed 10000 iterations
Running clz8#
- Passed 100 iterations
+ Passed 10000 iterations
Running clz16#
- Passed 100 iterations
+ Passed 10000 iterations
Running clz32#
- Passed 100 iterations
+ Passed 10000 iterations
Running clz64#
- Passed 100 iterations
+ Passed 10000 iterations
Running clz#
- Passed 100 iterations
+ Passed 10000 iterations
Running ctz8#
- Passed 100 iterations
+ Passed 10000 iterations
Running ctz16#
- Passed 100 iterations
+ Passed 10000 iterations
Running ctz32#
- Passed 100 iterations
+ Passed 10000 iterations
Running ctz64#
- Passed 100 iterations
+ Passed 10000 iterations
Running ctz#
- Passed 100 iterations
+ Passed 10000 iterations
Running byteSwap16#
- Passed 100 iterations
+ Passed 10000 iterations
Running byteSwap32#
- Passed 100 iterations
+ Passed 10000 iterations
Running byteSwap64#
- Passed 100 iterations
+ Passed 10000 iterations
Running byteSwap#
- Passed 100 iterations
+ Passed 10000 iterations
Running bitReverse8#
- Passed 100 iterations
+ Passed 10000 iterations
Running bitReverse16#
- Passed 100 iterations
+ Passed 10000 iterations
Running bitReverse32#
- Passed 100 iterations
+ Passed 10000 iterations
Running bitReverse64#
- Passed 100 iterations
+ Passed 10000 iterations
Running bitReverse#
- Passed 100 iterations
+ Passed 10000 iterations
Running narrow8Int#
- Passed 100 iterations
+ Passed 10000 iterations
Running narrow16Int#
- Passed 100 iterations
+ Passed 10000 iterations
Running narrow32Int#
- Passed 100 iterations
+ Passed 10000 iterations
Running narrow8Word#
- Passed 100 iterations
+ Passed 10000 iterations
Running narrow16Word#
- Passed 100 iterations
+ Passed 10000 iterations
Running narrow32Word#
- Passed 100 iterations
+ Passed 10000 iterations
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/0ed6a6375079f1c92a5ba5dfe5b6a68...
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/0ed6a6375079f1c92a5ba5dfe5b6a68...
You're receiving this email because of your account on gitlab.haskell.org.