{-# LANGUAGE CPP #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE ScopedTypeVariables #-}
import qualified ConstantsSpec
import Data.Proxy
import qualified FromIntegerSpec
import qualified FromRationalSpec
import qualified IntervalArithmeticSpec
import Numeric.Rounded.Hardware.Backend (backendName)
import qualified RoundedArithmeticSpec
import qualified ShowFloatSpec
import Test.Hspec
import qualified VectorSpec
#ifdef TEST_X87_LONG_DOUBLE
import Numeric.LongDouble (LongDouble)
import qualified X87LongDoubleSpec
#endif
#ifdef TEST_FLOAT128
import Numeric.Float128 (Float128)
import qualified Float128Spec
#endif
printBackends :: IO ()
printBackends = do
putStrLn $ "Backend for Double: " ++ backendName (Proxy :: Proxy Double)
putStrLn $ "Backend for Float: " ++ backendName (Proxy :: Proxy Float)
#ifdef TEST_X87_LONG_DOUBLE
putStrLn $ "Backend for LongDouble: " ++ backendName (Proxy :: Proxy LongDouble)
#endif
#ifdef TEST_FLOAT128
putStrLn $ "Backend for Float128: " ++ backendName (Proxy :: Proxy Float128)
#endif
main :: IO ()
main = do
printBackends
hspec $ do
describe "fromInteger" FromIntegerSpec.spec
describe "fromRational" FromRationalSpec.spec
describe "showFloat" ShowFloatSpec.spec
describe "rounded arithmetic" RoundedArithmeticSpec.spec
describe "interval arithmetic" IntervalArithmeticSpec.spec
describe "Vector" VectorSpec.spec
describe "Constants" ConstantsSpec.spec
#ifdef TEST_X87_LONG_DOUBLE
describe "x87 long double" X87LongDoubleSpec.spec
#endif
#ifdef TEST_FLOAT128
describe "Float128" Float128Spec.spec
#endif