diff options
author | Dirk Gadsden <dirk@esherido.com> | 2019-08-15 11:53:05 -0700 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2019-08-16 17:11:11 +0100 |
commit | 3798acbcdef9cb2312ba21666858a1f1776198d6 (patch) | |
tree | b39635d756ff3d8113e0b0b7e0b2458d1b832a81 | |
parent | 261889c5b56b6610c370e2bd6ae78c0f81e22688 (diff) | |
download | gleam_stdlib-3798acbcdef9cb2312ba21666858a1f1776198d6.tar.gz gleam_stdlib-3798acbcdef9cb2312ba21666858a1f1776198d6.zip |
Add `float:compare` function to stdlib
Fixes #209
-rw-r--r-- | gen/src/gleam@float.erl | 17 | ||||
-rw-r--r-- | gen/test/gleam@float_test.erl | 10 | ||||
-rw-r--r-- | src/gleam/float.gleam | 12 | ||||
-rw-r--r-- | test/gleam/float_test.gleam | 21 |
4 files changed, 58 insertions, 2 deletions
diff --git a/gen/src/gleam@float.erl b/gen/src/gleam@float.erl index 0d8ec08..1d19fc7 100644 --- a/gen/src/gleam@float.erl +++ b/gen/src/gleam@float.erl @@ -1,7 +1,7 @@ -module(gleam@float). -compile(no_auto_import). --export([parse/1, to_string/1, ceiling/1, floor/1, round/1, truncate/1]). +-export([parse/1, to_string/1, compare/2, ceiling/1, floor/1, round/1, truncate/1]). parse(A) -> gleam__stdlib:parse_float(A). @@ -9,6 +9,21 @@ parse(A) -> to_string(F) -> gleam@iodata:to_string(gleam@iodata:from_float(F)). +compare(A, B) -> + case A =:= B of + true -> + eq; + + false -> + case A < B of + true -> + lt; + + false -> + gt + end + end. + ceiling(A) -> math:ceil(A). diff --git a/gen/test/gleam@float_test.erl b/gen/test/gleam@float_test.erl index ea19c5e..403be9d 100644 --- a/gen/test/gleam@float_test.erl +++ b/gen/test/gleam@float_test.erl @@ -1,7 +1,7 @@ -module(gleam@float_test). -compile(no_auto_import). --export([parse_test/0, to_string_test/0, ceiling_test/0, floor_test/0, round_test/0, truncate_test/0]). +-export([parse_test/0, to_string_test/0, compare_test/0, ceiling_test/0, floor_test/0, round_test/0, truncate_test/0]). parse_test() -> gleam@expect:equal(gleam@float:parse(<<"1.23">>), {ok, 1.23}), @@ -15,6 +15,14 @@ to_string_test() -> gleam@expect:equal(gleam@float:to_string(123.0), <<"123.0">>), gleam@expect:equal(gleam@float:to_string(-8.1), <<"-8.1">>). +compare_test() -> + gleam@expect:equal(gleam@float:compare(0.0, 0.0), eq), + gleam@expect:equal(gleam@float:compare(0.1, 0.1), eq), + gleam@expect:equal(gleam@float:compare(0.0, 0.1), lt), + gleam@expect:equal(gleam@float:compare(-2.0, -1.9), lt), + gleam@expect:equal(gleam@float:compare(2.0, 1.9), gt), + gleam@expect:equal(gleam@float:compare(-1.9, -2.0), gt). + ceiling_test() -> gleam@expect:equal(gleam@float:ceiling(8.1), 9.0), gleam@expect:equal(gleam@float:ceiling(-8.1), -8.0), diff --git a/src/gleam/float.gleam b/src/gleam/float.gleam index b1ae86e..65be088 100644 --- a/src/gleam/float.gleam +++ b/src/gleam/float.gleam @@ -1,4 +1,5 @@ import gleam/iodata +import gleam/order pub enum NotAFloat = | NotAFloat @@ -12,6 +13,17 @@ pub fn to_string(f) { |> iodata:to_string } +pub fn compare(a, b) { + case a == b { + | True -> order:Eq + | False -> + case a <. b { + | True -> order:Lt + | False -> order:Gt + } + } +} + pub external fn ceiling(Float) -> Float = "math" "ceil"; pub external fn floor(Float) -> Float = "math" "floor"; diff --git a/test/gleam/float_test.gleam b/test/gleam/float_test.gleam index 41b5ed1..ef063a5 100644 --- a/test/gleam/float_test.gleam +++ b/test/gleam/float_test.gleam @@ -1,5 +1,6 @@ import gleam/expect import gleam/float +import gleam/order pub fn parse_test() { "1.23" @@ -37,6 +38,26 @@ pub fn to_string_test() { |> expect:equal(_, "-8.1") } +pub fn compare_test() { + float:compare(0., 0.) + |> expect:equal(_, order:Eq) + + float:compare(0.1, 0.1) + |> expect:equal(_, order:Eq) + + float:compare(0., 0.1) + |> expect:equal(_, order:Lt) + + float:compare(-2., -1.9) + |> expect:equal(_, order:Lt) + + float:compare(2., 1.9) + |> expect:equal(_, order:Gt) + + float:compare(-1.9, -2.) + |> expect:equal(_, order:Gt) +} + pub fn ceiling_test() { 8.1 |> float:ceiling |