half 0.3.1 → 0.3.2
raw patch · 5 files changed
+34/−85 lines, 5 filesdep −ghc-primdep ~QuickCheckdep ~basedep ~deepseqnew-uploaderPVP ok
version bump matches the API change (PVP)
Dependencies removed: ghc-prim
Dependency ranges changed: QuickCheck, base, deepseq, template-haskell
API changes (from Hackage documentation)
Files
- CHANGELOG.markdown +4/−0
- half.cabal +17/−28
- src/Numeric/Half.hs +0/−6
- src/Numeric/Half/Internal.hs +4/−40
- test/Spec.hs +9/−11
CHANGELOG.markdown view
@@ -1,3 +1,7 @@+0.3.2 [2024.12.04]+------------------+* Drop support for pre-8.0 versions of GHC.+ 0.3.1 [2021-01-04] ------------------ * Downgraded testing claims that NaNs will round-trip, as 32-bit GHCs aren't fulfilling that promise.
half.cabal view
@@ -1,6 +1,6 @@ cabal-version: >=1.10 name: half-version: 0.3.1+version: 0.3.2 license: BSD3 license-file: LICENSE copyright: Copyright (C) 2014 Edward A. Kmett@@ -19,16 +19,19 @@ README.markdown CHANGELOG.markdown -tested-with: GHC == 7.4.2- , GHC == 7.6.3- , GHC == 7.8.4- , GHC == 7.10.3- , GHC == 8.0.2+tested-with: GHC == 8.0.2 , GHC == 8.2.2 , GHC == 8.4.4 , GHC == 8.6.5 , GHC == 8.8.4- , GHC == 8.10.3+ , GHC == 8.10.7+ , GHC == 9.0.2+ , GHC == 9.2.8+ , GHC == 9.4.8+ , GHC == 9.6.6+ , GHC == 9.8.4+ , GHC == 9.10.1+ , GHC == 9.12.1 source-repository head type: git@@ -41,33 +44,19 @@ Numeric.Half.Internal hs-source-dirs: src other-extensions: BangPatterns CPP DeriveDataTypeable DeriveGeneric- ForeignFunctionInterface- ghc-options: -Wall -fwarn-tabs -O2+ DeriveLift ForeignFunctionInterface PatternSynonyms+ StandaloneDeriving+ ghc-options: -Wall -Wtabs -O2 -Wno-missing-pattern-synonym-signatures build-depends:- base >=4.5 && <5,+ base >=4.9 && <5, binary >=0.5.1.0 && <0.9,- deepseq >=1.3.0.0 && <1.5,- template-haskell+ deepseq >=1.4.2.0 && <1.6,+ template-haskell >=2.11 if !impl(ghcjs) c-sources: cbits/half.c - if impl(ghc >= 8.0)- other-extensions: DeriveLift StandaloneDeriving- else- other-extensions: TemplateHaskell-- if impl(ghc >=7.8)- other-extensions: PatternSynonyms-- if impl(ghc <7.6)- build-depends:- ghc-prim-- if impl(ghc >=8)- ghc-options: -Wno-missing-pattern-synonym-signatures- test-suite spec default-language: Haskell2010 type: exitcode-stdio-1.0@@ -80,6 +69,6 @@ binary, bytestring, half,- QuickCheck >=2.14.1 && <2.15,+ QuickCheck >=2.14.1 && <2.16, test-framework, test-framework-quickcheck2
src/Numeric/Half.hs view
@@ -1,8 +1,5 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE Safe #-}-#if __GLASGOW_HASKELL__ >= 708 {-# LANGUAGE PatternSynonyms #-}-#endif ----------------------------------------------------------------------------- -- |@@ -23,8 +20,6 @@ , fromHalf , toHalf -- * Patterns- -- | These are available with GHC-7.8 and later.-#if __GLASGOW_HASKELL__ >= 708 , pattern POS_INF , pattern NEG_INF , pattern QNaN@@ -36,7 +31,6 @@ , pattern HALF_DIG , pattern HALF_MIN_10_EXP , pattern HALF_MAX_10_EXP-#endif ) where import Numeric.Half.Internal
src/Numeric/Half/Internal.hs view
@@ -1,22 +1,11 @@ {-# LANGUAGE BangPatterns #-} {-# LANGUAGE CPP #-}-{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE ForeignFunctionInterface #-}-#if __GLASGOW_HASKELL__ >= 800 {-# LANGUAGE TemplateHaskellQuotes #-}-#else-{-# LANGUAGE TemplateHaskell #-}-#endif-#if __GLASGOW_HASKELL__ >= 708 {-# LANGUAGE PatternSynonyms #-}-#endif {-# LANGUAGE Trustworthy #-} -#ifndef MIN_VERSION_base-#define MIN_VERSION_base(x,y,z) 1-#endif- ----------------------------------------------------------------------------- -- | -- Copyright : (C) 2014 Edward Kmett@@ -36,8 +25,6 @@ , fromHalf , toHalf -- * Patterns- -- | These are available with GHC-7.8 and later.-#if __GLASGOW_HASKELL__ >= 708 , pattern POS_INF , pattern NEG_INF , pattern QNaN@@ -49,7 +36,6 @@ , pattern HALF_DIG , pattern HALF_MIN_10_EXP , pattern HALF_MAX_10_EXP-#endif -- * Pure conversions , pure_floatToHalf , pure_halfToFloat@@ -59,19 +45,13 @@ import Data.Bits import Data.Function (on) import Data.Int-import Data.Typeable import Foreign.C.Types (CUShort (..)) import Foreign.Ptr (castPtr) import Foreign.Storable import GHC.Generics-#ifdef WITH_TEMPLATE_HASKELL-#endif import Text.Read (Read (..)) import Language.Haskell.TH.Syntax (Lift (..))-#if __GLASGOW_HASKELL__ < 800-import Language.Haskell.TH-#endif import Data.Binary (Binary (..)) @@ -91,18 +71,13 @@ -- {-# RULES "fromHalf" realToFrac = fromHalf #-} #endif +-- | A half-precision floating point value newtype-#if __GLASGOW_HASKELL__ >= 706 {-# CTYPE "unsigned short" #-}-#endif- Half = Half { getHalf :: CUShort } deriving (Generic, Typeable)+ Half = Half { getHalf :: CUShort } deriving Generic instance NFData Half where-#if MIN_VERSION_deepseq(1,4,0) rnf (Half f) = rnf f-#else- rnf (Half f) = f `seq` ()-#endif instance Binary Half where put (Half (CUShort w)) = put w@@ -188,8 +163,6 @@ isZero :: Half -> Bool isZero (Half h) = h .&. 0x7fff == 0 -#if __GLASGOW_HASKELL__ >= 708- -- | Positive infinity pattern POS_INF = Half 0x7c00 @@ -217,14 +190,12 @@ -- | Number of base 10 digits that can be represented without change pattern HALF_DIG = 2 --- Minimum positive integer such that 10 raised to that power is a normalized half+-- | Minimum positive integer such that 10 raised to that power is a normalized half pattern HALF_MIN_10_EXP = -4 --- Maximum positive integer such that 10 raised to that power is a normalized half+-- | Maximum positive integer such that 10 raised to that power is a normalized half pattern HALF_MAX_10_EXP = 4 -#endif- instance Num Half where a * b = toHalf (fromHalf a * fromHalf b) a - b = toHalf (fromHalf a - fromHalf b)@@ -234,17 +205,10 @@ signum = toHalf . signum . fromHalf fromInteger a = toHalf (fromInteger a) -#if __GLASGOW_HASKELL__ >= 800 instance Lift Half where lift (Half (CUShort w)) = [| Half (CUShort w) |] #if MIN_VERSION_template_haskell(2,16,0) liftTyped (Half (CUShort w)) = [|| Half (CUShort w) ||]-#endif-#else-instance Lift Half where- lift (Half (CUShort w)) =- appE (conE 'Half) . appE (conE 'CUShort) . litE . integerL . fromIntegral $- w #endif -- Adapted from ghc/rts/StgPrimFloat.c
test/Spec.hs view
@@ -1,9 +1,5 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE OverloadedStrings #-}-#if __GLASGOW_HASKELL__ >= 708 && __GLASGOW_HASKELL__ < 710-{-# LANGUAGE PatternSynonyms #-}-#endif-{-# OPTIONS_GHC -fno-warn-orphans #-}+{-# OPTIONS_GHC -Wno-orphans #-} import Numeric.Half import Numeric.Half.Internal@@ -74,7 +70,6 @@ isInfinite snan === False ] -#if __GLASGOW_HASKELL__ >= 708 , testGroup "Patterns" [ testProperty "QNaN" $ case qnan of QNaN -> True@@ -89,7 +84,6 @@ NEG_INF -> True _ -> False ]-#endif -- With GHCJS these tests are trivially true. , testGroup "Native fromHalf against C version"@@ -148,7 +142,7 @@ prop_to_half i = let ref = getHalf $ toHalf i imp = getHalf $ pure_floatToHalf i- in ref == imp+ in (ref == imp) || (isNaN (Half ref) && isNaN (Half imp)) -- cover all range of Half(not Float) list1 :: [Float]@@ -156,11 +150,15 @@ r1 = filter (not . isNaN) $ map (fromHalf . Half) [0 .. 65535] r2 = sort $ filter (not . isInfinite) $ filter (>= 0) r1 r3 = r2 ++ [last r2 + 2 ** 11]- r4 = zipWith (\a b -> let d = (b - a) / 4- in [a, a + d, a + d * 2, a + d * 3])- r3 (tail r3)+ r4 = zipWithTail (\a b -> let d = (b - a) / 4+ in [a, a + d, a + d * 2, a + d * 3])+ r3 r5 = concat r4 ++ [last r3] in r5++zipWithTail :: (a -> a -> b) -> [a] -> [b]+zipWithTail _ [] = []+zipWithTail f xs@(_:xss) = zipWith f xs xss list2 :: [Float] list2 = map negate list1