packages feed

fp-ieee-0.1.0: decimal-test/Spec.hs

{-# LANGUAGE NumericUnderscores #-}
import qualified NextFloatSpec
import           Numeric.Decimal
import           Numeric.Floating.IEEE
import           Test.Hspec
import           Test.Hspec.Core.Spec

allowFailure :: String -> Item a -> Item a
allowFailure message item@(Item { itemExample = origExample }) = item { itemExample = newExample }
  where
    newExample params around callback = do
      result <- origExample params around callback
      case result of
        Result { resultStatus = Failure loc reason } -> do
          let message' = case reason of
                           NoReason -> message
                           _ -> message ++ ": " ++ show reason
          return result { resultStatus = Pending loc (Just message') }
        _ -> return result

main :: IO ()
main = hspec $ do
  mapSpecItem_ (allowFailure "decimal-arithmetic's floatRange may be incorrect") $ do
    it "maxFinite :: Decimal32" $ (maxFinite :: Decimal32) == 9.999_999e96 -- 7 digits
    it "maxFinite :: Decimal64" $ (maxFinite :: Decimal64) == 9.999_999_999_999_999e384 -- 16 digits
    it "maxFinite :: Decimal128" $ (maxFinite :: Decimal128) == 9.999_999_999_999_999_999_999_999_999_999_999e6144 -- 34 digits
  describe "NextFloat" NextFloatSpec.spec