Add a test for Set.powerSet
authorDavid Feuer <David.Feuer@gmail.com>
Wed, 3 Jan 2018 21:12:53 +0000 (16:12 -0500)
committerDavid Feuer <David.Feuer@gmail.com>
Thu, 4 Jan 2018 07:38:58 +0000 (02:38 -0500)
tests/set-properties.hs

index d9aea92..8b08a2a 100644 (file)
@@ -93,6 +93,7 @@ main = defaultMain [ testCase "lookupLT" test_lookupLT
                    , testProperty "take"                 prop_take
                    , testProperty "drop"                 prop_drop
                    , testProperty "splitAt"              prop_splitAt
+                   , testProperty "powerSet"             prop_powerSet
                    ]
 
 -- A type with a peculiar Eq instance designed to make sure keys
@@ -603,6 +604,17 @@ prop_spanAntitone xs' = valid tw .&&. valid dw
     xs = fromList xs'
     (tw, dw) = spanAntitone isLeft xs
 
+prop_powerSet :: Set Int -> Property
+prop_powerSet xs = valid ps .&&. ps === ps'
+  where
+    xs' = take 10 xs
+
+    ps = powerSet xs'
+    ps' = fromList . fmap fromList $ lps (toList xs')
+
+    lps [] = [[]]
+    lps (y : ys) = fmap (y:) (lps ys) ++ lps ys
+
 isLeft :: Either a b -> Bool
 isLeft (Left _) = True
 isLeft _ = False