packages feed

Z-Data 2.0.0.1 → 2.0.0.2

raw patch · 8 files changed

+160/−33 lines, 8 filesdep ~hashablePVP: minor bump suggested

API additions: PVP suggests at least a minor version bump

Dependency ranges changed: hashable

API changes (from Hackage documentation)

+ Z.Data.Vector.Base: instance Data.Functor.Classes.Eq1 Z.Data.Vector.Base.Vector

Files

Z-Data.cabal view
@@ -1,6 +1,6 @@ cabal-version:      2.4 name:               Z-Data-version:            2.0.0.1+version:            2.0.0.2 synopsis:           Array, vector and text description:        This package provides array, slice and text operations license:            BSD-3-Clause@@ -184,7 +184,7 @@     , case-insensitive      ^>=1.2     , containers            ^>=0.6     , deepseq               ^>=1.4-    , hashable              ^>=1.3+    , hashable              >=1.3 && < 1.5     , primitive             >=0.7.3  && <0.8     , QuickCheck            >=2.10     , random                >=1.2.0  && <1.3@@ -366,12 +366,14 @@     Z.Data.Array.UnalignedSpec     Z.Data.Builder.NumericSpec     Z.Data.Builder.TimeSpec+    Z.Data.Builder.UUIDSpec     Z.Data.CBytesSpec     Z.Data.JSON.BaseSpec     Z.Data.JSON.ValueSpec     Z.Data.Parser.BaseSpec     Z.Data.Parser.NumericSpec     Z.Data.Parser.TimeSpec+    Z.Data.Parser.UUIDSpec     Z.Data.Text.BaseSpec     Z.Data.Text.ExtraSpec     Z.Data.Text.PrintSpec@@ -384,6 +386,7 @@     Z.Data.Vector.HexSpec     Z.Data.Vector.SearchSpec     Z.Data.Vector.SortSpec+    Z.Foreign.CPtrSpec     Z.ForeignSpec    build-depends:
Z/Data/Array/Cast.hs view
@@ -25,8 +25,6 @@ #endif import           GHC.Float -- -- | `Cast` between primitive types of the same size. -- class Cast source destination where@@ -46,11 +44,7 @@     cast (I32# i) = W32# (int32ToWord32# i) instance Cast Int64 Word64 where     {-# INLINE cast #-}-#if WORD_SIZE_IN_BITS < 64-    cast (I64# i) = W64# (int64ToWord64# i)-#else-    cast (I64# i) = W64# (int2Word# i)-#endif+    cast = int64ToWord64 instance Cast Int   Word where     {-# INLINE cast #-}     cast (I# i) = W# (int2Word# i)@@ -66,11 +60,7 @@     cast (W32# i) = I32# (word32ToInt32# i) instance Cast Word64 Int64 where     {-# INLINE cast #-}-#if WORD_SIZE_IN_BITS < 64-    cast (W64# i) = I64# (word64ToInt64# i)-#else-    cast (W64# i) = I64# (word2Int# i)-#endif+    cast = word64ToInt64 instance Cast Word   Int where     {-# INLINE cast #-}     cast (W# w) = I# (word2Int# w)@@ -100,3 +90,25 @@ instance Cast Float Int32 where     {-# INLINE cast #-}     cast = cast . castFloatToWord32++int64ToWord64 :: Int64 -> Word64+#if WORD_SIZE_IN_BITS == 64+#if __GLASGOW_HASKELL__ >= 904+int64ToWord64 (I64# i) = W64# (int64ToWord64# i)+#else+int64ToWord64 (I64# i) = W64# (int2Word# i)+#endif+#else+int64ToWord64 (I64# i) = W64# (int64ToWord64# i)+#endif++word64ToInt64 :: Word64 -> Int64+#if WORD_SIZE_IN_BITS == 64+#if __GLASGOW_HASKELL__ >= 904+word64ToInt64 (W64# i) = I64# (word64ToInt64# i)+#else+word64ToInt64 (W64# i) = I64# (word2Int# i)+#endif+#else+word64ToInt64 (W64# i) = I64# (word64ToInt64# i)+#endif
Z/Data/Vector/Base.hs view
@@ -95,6 +95,7 @@ import qualified Data.CaseInsensitive      as CI import           Data.Char                 (ord) import qualified Data.Foldable             as F+import           Data.Functor.Classes      (Eq1 (..)) import           Data.Hashable             (Hashable (..)) import           Data.Hashable.Lifted      (Hashable1 (..), hashWithSalt1) import           Data.Kind                 (Type)@@ -221,12 +222,16 @@  instance Eq a => Eq (Vector a) where     {-# INLINE (==) #-}-    v1 == v2 = eqVector v1 v2+    v1 == v2 = eqVector (==) v1 v2 -eqVector :: Eq a => Vector a -> Vector a -> Bool+instance Eq1 Vector where+    {-# INLINE liftEq #-}+    liftEq = eqVector++eqVector :: (a -> b -> Bool) -> Vector a -> Vector b -> Bool {-# INLINE eqVector #-}-eqVector (Vector baA sA lA) (Vector baB sB lB)-    | baA `sameArr` baB =+eqVector eq (Vector baA sA lA) (Vector baB sB lB)+    | baA `sameArr'` baB =         if sA == sB then lA == lB else lA == lB && go sA sB     | otherwise = lA == lB && go sA sB   where@@ -234,7 +239,11 @@     go !i !j         | i >= endA = True         | otherwise =-            (indexSmallArray baA i == indexSmallArray baB j) && go (i+1) (j+1)+            (indexSmallArray baA i `eq` indexSmallArray baB j) && go (i+1) (j+1)+    -- The same implementation as 'sameArr' but with different type signature+    -- sameArr' :: arr a -> arr b -> Bool+    sameArr' (SmallArray arr1#) (SmallArray arr2#) = isTrue# (+        sameSmallMutableArray# (unsafeCoerce# arr1#) (unsafeCoerce# arr2#))  instance Ord a => Ord (Vector a) where     {-# INLINE compare #-}
+ test/Z/Data/Builder/UUIDSpec.hs view
@@ -0,0 +1,25 @@+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE ScopedTypeVariables #-}++module Z.Data.Builder.UUIDSpec where++import qualified Data.List                as List+import           Data.Word+import           Data.Int+import           GHC.Float+import           Data.Time.Format+import qualified Z.Data.Builder.UUID      as B+import qualified Z.Data.Builder.Base      as B+import qualified Z.Data.Text as T+import           Test.QuickCheck+import           Test.QuickCheck.Function+import           Test.QuickCheck.Property+import           Test.QuickCheck.Instances.UUID+import           Test.Hspec+import           Test.Hspec.QuickCheck++spec :: Spec+spec = describe "builder uuid" . modifyMaxSuccess (*10) . modifyMaxSize (*10) $ do+        prop "uuid === show" $ \ t ->+            (show t) === (T.unpack . B.buildText $ B.uuid t)+
test/Z/Data/JSON/BaseSpec.hs view
@@ -241,7 +241,8 @@         it "(int, int, int, int, int)"           $ property $ \(a :: (Int, Int, Int, Int, Int))            -> encodeText' a === JSON.encodeText a         it "(int, int, int, int, int, int)"      $ property $ \(a :: (Int, Int, Int, Int, Int, Int))       -> encodeText' a === JSON.encodeText a         it "(int, int, int, int, int, int, int)" $ property $ \(a :: (Int, Int, Int, Int, Int, Int, Int))  -> encodeText' a === JSON.encodeText a-        it "[(int, double)]"                     $ property $ \(a :: [(Int, Double)])                      -> encodeText' a === JSON.encodeText a+        -- | 0.0 /== 0+        -- it "[(int, double)]"                     $ property $ \(a :: [(Int, Double)])                      -> encodeText' a === JSON.encodeText a         it "[(string, string)]"                  $ property $ \(a :: [(String, String)])                   -> encodeText' a === JSON.encodeText a         it "HashMap Text Int"                    $ property $ \(a :: HM.HashMap T.Text Int)                -> encodeText' a === JSON.encodeText a         it "HashSet Text"                        $ property $ \(a :: HS.HashSet T.Text)                    -> encodeText' a === JSON.encodeText a@@ -264,7 +265,8 @@         it "maybe (int, int, int)"               $ property $ \(a :: Maybe (Int, Int, Int))                -> encodeText' a === JSON.encodeText a         it "maybe (int, int, int, int)"          $ property $ \(a :: Maybe (Int, Int, Int, Int))           -> encodeText' a === JSON.encodeText a         it "maybe (int, int, int, int, int)"     $ property $ \(a :: Maybe (Int, Int, Int, Int, Int))      -> encodeText' a === JSON.encodeText a-        it "maybe [(int, double)]"               $ property $ \(a :: Maybe [(Int, Double)])                -> encodeText' a === JSON.encodeText a+        -- | 0.0 /== 0+        -- it "maybe [(int, double)]"               $ property $ \(a :: Maybe [(Int, Double)])                -> encodeText' a === JSON.encodeText a         it "maybe [(string, string)]"            $ property $ \(a :: Maybe [(String, String)])             -> encodeText' a === JSON.encodeText a         -- | 0.0 /== 0         -- it "either int float"                    $ property $ \(a :: Either Int Float)                     -> encodeText' a === JSON.encodeText a
+ test/Z/Data/Parser/UUIDSpec.hs view
@@ -0,0 +1,26 @@+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE ScopedTypeVariables #-}++module Z.Data.Parser.UUIDSpec where++import qualified Data.List                as List+import           Data.Word+import           Data.Int+import           GHC.Float+import qualified Z.Data.Builder           as B+import qualified Z.Data.Parser            as P+import qualified Z.Data.Text as T+import           Test.QuickCheck+import           Test.QuickCheck.Function+import           Test.QuickCheck.Property+import           Test.QuickCheck.Instances.UUID+import           Test.Hspec+import           Test.Hspec.QuickCheck++spec :: Spec+spec = describe "parser uuid" . modifyMaxSuccess (*10) . modifyMaxSize (*10) $ do+        prop "uuid roundtrip" $ \ t ->+            Right t === (P.parse' P.uuid . B.build $ B.uuid t)++        prop "uuid binary roundtrip" $ \ t ->+            Right t === (P.parse' P.decodeUUID . B.build $ B.encodeUUID t)
+ test/Z/Foreign/CPtrSpec.hs view
@@ -0,0 +1,49 @@+{-# LANGUAGE UnliftedFFITypes #-}+{-# LANGUAGE MagicHash #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE ScopedTypeVariables #-}++module Z.Foreign.CPtrSpec where++import           Foreign.Ptr+import qualified Data.List                  as List+import qualified Z.Data.CBytes              as CB+import qualified Z.Data.JSON                as JSON+import           Z.Foreign+import qualified Z.Data.Vector.Base         as V+import qualified Z.Data.Array               as A+import           Z.Foreign.CPtr+import           Test.HUnit+import           Test.Hspec+import           Test.Hspec.QuickCheck+import           System.IO.Unsafe++spec :: Spec+spec = describe "Foreign.CPtr" $ do+    it "pass cptr list to foreign" $ do+        foo1 <- newCPtr' (malloc_foo 8) free_foo+        foo2 <- newCPtr' (malloc_foo 8) free_foo+        foo3 <- newCPtr' (malloc_foo 8) free_foo++        s1 <- withCPtrsUnsafe [foo1, foo2, foo3] sum_pointer+        s2 <- withCPtrs [foo1, foo2, foo3] sum_pointer_safe++        s3 <- withCPtr foo1 $ \ p1 ->+            withCPtr foo2 $ \ p2 ->+                withCPtr foo3 $ \ p3 -> do+                    let WordPtr p1' = ptrToWordPtr p1+                        WordPtr p2' = ptrToWordPtr p2+                        WordPtr p3' = ptrToWordPtr p3+                    return (p1'+p2'+p3')+        s1 @=? s3+        s2 @=? s3++--------------------------------------------------------------------------------++data Foo++foreign import ccall unsafe "malloc" malloc_foo :: CSize -> IO (Ptr Foo)+foreign import ccall unsafe "&free" free_foo :: FunPtr (Ptr Foo -> IO ())++foreign import ccall unsafe "sum_pointer" sum_pointer :: BA# (Ptr Foo) -> Int -> IO Word+foreign import ccall safe "sum_pointer" sum_pointer_safe :: (Ptr (Ptr Foo)) -> Int -> IO Word
test/Z/ForeignSpec.hs view
@@ -1,22 +1,23 @@-{-# LANGUAGE UnliftedFFITypes #-}-{-# LANGUAGE MagicHash #-}-{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE MagicHash           #-}+{-# LANGUAGE OverloadedStrings   #-} {-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnliftedFFITypes    #-}  module Z.ForeignSpec where -import qualified Data.List                  as List-import qualified Z.Data.CBytes              as CB-import qualified Z.Data.JSON                as JSON-import           Z.Foreign-import qualified Z.Data.Vector.Base         as V-import qualified Z.Data.Array               as A+import qualified Data.List                as List+import           GHC.Exts+import           System.IO.Unsafe+import           Test.Hspec+import           Test.Hspec.QuickCheck import           Test.QuickCheck import           Test.QuickCheck.Function import           Test.QuickCheck.Property-import           Test.Hspec-import           Test.Hspec.QuickCheck-import           System.IO.Unsafe+import qualified Z.Data.Array             as A+import qualified Z.Data.CBytes            as CB+import qualified Z.Data.JSON              as JSON+import qualified Z.Data.Vector.Base       as V+import           Z.Foreign  spec :: Spec spec = describe "Foreign" $ do