aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gleam/set.gleam18
-rw-r--r--test/gleam/set_test.gleam14
2 files changed, 32 insertions, 0 deletions
diff --git a/src/gleam/set.gleam b/src/gleam/set.gleam
index 390c101..57c6388 100644
--- a/src/gleam/set.gleam
+++ b/src/gleam/set.gleam
@@ -289,3 +289,21 @@ pub fn difference(
) -> Set(member) {
drop(from: first, drop: to_list(second))
}
+
+/// Determines if a set is fully contained by another.
+///
+/// ## Examples
+///
+/// ```gleam
+/// is_subset(from_list([1]), from_list([1, 2]))
+/// // -> True
+/// ```
+///
+/// ```gleam
+/// is_subset(from_list([1, 2, 3]), from_list([3, 4, 5]))
+/// // -> False
+/// ```
+///
+pub fn is_subset(first: Set(member), of second: Set(member)) -> Bool {
+ intersection(of: first, and: second) == first
+}
diff --git a/test/gleam/set_test.gleam b/test/gleam/set_test.gleam
index 06af5dc..e9c24ca 100644
--- a/test/gleam/set_test.gleam
+++ b/test/gleam/set_test.gleam
@@ -107,3 +107,17 @@ pub fn difference_test() {
|> set.to_list
|> should.equal([1])
}
+
+pub fn is_subset_test() {
+ set.is_subset(set.from_list([1, 2, 3, 4]), set.from_list([2, 4]))
+ |> should.be_false()
+
+ set.is_subset(set.from_list([2, 4]), set.from_list([1, 2, 3, 4]))
+ |> should.be_true()
+
+ set.is_subset(set.from_list([1, 2, 3]), set.from_list([4, 5, 6]))
+ |> should.be_false()
+
+ set.is_subset(set.from_list([1, 2]), set.from_list([2, 3, 4]))
+ |> should.be_false()
+}