expiring-containers 0.2.2 → 0.2.2.1
raw patch · 4 files changed
+39/−89 lines, 4 filesdep +QuickCheckdep +rerebasedep ~containersdep ~quickcheck-instancesdep ~tastysetup-changednew-uploader
Dependencies added: QuickCheck, rerebase
Dependency ranges changed: containers, quickcheck-instances, tasty, tasty-quickcheck
Files
- Setup.hs +2/−0
- expiring-containers.cabal +32/−58
- library/ExpiringContainers/ExpiringSet.hs +4/−2
- test/Main.hs +1/−29
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
expiring-containers.cabal view
@@ -1,78 +1,52 @@-name:- expiring-containers-version:- 0.2.2-synopsis:- Expiring containers-category:- Time, Containers-homepage:- https://github.com/metrix-ai/expiring-containers-bug-reports:- https://github.com/metrix-ai/expiring-containers/issues-author:- Oleg Shevchenko <shevchenko.cmc@gmail.com>-maintainer:- Metrix.AI Ninjas <ninjas@metrix.ai>-copyright:- (c) 2018, Metrix.AI-license:- MIT-license-file:- LICENSE-build-type:- Simple-cabal-version:- >=1.24+name: expiring-containers+version: 0.2.2.1+synopsis: Expiring containers+category: Time, Containers+homepage: https://github.com/metrix-ai/expiring-containers+bug-reports: https://github.com/metrix-ai/expiring-containers/issues+author: Oleg Shevchenko <shevchenko.cmc@gmail.com>+maintainer: Metrix.AI Ninjas <ninjas@metrix.ai>+copyright: (c) 2018, Metrix.AI+license: MIT+license-file: LICENSE+build-type: Simple+cabal-version: >=1.24 source-repository head- type:- git- location:- https://github.com/metrix-ai/expiring-containers.git+ type: git+ location: https://github.com/metrix-ai/expiring-containers.git library- hs-source-dirs:- library- default-extensions:- Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples, StrictData+ hs-source-dirs: library+ default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples, StrictData ghc-options: -funbox-strict-fields- default-language:- Haskell2010+ default-language: Haskell2010 exposed-modules: ExpiringContainers.ExpiringMap ExpiringContainers.ExpiringSet other-modules: build-depends: base >=4.7 && <5,- time >=1.8 && <2,- hashable >=1.2 && <2,- timestamp >=0.2 && <0.3, containers >=0.5.10 && <0.5.15,+ hashable >=1.2 && <2, int-multimap >=0.3.1 && <0.4,+ time >=1.8 && <2,+ timestamp >=0.2 && <0.3, unordered-containers >=0.2.8.0 && <0.3 test-suite test- type:- exitcode-stdio-1.0- hs-source-dirs:- test- main-is:- Main.hs- default-extensions:- Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples- default-language:- Haskell2010+ type: exitcode-stdio-1.0+ hs-source-dirs: test+ main-is: Main.hs+ default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples+ default-language: Haskell2010 build-depends: expiring-containers,- base >=4.7 && <5,- time >=1.8 && <2,- hashable >=1.2 && <2,- timestamp >=0.2 && <0.3,- containers >=0.5.10 && <0.5.15, int-multimap >=0.3.1 && <0.4,- unordered-containers >=0.2.8.0 && <0.3,- tasty >=1.0.1 && <1.0.2,+ QuickCheck >=2.8.1 && <3,+ quickcheck-instances >=0.3.11 && <0.4,+ rerebase <2,+ tasty >=0.12 && <2, tasty-hunit >=0.9 && <0.11,- tasty-quickcheck >=0.10 && <0.12,- quickcheck-instances >=0.3.18 && <0.4+ tasty-quickcheck >=0.9 && <0.11,+ timestamp >=0.2 && <0.3
library/ExpiringContainers/ExpiringSet.hs view
@@ -43,10 +43,12 @@ Set that expiring with time -} data ExpiringSet element =+ {-|+ * Elements indexed by timestamps+ * Timestamps indexed by elements+ -} ExpiringSet- {-| Elements indexed by timestamps -} (IntMap.IntMultimap element)- {-| Timestamps indexed by elements -} (HashMap.HashMap element Int) deriving(Eq, Show, Generic)
test/Main.hs view
@@ -6,7 +6,6 @@ import Test.Tasty.Runners import Test.Tasty.HUnit import Test.Tasty.QuickCheck--- import Test.QuickCheck.Instances import Test.QuickCheck.Instances.Time import qualified ExpiringContainers.ExpiringSet as A import qualified ExpiringContainers.ExpiringMap as B@@ -73,19 +72,6 @@ f = applyFun fun in A.map f (A.insert key value1 set) === A.insert key (f value1) (A.map f set) ,- -- testProperty "map delete" $ \ (list :: [(UTCTime, Int)], key :: UTCTime, value1 :: Int, fun :: (Fun Int Char)) ->- -- let set = A.fromList list- -- f = applyFun fun- -- in A.map f (A.delete value1 set) === A.delete (f value1) (A.map f set)- -- ,- -- testProperty "clean" $ \ (list :: [(UTCTime, Int)], key :: UTCTime) ->- -- let (list1, expire) = A.clean key $ A.fromList list- -- in (D.fromList $ fmap (\(t,a) -> a) $ C.filter (\(t,a) -> t < key) list) === (D.fromList list1)- -- ,- -- testProperty "mapping" $ \ (list :: [(UTCTime, Int)]) ->- -- (D.fromList $ map (testFuncL . (\(t,a) -> (,) (timestampUtcTime $ utcTimeTimestamp t) a)) list) ===- -- (D.fromList $ A.toList $ A.map testFunc $ A.fromList list)- -- , testProperty "member" $ \ (list :: [(UTCTime, Int)], key :: UTCTime, value :: Int) -> (A.member value $ A.delete value $ A.insert key value $ A.fromList list) === False ,@@ -172,14 +158,6 @@ f = applyFun fun in fmap f (B.lookup key map') === B.lookup key (B.map f map') ,- -- testProperty "map" $ \ (list :: [(UTCTime, Int, Int)], time :: UTCTime, key :: Int, value :: Int) ->- -- let map' = B.fromList list- -- in fmap (\x -> B.insert time key value map') (B.lookup key map') === (map' <$ (B.lookup key map'))- -- ,- -- testProperty "clean" $ \ (list :: [(UTCTime, Int)], key :: UTCTime) ->- -- let (list1, expire) = A.clean key $ A.fromList list- -- in (D.fromList $ fmap (\(t,a) -> a) $ C.filter (\(t,a) -> t < key) list) === (D.fromList list1)- -- , testProperty "member" $ \ (list :: [(UTCTime, Int, Int)], time :: UTCTime, key :: Int, value :: Int) -> (B.member key $ B.delete key $ B.insert time key value $ B.fromList list) === False ,@@ -189,13 +167,7 @@ , testProperty "traverse" $ \ (list :: [(UTCTime, Int, Int)]) -> let map' = B.fromList list - in (traverse (\a -> [a + 1]) map') === [fmap (\a -> a + 1) map'] - -- ,- -- testProperty "insert and delete" $ \ (list :: [(UTCTime, Int, Int)], time :: UTCTime, key :: Int, value :: Int) ->- -- let list2 = C.nubBy (\(t1,k1,v1) (t2,k2,v2) -> k1 == k2) list- -- in (D.fromList $ fmap (\(t,a,b) -> (,,) (timestampUtcTime $ utcTimeTimestamp t) a b) $- -- C.deleteBy (\(t1,k1,v1) (t2,k2,v2) -> k1 == k2) (time, key, value) list2) === (D.fromList $ B.toList $ B.delete key $ B.insert time key value $ B.fromList list)-+ in (traverse (\a -> [a + 1]) map') === [fmap (\a -> a + 1) map'] ] testFunc :: (Show a) => a -> String