packages feed

chronologique 0.2.1.0 → 0.3.0.0

raw patch · 4 files changed

+92/−8 lines, 4 filesdep +vectorPVP ok

version bump matches the API change (PVP)

Dependencies added: vector

API changes (from Hackage documentation)

+ Chrono.TimeStamp: instance Data.Vector.Generic.Base.Vector Data.Vector.Unboxed.Base.Vector Chrono.TimeStamp.TimeStamp
+ Chrono.TimeStamp: instance Data.Vector.Generic.Mutable.Base.MVector Data.Vector.Unboxed.Base.MVector Chrono.TimeStamp.TimeStamp
+ Chrono.TimeStamp: instance Data.Vector.Unboxed.Base.Unbox Chrono.TimeStamp.TimeStamp

Files

chronologique.cabal view
@@ -1,6 +1,6 @@ cabal-version:       >= 1.10 name:                chronologique-version:             0.2.1.0+version:             0.3.0.0 synopsis:            Time to manipulate time description:  A simple type useful for representing timestamps as generated by system@@ -32,7 +32,8 @@    build-depends:     base >= 4.9 && < 5,                      time,-                     hourglass+                     hourglass,+                     vector    hs-source-dirs:    lib @@ -57,7 +58,6 @@   main-is:           Experiment.hs    ghc-options:       -threaded-                     -O2                      -Wall                      -Wwarn                      -fwarn-tabs@@ -71,16 +71,17 @@                      hspec,                      hourglass,                      QuickCheck,+                     vector,                      chronologique    hs-source-dirs:    tests    main-is:           TestSuite.hs -  other-modules:     CheckTimeStamp+  other-modules:     CheckTimeStamp,+                     CheckVectorOperations    ghc-options:       -threaded-                     -O2                      -Wall                      -Wwarn                      -fwarn-tabs
lib/Chrono/TimeStamp.hs view
@@ -1,7 +1,7 @@ -- -- Time to manipulate time ----- Copyright © 2013-2016 Operational Dynamics Consulting, Pty Ltd and Others+-- Copyright © 2013-2017 Operational Dynamics Consulting, Pty Ltd and Others -- -- The code in this file, and the program it is a part of, is -- made available to you by its authors as open source software:@@ -12,6 +12,9 @@ {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE InstanceSigs #-} {-# LANGUAGE TupleSections #-}+{-# LANGUAGE StandaloneDeriving #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE TypeFamilies #-}  module Chrono.TimeStamp (@@ -25,6 +28,9 @@ import Data.Maybe import Data.Int (Int64) import Data.Hourglass+import qualified Data.Vector.Generic as G+import qualified Data.Vector.Generic.Mutable as M+import Data.Vector.Unboxed import Time.System  import Chrono.Formats@@ -129,3 +135,45 @@  convertToTimeStamp :: ElapsedP -> TimeStamp convertToTimeStamp = timeFromElapsedP++{-+    Ideally both the existing G.Vector Vector Int64 and M.MVector MVector+    Int64 instances would be sufficient to support automatically deriving+    those things for TimeStamp. But, *gaboom* somewhere down in GHC.Prim;+    writing this gumpf out manually did the trick, and satisifies the+    superclass requirements to derive an Unbox instance.+-}++newtype instance MVector s TimeStamp = MV_TimeStamp (MVector s Int64)+newtype instance Vector TimeStamp = V_TimeStamp (Vector Int64)++instance G.Vector Vector TimeStamp where+    basicUnsafeFreeze (MV_TimeStamp v) = V_TimeStamp <$> G.basicUnsafeFreeze v+    basicUnsafeThaw (V_TimeStamp v) = MV_TimeStamp <$> G.basicUnsafeThaw v+    basicLength (V_TimeStamp v) = G.basicLength v+    basicUnsafeSlice j k (V_TimeStamp v) = V_TimeStamp $ G.basicUnsafeSlice j k v+    basicUnsafeIndexM (V_TimeStamp v) i = TimeStamp <$> G.basicUnsafeIndexM v i+    {-# INLINE basicUnsafeFreeze #-}+    {-# INLINE basicUnsafeThaw #-}+    {-# INLINE basicLength #-}+    {-# INLINE basicUnsafeSlice #-}+    {-# INLINE basicUnsafeIndexM #-}++instance M.MVector MVector TimeStamp where+    basicLength (MV_TimeStamp v) = M.basicLength v+    basicUnsafeSlice j k (MV_TimeStamp v) = MV_TimeStamp $ M.basicUnsafeSlice j k v+    basicOverlaps (MV_TimeStamp a) (MV_TimeStamp b) = M.basicOverlaps a b+    basicUnsafeNew n = MV_TimeStamp <$> M.basicUnsafeNew n+    basicInitialize (MV_TimeStamp v) = M.basicInitialize v+    basicUnsafeRead (MV_TimeStamp v) i = TimeStamp <$> M.basicUnsafeRead v i+    basicUnsafeWrite (MV_TimeStamp v) i (TimeStamp a) = M.basicUnsafeWrite v i a+    {-# INLINE basicLength #-}+    {-# INLINE basicUnsafeSlice #-}+    {-# INLINE basicOverlaps #-}+    {-# INLINE basicUnsafeNew #-}+    {-# INLINE basicInitialize #-}+    {-# INLINE basicUnsafeRead #-}+    {-# INLINE basicUnsafeWrite #-}++deriving instance Unbox TimeStamp+
+ tests/CheckVectorOperations.hs view
@@ -0,0 +1,32 @@+--+-- Time to manipulate time+--+-- Copyright © 2013-2017 Operational Dynamics Consulting, Pty Ltd and Others+--+-- The code in this file, and the program it is a part of, is+-- made available to you by its authors as open source software:+-- you can redistribute it and/or modify it under the terms of+-- the 3-clause BSD licence.+--++-- | Test unboxed vector usage++module CheckVectorOperations where++import Data.Vector.Unboxed (Vector)+import qualified Data.Vector.Unboxed as V+import Test.Hspec+import Test.QuickCheck++import Chrono.TimeStamp++checkVectorUnboxed :: Spec+checkVectorUnboxed = do+    describe "Unbox instance for TimeStamp" $+        it "should work in an unboxed Vector" $ do+            let vs = V.fromList [minBound, 0, maxBound] :: Vector TimeStamp+            show vs `shouldBe`+                "[1677-09-21T00:12:43.145224192Z" +++                ",1970-01-01T00:00:00.000000000Z" +++                ",2262-04-11T23:47:16.854775807Z]"+ 
tests/TestSuite.hs view
@@ -5,11 +5,14 @@ import Test.Hspec  import CheckTimeStamp+import CheckVectorOperations  main :: IO ()-main = hspec suite+main = do+    hspec suite+    putStrLn "."  suite :: Spec suite = do     checkTimeStamp-+    checkVectorUnboxed