packages feed

numeric-extras 0.0.3 → 0.1

raw patch · 4 files changed

+176/−12 lines, 4 filesnew-uploader

Files

.travis.yml view
@@ -1,1 +1,90 @@-language: haskell+# This file has been generated -- see https://github.com/hvr/multi-ghc-travis+language: c+sudo: false++cache:+  directories:+    - $HOME/.cabsnap+    - $HOME/.cabal/packages++before_cache:+  - rm -fv $HOME/.cabal/packages/hackage.haskell.org/build-reports.log+  - rm -fv $HOME/.cabal/packages/hackage.haskell.org/00-index.tar++matrix:+  include:+    - env: CABALVER=1.16 GHCVER=7.0.4+      compiler: ": #GHC 7.0.4"+      addons: {apt: {packages: [cabal-install-1.16,ghc-7.0.4], sources: [hvr-ghc]}}+    - env: CABALVER=1.16 GHCVER=7.2.2+      compiler: ": #GHC 7.2.2"+      addons: {apt: {packages: [cabal-install-1.16,ghc-7.2.2], sources: [hvr-ghc]}}+    - env: CABALVER=1.16 GHCVER=7.4.2+      compiler: ": #GHC 7.4.2"+      addons: {apt: {packages: [cabal-install-1.16,ghc-7.4.2], sources: [hvr-ghc]}}+    - env: CABALVER=1.16 GHCVER=7.6.3+      compiler: ": #GHC 7.6.3"+      addons: {apt: {packages: [cabal-install-1.16,ghc-7.6.3], sources: [hvr-ghc]}}+    - env: CABALVER=1.18 GHCVER=7.8.4+      compiler: ": #GHC 7.8.4"+      addons: {apt: {packages: [cabal-install-1.18,ghc-7.8.4], sources: [hvr-ghc]}}+    - env: CABALVER=1.22 GHCVER=7.10.2+      compiler: ": #GHC 7.10.2"+      addons: {apt: {packages: [cabal-install-1.22,ghc-7.10.2], sources: [hvr-ghc]}}++before_install:+ - unset CC+ - export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$PATH++install:+ - cabal --version+ - echo "$(ghc --version) [$(ghc --print-project-git-commit-id 2> /dev/null || echo '?')]"+ - if [ -f $HOME/.cabal/packages/hackage.haskell.org/00-index.tar.gz ];+   then+     zcat $HOME/.cabal/packages/hackage.haskell.org/00-index.tar.gz >+          $HOME/.cabal/packages/hackage.haskell.org/00-index.tar;+   fi+ - travis_retry cabal update -v+ - sed -i 's/^jobs:/-- jobs:/' ${HOME}/.cabal/config+ - cabal install --only-dependencies --enable-tests --enable-benchmarks --dry -v > installplan.txt+ - sed -i -e '1,/^Resolving /d' installplan.txt; cat installplan.txt++# check whether current requested install-plan matches cached package-db snapshot+ - if diff -u installplan.txt $HOME/.cabsnap/installplan.txt;+   then+     echo "cabal build-cache HIT";+     rm -rfv .ghc;+     cp -a $HOME/.cabsnap/ghc $HOME/.ghc;+     cp -a $HOME/.cabsnap/lib $HOME/.cabsnap/share $HOME/.cabsnap/bin $HOME/.cabal/;+   else+     echo "cabal build-cache MISS";+     rm -rf $HOME/.cabsnap;+     mkdir -p $HOME/.ghc $HOME/.cabal/lib $HOME/.cabal/share $HOME/.cabal/bin;+     cabal install --only-dependencies --enable-tests --enable-benchmarks;+   fi+ +# snapshot package-db on cache miss+ - if [ ! -d $HOME/.cabsnap ];+   then+      echo "snapshotting package-db to build-cache";+      mkdir $HOME/.cabsnap;+      cp -a $HOME/.ghc $HOME/.cabsnap/ghc;+      cp -a $HOME/.cabal/lib $HOME/.cabal/share $HOME/.cabal/bin installplan.txt $HOME/.cabsnap/;+   fi++# Here starts the actual work to be performed for the package under test;+# any command which exits with a non-zero exit code causes the build to fail.+script:+ - if [ -f configure.ac ]; then autoreconf -i; fi+ - cabal configure --enable-tests --enable-benchmarks -v2  # -v2 provides useful information for debugging+ - cabal build   # this builds all libraries and executables (including tests/benchmarks)+ - cabal test+ - cabal sdist   # tests that a source-distribution can be generated++# Check that the resulting source distribution can be built & installed.+# If there are no other `.tar.gz` files in `dist`, this can be even simpler:+# `cabal install --force-reinstalls dist/*-*.tar.gz`+ - SRC_TGZ=$(cabal info . | awk '{print $2;exit}').tar.gz &&+   (cd dist && cabal install --force-reinstalls "$SRC_TGZ")++# EOF
CHANGELOG.markdown view
@@ -1,3 +1,7 @@+0.1+-----+* Added functions `floor`, `ceil`, `trunc`, `modf` and `remainder`+ 0.0.3 ----- * Marked `Numeric.Extras` `Trustworthy`.
Numeric/Extras.hs view
@@ -7,9 +7,20 @@     ( RealExtras(..)     ) where +#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ < 710+import Control.Applicative ((<$>), (<*>))+#endif+import Control.Arrow ((***)) import Foreign import Foreign.C.Types+#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 702+import System.IO.Unsafe (unsafeDupablePerformIO)+#else+import System.IO.Unsafe (unsafePerformIO)+#endif +{-# ANN module "HLint: ignore Use camelCase" #-}+ class (Storable (C a), RealFloat (C a), RealFloat a) => RealExtras a where     type C a :: *     fmod :: a -> a -> a@@ -18,6 +29,11 @@     hypot :: a -> a -> a     cbrt  :: a -> a     erf   :: a -> a+    floor :: a -> a+    ceil  :: a -> a+    trunc :: a -> a+    modf  :: a -> (a, a)+    remainder :: a -> a -> a  instance RealExtras Double where     type C Double = CDouble@@ -27,15 +43,31 @@     hypot = lift2D c_hypot     cbrt = lift1D c_cbrt     erf = lift1D c_erf+    floor = lift1D c_floor+    ceil  = lift1D c_ceil+    trunc = lift1D c_trunc+    modf = lift1D2 c_modf+    remainder = lift2D c_remainder  lift1D :: (CDouble -> CDouble) -> Double -> Double lift1D f a = realToFrac (f (realToFrac a)) {-# INLINE lift1D #-} +lift1D2 :: (CDouble -> (CDouble, CDouble)) -> Double -> (Double, Double)+lift1D2 f a = (realToFrac *** realToFrac) (f (realToFrac a))+{-# INLINE lift1D2 #-}+ lift2D :: (CDouble -> CDouble -> CDouble) -> Double -> Double -> Double lift2D f a b = realToFrac (f (realToFrac a) (realToFrac b)) {-# INLINE lift2D #-} +c_modf :: CDouble -> (CDouble, CDouble)+#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 702+c_modf a = unsafeDupablePerformIO $ alloca $ \i -> (,) <$> c_modf_imp a i <*> peek i+#else+c_modf a = unsafePerformIO $ alloca $ \i -> (,) <$> c_modf_imp a i <*> peek i+#endif+ instance RealExtras Float where     type C Float = CFloat     fmod = lift2F c_fmodf@@ -44,39 +76,75 @@     hypot = lift2F c_hypotf     cbrt  = lift1F c_cbrtf     erf   = lift1F c_erff+    floor = lift1F c_floorf+    ceil  = lift1F c_ceilf+    trunc = lift1F c_truncf+    modf = lift1F2 c_modff+    remainder = lift2F c_remainderf  lift1F :: (CFloat -> CFloat) -> Float -> Float lift1F f a = realToFrac (f (realToFrac a)) {-# INLINE lift1F #-} +lift1F2 :: (CFloat -> (CFloat, CFloat)) -> Float -> (Float, Float)+lift1F2 f a = (realToFrac *** realToFrac) (f (realToFrac a))+{-# INLINE lift1F2 #-}+ lift2F :: (CFloat -> CFloat -> CFloat) -> Float -> Float -> Float lift2F f a b = realToFrac (f (realToFrac a) (realToFrac b)) {-# INLINE lift2F #-} -foreign import ccall unsafe "math.h fmod" +c_modff :: CFloat -> (CFloat, CFloat)+#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 702+c_modff a = unsafeDupablePerformIO $ alloca $ \i -> (,) <$> c_modff_imp a i <*> peek i+#else+c_modff a = unsafePerformIO $ alloca $ \i -> (,) <$> c_modff_imp a i <*> peek i+#endif++foreign import ccall unsafe "math.h fmod"     c_fmod :: CDouble -> CDouble -> CDouble-foreign import ccall unsafe "math.h expm1" +foreign import ccall unsafe "math.h expm1"     c_expm1 :: CDouble -> CDouble-foreign import ccall unsafe "math.h log1p" +foreign import ccall unsafe "math.h log1p"     c_log1p :: CDouble -> CDouble-foreign import ccall unsafe "math.h hypot" +foreign import ccall unsafe "math.h hypot"     c_hypot :: CDouble -> CDouble -> CDouble-foreign import ccall unsafe "math.h cbrt" +foreign import ccall unsafe "math.h cbrt"     c_cbrt :: CDouble -> CDouble foreign import ccall unsafe "math.h erf"     c_erf :: CDouble -> CDouble+foreign import ccall unsafe "math.h floor"+    c_floor :: CDouble -> CDouble+foreign import ccall unsafe "math.h ceil"+    c_ceil :: CDouble -> CDouble+foreign import ccall unsafe "math.h trunc"+    c_trunc :: CDouble -> CDouble+foreign import ccall unsafe "math.h modf"+    c_modf_imp :: CDouble -> Ptr CDouble -> IO CDouble+foreign import ccall unsafe "math.h remainder"+    c_remainder :: CDouble -> CDouble -> CDouble -foreign import ccall unsafe "math.h fmodf" +foreign import ccall unsafe "math.h fmodf"     c_fmodf :: CFloat -> CFloat -> CFloat-foreign import ccall unsafe "math.h expm1f" +foreign import ccall unsafe "math.h expm1f"     c_expm1f :: CFloat -> CFloat-foreign import ccall unsafe "math.h log1pf" +foreign import ccall unsafe "math.h log1pf"     c_log1pf :: CFloat -> CFloat-foreign import ccall unsafe "math.h hypotf" +foreign import ccall unsafe "math.h hypotf"     c_hypotf :: CFloat -> CFloat -> CFloat-foreign import ccall unsafe "math.h cbrtf" +foreign import ccall unsafe "math.h cbrtf"     c_cbrtf :: CFloat -> CFloat foreign import ccall unsafe "math.h erff"     c_erff :: CFloat -> CFloat+foreign import ccall unsafe "math.h floorf"+    c_floorf :: CFloat -> CFloat+foreign import ccall unsafe "math.h ceilf"+    c_ceilf :: CFloat -> CFloat+foreign import ccall unsafe "math.h truncf"+    c_truncf :: CFloat -> CFloat+foreign import ccall unsafe "math.h modff"+    c_modff_imp :: CFloat -> Ptr CFloat -> IO CFloat+foreign import ccall unsafe "math.h remainderf"+    c_remainderf :: CFloat -> CFloat -> CFloat  default (Double)
numeric-extras.cabal view
@@ -1,6 +1,7 @@ name:              numeric-extras-version:           0.0.3+version:           0.1 synopsis:          Useful tools from the C standard library+description:       Useful tools from the C standard library homepage:          http://github.com/ekmett/numeric-extras bug-reports:       http://github.com/ekmett/numeric-extras/issues license:           BSD3@@ -10,6 +11,8 @@ category:          Math build-type:        Simple cabal-version:     >=1.6+tested-with:       GHC ==7.0.4, GHC ==7.2.2, GHC ==7.4.2,+                   GHC ==7.6.3, GHC ==7.8.4, GHC ==7.10.2  extra-source-files: .travis.yml CHANGELOG.markdown