aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlrosa007 <lrosa008@gmail.com>2020-11-04 15:50:55 -0500
committerLouis Pilfold <louis@lpil.uk>2020-11-04 21:03:21 +0000
commitf68070478362a883a38c5d1637e3dd2da6c80d5a (patch)
tree7b1742693f198910c7bb9bca7de4a11f9b77bf3c
parentbe647cae5e1bbda65d933fd5728e21a0fa7a4285 (diff)
downloadgleam_stdlib-f68070478362a883a38c5d1637e3dd2da6c80d5a.tar.gz
gleam_stdlib-f68070478362a883a38c5d1637e3dd2da6c80d5a.zip
feat(float): add sum function
-rw-r--r--src/gleam/float.gleam19
-rw-r--r--test/gleam/float_test.gleam8
2 files changed, 27 insertions, 0 deletions
diff --git a/src/gleam/float.gleam b/src/gleam/float.gleam
index 24f0330..3d611b5 100644
--- a/src/gleam/float.gleam
+++ b/src/gleam/float.gleam
@@ -171,3 +171,22 @@ pub fn square_root(number: Float) -> Result(Float, Nil) {
pub fn negate(x: Float) -> Float {
-1. *. x
}
+
+/// Sums a list of Floats.
+///
+/// ## Example
+///
+/// > sum([1.0, 2.2, 3.3])
+/// 6.5
+///
+pub fn sum(numbers: List(Float)) -> Float {
+ numbers
+ |> do_sum(0.0)
+}
+
+fn do_sum(numbers: List(Float), initial: Float) -> Float {
+ case numbers {
+ [] -> initial
+ [x, ..rest] -> do_sum(rest, x +. initial)
+ }
+}
diff --git a/test/gleam/float_test.gleam b/test/gleam/float_test.gleam
index be1f22d..2ebaefc 100644
--- a/test/gleam/float_test.gleam
+++ b/test/gleam/float_test.gleam
@@ -242,3 +242,11 @@ pub fn negate_test() {
float.negate(0.)
|> should.equal(0.)
}
+
+pub fn sum_test() {
+ float.sum([])
+ |> should.equal(0.0)
+
+ float.sum([1.0, 2.2, 3.3])
+ |> should.equal(6.5)
+}