range-set-list 0.0.1 → 0.0.2
raw patch · 3 files changed
+34/−3 lines, 3 files
Files
- Data/RangeSet/List.hs +1/−1
- range-set-list.cabal +7/−2
- tests/Tests.hs +26/−0
Data/RangeSet/List.hs view
@@ -70,7 +70,7 @@ import Data.Monoid (Monoid(..)) --- | Internally set is represented as list of distinct inclusive ranges.+-- | Internally set is represented as sorted list of distinct inclusive ranges. newtype RSet a = RSet [(a, a)] deriving (Eq, Ord)
range-set-list.cabal view
@@ -1,6 +1,6 @@ name: range-set-list-version: 0.0.1-synopsis: Memory efficient sets with continuous ranges of elements. List based implementation.+version: 0.0.2+synopsis: Memory efficient sets with continuous ranges of elements. description: Memory efficient sets with continuous ranges of elements. List based implementation. Interface mimics "Data.Set" interface where possible. homepage: https://github.com/phadej/range-set-list bug-reports: https://github.com/phadej/range-set-list/issues@@ -14,11 +14,16 @@ build-type: Simple cabal-version: >=1.10 +flag optimized+ default: True+ library exposed-modules: Data.RangeSet.List build-depends: base >=4.6 && <5 default-language: Haskell98 ghc-options: -Wall+ if flag(optimized)+ ghc-options: -funbox-strict-fields -O2 test-suite test default-language: Haskell2010
tests/Tests.hs view
@@ -65,6 +65,15 @@ elementsProp :: SetAction Int -> Bool elementsProp seta = Set.elems (toSet seta) == RSet.elems (toRSet seta) +nullProp :: SetAction Int -> Bool+nullProp seta = Set.null (toSet seta) == RSet.null (toRSet seta)++memberProp :: Int -> SetAction Int -> Bool+memberProp x seta = Set.member x (toSet seta) == RSet.member x (toRSet seta)++notMemberProp :: Int -> SetAction Int -> Bool+notMemberProp x seta = Set.notMember x (toSet seta) == RSet.notMember x (toRSet seta)+ data RSetAction a = RAEmpty | RASingleton (a, a) | RAFromList [(a, a)]@@ -114,9 +123,26 @@ rangeProp :: RSetAction Int8 -> Bool rangeProp seta = Set.elems (rangeToSet seta) == RSet.elems (rangeToRSet seta) +ordered :: Ord a => [(a,a)] -> Bool+ordered rs = all lt $ zip rs (tail rs)+ where+ lt :: Ord a => ((a,a),(a,a)) -> Bool+ lt ((_,y),(u,_)) = y < u +pairOrdered :: Ord a => [(a, a)] -> Bool+pairOrdered = all (uncurry (<=))++orderedProp :: RSetAction Int8 -> Bool+orderedProp setAction = ordered rs && pairOrdered rs+ where rs = RSet.toRangeList . rangeToRSet $ setAction++ qcProps :: TestTree qcProps = testGroup "QuickCheck properties" [ QC.testProperty "element operations similar" elementsProp+ , QC.testProperty "null operation similar" nullProp+ , QC.testProperty "member operation similar" memberProp+ , QC.testProperty "notMember operation similar" notMemberProp , QC.testProperty "range operations similar" rangeProp+ , QC.testProperty "ranges remain ordered" orderedProp ]