From 341edd8afe9f1e88c578a8a34f258b761db4b079 Mon Sep 17 00:00:00 2001 From: Luci Phillips <104490260+scorpi4n@users.noreply.github.com> Date: Wed, 15 May 2024 17:30:32 -0500 Subject: Implement and test set.is_subset --- src/gleam/set.gleam | 18 ++++++++++++++++++ test/gleam/set_test.gleam | 14 ++++++++++++++ 2 files changed, 32 insertions(+) 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() +} -- cgit v1.2.3