summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWill Thompson <will@willthompson.co.uk>2012-01-13 16:23:53 +0000
committerWill Thompson <will@willthompson.co.uk>2012-01-13 16:23:53 +0000
commitb66df308ac873a0b645977122a587e95df6b1a0d (patch)
treef3d080c5175664e149b43a511b180c3a71f14a79
parent8166e01496aa61b08466d821d7b77e0f87b83012 (diff)
Add regionSelectionFlatten
-rw-r--r--Bustle/Regions.hs6
-rw-r--r--Test/Regions.hs8
2 files changed, 14 insertions, 0 deletions
diff --git a/Bustle/Regions.hs b/Bustle/Regions.hs
index 9774b83..33392ff 100644
--- a/Bustle/Regions.hs
+++ b/Bustle/Regions.hs
@@ -11,6 +11,7 @@ module Bustle.Regions
, RegionSelection (..)
, regionSelectionNew
, regionSelectionAppend
+ , regionSelectionFlatten
, regionSelectionUpdate
, regionSelectionSelect
, regionSelectionUp
@@ -80,6 +81,11 @@ regionSelectionNew rs
where
sorted = sort (map fst rs)
+regionSelectionFlatten :: RegionSelection a
+ -> Regions a
+regionSelectionFlatten rs =
+ reverse (rsBefore rs) ++ maybeToList (rsCurrent rs) ++ rsAfter rs
+
regionSelectionAppend :: Regions a
-> RegionSelection a
-> RegionSelection a
diff --git a/Test/Regions.hs b/Test/Regions.hs
index 383fb57..c9aca2c 100644
--- a/Test/Regions.hs
+++ b/Test/Regions.hs
@@ -157,6 +157,14 @@ prop_Append vr@(ValidRegions regions) =
bs = drop i regions
in regionSelectionAppend bs (regionSelectionNew as) == regionSelectionNew regions
+prop_FlattenThenNewIsIdempotent
+ :: (Eq a, Show a)
+ => ValidRegions a
+ -> Property
+prop_FlattenThenNewIsIdempotent vr@(ValidRegions regions) =
+ withRegions vr $ \rs -> property $
+ regionSelectionNew (regionSelectionFlatten rs) == rs
+
runTests = $quickCheckAll
main = do