diff options
author | Louis Pilfold <louis@lpil.uk> | 2021-08-29 15:23:52 +0100 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2021-08-29 15:23:52 +0100 |
commit | efc54b447788d325ec38222d3cb1ec5e98c1c030 (patch) | |
tree | f06bd42ae63ab8a44e0e71637c1169ad4497e03b | |
parent | c67d4fa20c0f479238241076a6ac1e458c65f874 (diff) | |
download | javascript-efc54b447788d325ec38222d3cb1ec5e98c1c030.tar.gz javascript-efc54b447788d325ec38222d3cb1ec5e98c1c030.zip |
Array fold_right
-rw-r--r-- | CHANGELOG.md | 2 | ||||
-rw-r--r-- | src/ffi.js | 4 | ||||
-rw-r--r-- | src/gleam/javascript/array.gleam | 3 | ||||
-rw-r--r-- | test/gleam/javascript/array_test.gleam | 21 |
4 files changed, 29 insertions, 1 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 07d70c7..2b4892c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,4 +3,4 @@ ## Unreleased - The `array` module was created with the `Array(element)` type and `to_list`, - `from_list`, `map`, `fold`, and `length` functions. + `from_list`, `map`, `fold`, `fold_right`, and `length` functions. @@ -13,3 +13,7 @@ export function length(thing) { export function reduce(thing, acc, fn) { return thing.reduce(fn, acc); } + +export function reduceRight(thing, acc, fn) { + return thing.reduceRight(fn, acc); +} diff --git a/src/gleam/javascript/array.gleam b/src/gleam/javascript/array.gleam index 20d12d1..0895ff1 100644 --- a/src/gleam/javascript/array.gleam +++ b/src/gleam/javascript/array.gleam @@ -14,3 +14,6 @@ pub external fn map(Array(a), fn(a) -> b) -> Array(b) = pub external fn fold(Array(e), a, fn(a, e) -> a) -> a = "../../ffi.js" "reduce" + +pub external fn fold_right(Array(e), a, fn(a, e) -> a) -> a = + "../../ffi.js" "reduceRight" diff --git a/test/gleam/javascript/array_test.gleam b/test/gleam/javascript/array_test.gleam index 5bf52db..ccebcc7 100644 --- a/test/gleam/javascript/array_test.gleam +++ b/test/gleam/javascript/array_test.gleam @@ -16,6 +16,10 @@ pub fn length_test() { assert 0 = array.from_list([]) |> array.length + + assert 2 = + array.from_list([1, 2]) + |> array.length } pub fn map_test() { @@ -48,3 +52,20 @@ pub fn fold_test() { |> array.from_list |> array.fold([], fn(a, e) { [e, ..a] }) } + +pub fn fold_right_test() { + assert [] = + [] + |> array.from_list + |> array.fold_right([], fn(a, e) { [e, ..a] }) + + assert [1, 2, 3, 4] = + [1, 2, 3, 4] + |> array.from_list + |> array.fold_right([], fn(a, e) { [e, ..a] }) + + assert [4, 3, 2, 1] = + [4, 3, 2, 1] + |> array.from_list + |> array.fold_right([], fn(a, e) { [e, ..a] }) +} |