diff options
author | Udo <git@udo.codes> | 2023-02-22 22:20:19 +0100 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2023-02-25 13:38:56 +0000 |
commit | 23136f431ca7dd07a1071c84d59dda9b715baf2b (patch) | |
tree | ca20165122a48b3efa1a5dcc057963ff77192f3a /src | |
parent | e4e1ace4394ff7cf13769785be029aae287f7440 (diff) | |
download | gleam_stdlib-23136f431ca7dd07a1071c84d59dda9b715baf2b.tar.gz gleam_stdlib-23136f431ca7dd07a1071c84d59dda9b715baf2b.zip |
Fix edge-case in int.floor_divide
Diffstat (limited to 'src')
-rw-r--r-- | src/gleam/int.gleam | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/src/gleam/int.gleam b/src/gleam/int.gleam index 44a6de4..2ef4b73 100644 --- a/src/gleam/int.gleam +++ b/src/gleam/int.gleam @@ -759,13 +759,11 @@ pub fn modulo(dividend: Int, by divisor: Int) -> Result(Int, Nil) { pub fn floor_divide(dividend: Int, by divisor: Int) -> Result(Int, Nil) { case divisor { 0 -> Error(Nil) - divisor -> { - let quotient = dividend / divisor - case quotient < 0 && dividend % divisor != 0 { - True -> Ok(quotient - 1) - False -> Ok(quotient) + divisor -> + case dividend * divisor < 0 && dividend % divisor != 0 { + True -> Ok(dividend / divisor - 1) + False -> Ok(dividend / divisor) } - } } } |