aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLouis Pilfold <louis@lpil.uk>2021-07-16 20:01:09 +0100
committerLouis Pilfold <louis@lpil.uk>2021-07-16 20:10:11 +0100
commitae5fb5c267af3d92a33b093bba5e61f0cd34f333 (patch)
tree4b5c385ec4cd1b6c0f56c7468b3262d182f86e2d
parent08ee11667c62bf416e7dcd8e314a7c8792168c2b (diff)
downloadgleam_stdlib-ae5fb5c267af3d92a33b093bba5e61f0cd34f333.tar.gz
gleam_stdlib-ae5fb5c267af3d92a33b093bba5e61f0cd34f333.zip
JS pair module support
-rw-r--r--src/gleam/pair.gleam114
-rw-r--r--test/gleam/pair_test.gleam116
2 files changed, 113 insertions, 117 deletions
diff --git a/src/gleam/pair.gleam b/src/gleam/pair.gleam
index 246ce8c..6143ee9 100644
--- a/src/gleam/pair.gleam
+++ b/src/gleam/pair.gleam
@@ -1,63 +1,61 @@
-if erlang {
- /// Returns the first element in a pair.
- ///
- /// ## Examples
- ///
- /// > first(#(1, 2))
- /// 1
- ///
- pub fn first(pair: #(a, b)) -> a {
- let #(a, _) = pair
- a
- }
+/// Returns the first element in a pair.
+///
+/// ## Examples
+///
+/// > first(#(1, 2))
+/// 1
+///
+pub fn first(pair: #(a, b)) -> a {
+ let #(a, _) = pair
+ a
+}
- /// Returns the second element in a pair.
- ///
- /// ## Examples
- ///
- /// > second(#(1, 2))
- /// 2
- ///
- pub fn second(pair: #(a, b)) -> b {
- let #(_, a) = pair
- a
- }
+/// Returns the second element in a pair.
+///
+/// ## Examples
+///
+/// > second(#(1, 2))
+/// 2
+///
+pub fn second(pair: #(a, b)) -> b {
+ let #(_, a) = pair
+ a
+}
- /// Returns a new pair with the elements swapped.
- ///
- /// ## Examples
- ///
- /// > swap(#(1, 2))
- /// #(2, 1)
- ///
- pub fn swap(pair: #(a, b)) -> #(b, a) {
- let #(a, b) = pair
- #(b, a)
- }
+/// Returns a new pair with the elements swapped.
+///
+/// ## Examples
+///
+/// > swap(#(1, 2))
+/// #(2, 1)
+///
+pub fn swap(pair: #(a, b)) -> #(b, a) {
+ let #(a, b) = pair
+ #(b, a)
+}
- /// Returns a new pair with the first element having had `with` applied to
- /// it.
- ///
- /// ## Examples
- ///
- /// > #(1, 2) |> map_first(fn(n) { n * 2 })
- /// 2
- ///
- pub fn map_first(of pair: #(a, b), with fun: fn(a) -> c) -> #(c, b) {
- let #(a, b) = pair
- #(fun(a), b)
- }
+/// Returns a new pair with the first element having had `with` applied to
+/// it.
+///
+/// ## Examples
+///
+/// > #(1, 2) |> map_first(fn(n) { n * 2 })
+/// 2
+///
+pub fn map_first(of pair: #(a, b), with fun: fn(a) -> c) -> #(c, b) {
+ let #(a, b) = pair
+ #(fun(a), b)
+}
- /// Returns a new pair with the second element having had `with` applied to
- /// it.
- ///
- /// ## Examples
- ///
- /// > #(1, 2) |> map_second(fn(n) { n * 2 })
- /// 4
- ///
- pub fn map_second(of pair: #(a, b), with fun: fn(b) -> c) -> #(a, c) {
- let #(a, b) = pair
- #(a, fun(b))
- }
+/// Returns a new pair with the second element having had `with` applied to
+/// it.
+///
+/// ## Examples
+///
+/// > #(1, 2) |> map_second(fn(n) { n * 2 })
+/// 4
+///
+pub fn map_second(of pair: #(a, b), with fun: fn(b) -> c) -> #(a, c) {
+ let #(a, b) = pair
+ #(a, fun(b))
}
diff --git a/test/gleam/pair_test.gleam b/test/gleam/pair_test.gleam
index 891ce4a..1950929 100644
--- a/test/gleam/pair_test.gleam
+++ b/test/gleam/pair_test.gleam
@@ -1,60 +1,58 @@
-if erlang {
- import gleam/should
- import gleam/pair
-
- pub fn first_test() {
- #(1, 2)
- |> pair.first
- |> should.equal(1)
-
- #("abc", [])
- |> pair.first
- |> should.equal("abc")
- }
-
- pub fn second_test() {
- #(1, 2)
- |> pair.second
- |> should.equal(2)
-
- #("abc", [])
- |> pair.second
- |> should.equal([])
- }
-
- pub fn swap_test() {
- #(1, "2")
- |> pair.swap
- |> should.equal(#("2", 1))
- }
-
- pub fn map_first_test() {
- let inc = fn(a) { a + 1 }
- pair.map_first(#(1, 2), inc)
- |> should.equal(#(2, 2))
-
- pair.map_first(#(8, 2), inc)
- |> should.equal(#(9, 2))
-
- pair.map_first(#(0, -2), inc)
- |> should.equal(#(1, -2))
-
- pair.map_first(#(-10, 20), inc)
- |> should.equal(#(-9, 20))
- }
-
- pub fn map_second_test() {
- let dec = fn(a) { a - 1 }
- pair.map_second(#(1, 2), dec)
- |> should.equal(#(1, 1))
-
- pair.map_second(#(8, 2), dec)
- |> should.equal(#(8, 1))
-
- pair.map_second(#(0, -2), dec)
- |> should.equal(#(0, -3))
-
- pair.map_second(#(-10, 20), dec)
- |> should.equal(#(-10, 19))
- }
+import gleam/should
+import gleam/pair
+
+pub fn first_test() {
+ #(1, 2)
+ |> pair.first
+ |> should.equal(1)
+
+ #("abc", [])
+ |> pair.first
+ |> should.equal("abc")
+}
+
+pub fn second_test() {
+ #(1, 2)
+ |> pair.second
+ |> should.equal(2)
+
+ #("abc", [])
+ |> pair.second
+ |> should.equal([])
+}
+
+pub fn swap_test() {
+ #(1, "2")
+ |> pair.swap
+ |> should.equal(#("2", 1))
+}
+
+pub fn map_first_test() {
+ let inc = fn(a) { a + 1 }
+ pair.map_first(#(1, 2), inc)
+ |> should.equal(#(2, 2))
+
+ pair.map_first(#(8, 2), inc)
+ |> should.equal(#(9, 2))
+
+ pair.map_first(#(0, -2), inc)
+ |> should.equal(#(1, -2))
+
+ pair.map_first(#(-10, 20), inc)
+ |> should.equal(#(-9, 20))
+}
+
+pub fn map_second_test() {
+ let dec = fn(a) { a - 1 }
+ pair.map_second(#(1, 2), dec)
+ |> should.equal(#(1, 1))
+
+ pair.map_second(#(8, 2), dec)
+ |> should.equal(#(8, 1))
+
+ pair.map_second(#(0, -2), dec)
+ |> should.equal(#(0, -3))
+
+ pair.map_second(#(-10, 20), dec)
+ |> should.equal(#(-10, 19))
}