aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDoug Tykocki <tykockda@gmail.com>2023-12-28 09:54:40 -0500
committerLouis Pilfold <louis@lpil.uk>2024-01-04 12:29:15 +0000
commitc153d1ab16d19724e47cc5c160b60b45cda195d2 (patch)
treead5b72918e9c09eefab8ed1afb1969a8099fab7c
parentf88b8321a1b323b03951fc1c9575d8269cd910b6 (diff)
downloadgleam_stdlib-c153d1ab16d19724e47cc5c160b60b45cda195d2.tar.gz
gleam_stdlib-c153d1ab16d19724e47cc5c160b60b45cda195d2.zip
Add set difference function
-rw-r--r--CHANGELOG.md4
-rw-r--r--src/gleam/set.gleam17
-rw-r--r--test/gleam/set_test.gleam7
3 files changed, 28 insertions, 0 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 713fa2b..22c3766 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
# Changelog
+## Unreleased
+
+- The `set` module gains the `difference` function.
+
## v0.34.0 - 2023-12-17
- The `int.random` function now takes a single argument.
diff --git a/src/gleam/set.gleam b/src/gleam/set.gleam
index 9ffaccd..406d501 100644
--- a/src/gleam/set.gleam
+++ b/src/gleam/set.gleam
@@ -260,3 +260,20 @@ pub fn intersection(
let #(larger, smaller) = order(first, second)
take(from: larger, keeping: to_list(smaller))
}
+
+/// Creates a new set that contains members that are present in the first set
+/// but not the second.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > difference(from_list([1, 2]), from_list([2, 3, 4])) |> to_list
+/// [1]
+/// ```
+///
+pub fn difference(
+ from first: Set(member),
+ minus second: Set(member),
+) -> Set(member) {
+ drop(from: first, drop: to_list(second))
+}
diff --git a/test/gleam/set_test.gleam b/test/gleam/set_test.gleam
index 85eaf4b..06af5dc 100644
--- a/test/gleam/set_test.gleam
+++ b/test/gleam/set_test.gleam
@@ -63,6 +63,7 @@ pub fn fold_test() {
[1, 3, 9]
|> set.from_list
|> set.fold(from: 0, with: fn(m, a) { m + a })
+ |> should.equal(13)
}
pub fn filter_test() {
@@ -100,3 +101,9 @@ pub fn intersection_test() {
|> set.to_list
|> should.equal([2])
}
+
+pub fn difference_test() {
+ set.difference(set.from_list([1, 2]), set.from_list([2, 3, 4]))
+ |> set.to_list
+ |> should.equal([1])
+}