diff options
author | Luci Phillips <104490260+scorpi4n@users.noreply.github.com> | 2024-05-17 19:55:15 -0500 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2024-05-21 13:58:25 +0100 |
commit | 96b2eb1b00d38c6bd6d0d4c1fc01f35573f1b167 (patch) | |
tree | 7083672935679f5eb62732ea38b38c5aee2c594a | |
parent | 0faee2f58d41be64a0fb54a2c728656d59b52370 (diff) | |
download | gleam_stdlib-96b2eb1b00d38c6bd6d0d4c1fc01f35573f1b167.tar.gz gleam_stdlib-96b2eb1b00d38c6bd6d0d4c1fc01f35573f1b167.zip |
Test and implement set.symmetric_difference
-rw-r--r-- | src/gleam/set.gleam | 18 | ||||
-rw-r--r-- | test/gleam/set_test.gleam | 5 |
2 files changed, 23 insertions, 0 deletions
diff --git a/src/gleam/set.gleam b/src/gleam/set.gleam index c04ca92..7fb8a41 100644 --- a/src/gleam/set.gleam +++ b/src/gleam/set.gleam @@ -325,3 +325,21 @@ pub fn is_subset(first: Set(member), of second: Set(member)) -> Bool { pub fn is_disjoint(first: Set(member), from second: Set(member)) -> Bool { intersection(of: first, and: second) == new() } + +/// Creates a new set that contains members that are present in either set, but +/// not both. +/// +/// ```gleam +/// symmetric_difference(from_list([1, 2, 4]), from_list([3, 4])) |> to_list +/// // -> [1, 2, 4] +/// ``` +/// +pub fn symmetric_difference( + of first: Set(member), + and second: Set(member), +) -> Set(member) { + difference( + from: union(of: first, and: second), + minus: intersection(of: first, and: second), + ) +} diff --git a/test/gleam/set_test.gleam b/test/gleam/set_test.gleam index f763c5d..94dd5da 100644 --- a/test/gleam/set_test.gleam +++ b/test/gleam/set_test.gleam @@ -129,3 +129,8 @@ pub fn is_disjoint_test() { set.is_disjoint(set.from_list([1, 2]), set.from_list([2, 3, 4])) |> should.be_false() } + +pub fn symmetric_difference_test() { + set.symmetric_difference(set.from_list([1, 2, 3]), set.from_list([3, 4])) + |> should.equal(set.from_list([1, 2, 4])) +} |