;; setops.hs — set union/intersection/difference on integer sets. ;; ;; Exercises Phase 12: `import qualified Data.Set as Set`, all three ;; combining operations + isSubsetOf. (define hk-setops-source "import qualified Data.Set as Set\n\ns1 = Set.insert 1 (Set.insert 2 (Set.insert 3 Set.empty))\ns2 = Set.insert 3 (Set.insert 4 (Set.insert 5 Set.empty))\ns3 = Set.insert 1 (Set.insert 2 Set.empty)\n") (hk-test "setops.hs — union size = 5" (hk-deep-force (hk-run (str hk-setops-source "main = Set.size (Set.union s1 s2)\n"))) 5) (hk-test "setops.hs — intersection size = 1" (hk-deep-force (hk-run (str hk-setops-source "main = Set.size (Set.intersection s1 s2)\n"))) 1) (hk-test "setops.hs — intersection contains 3" (hk-deep-force (hk-run (str hk-setops-source "main = Set.member 3 (Set.intersection s1 s2)\n"))) (list "True")) (hk-test "setops.hs — difference s1 s2 size = 2" (hk-deep-force (hk-run (str hk-setops-source "main = Set.size (Set.difference s1 s2)\n"))) 2) (hk-test "setops.hs — difference doesn't contain shared key" (hk-deep-force (hk-run (str hk-setops-source "main = Set.member 3 (Set.difference s1 s2)\n"))) (list "False")) (hk-test "setops.hs — s3 is subset of s1" (hk-deep-force (hk-run (str hk-setops-source "main = Set.isSubsetOf s3 s1\n"))) (list "True")) (hk-test "setops.hs — s1 not subset of s3" (hk-deep-force (hk-run (str hk-setops-source "main = Set.isSubsetOf s1 s3\n"))) (list "False")) (hk-test "setops.hs — empty set is subset of anything" (hk-deep-force (hk-run (str hk-setops-source "main = Set.isSubsetOf Set.empty s1\n"))) (list "True")) {:fails hk-test-fails :pass hk-test-pass :fail hk-test-fail}