1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Language.Futhark.PrimitiveTests
( tests,
arbitraryPrimValOfType,
)
where
import Control.Applicative
import Futhark.Util (convFloat)
import Language.Futhark.Primitive
import Test.QuickCheck
import Test.Tasty
import Test.Tasty.HUnit
import Prelude
tests :: TestTree
tests = testGroup "PrimitiveTests" [propPrimValuesHaveRightType]
propPrimValuesHaveRightType :: TestTree
propPrimValuesHaveRightType =
testGroup
"propPrimValuesHaveRightTypes"
[ testCase (show t ++ " has blank of right type") $
primValueType (blankPrimValue t) @?= t
| t <- [minBound .. maxBound]
]
instance Arbitrary IntType where
arbitrary = elements [minBound .. maxBound]
instance Arbitrary FloatType where
arbitrary = elements [minBound .. maxBound]
instance Arbitrary PrimType where
arbitrary = elements [minBound .. maxBound]
instance Arbitrary IntValue where
arbitrary =
oneof
[ Int8Value <$> arbitrary,
Int16Value <$> arbitrary,
Int32Value <$> arbitrary,
Int64Value <$> arbitrary
]
instance Arbitrary Half where
arbitrary = (convFloat :: Float -> Half) <$> arbitrary
instance Arbitrary FloatValue where
arbitrary =
oneof
[ Float16Value <$> arbitrary,
Float32Value <$> arbitrary,
Float64Value <$> arbitrary
]
instance Arbitrary PrimValue where
arbitrary =
oneof
[ IntValue <$> arbitrary,
FloatValue <$> arbitrary,
BoolValue <$> arbitrary,
pure UnitValue
]
arbitraryPrimValOfType :: PrimType -> Gen PrimValue
arbitraryPrimValOfType (IntType Int8) = IntValue . Int8Value <$> arbitrary
arbitraryPrimValOfType (IntType Int16) = IntValue . Int16Value <$> arbitrary
arbitraryPrimValOfType (IntType Int32) = IntValue . Int32Value <$> arbitrary
arbitraryPrimValOfType (IntType Int64) = IntValue . Int64Value <$> arbitrary
arbitraryPrimValOfType (FloatType Float16) = FloatValue . Float16Value <$> arbitrary
arbitraryPrimValOfType (FloatType Float32) = FloatValue . Float32Value <$> arbitrary
arbitraryPrimValOfType (FloatType Float64) = FloatValue . Float32Value <$> arbitrary
arbitraryPrimValOfType Bool = BoolValue <$> arbitrary
arbitraryPrimValOfType Unit = pure UnitValue
|