diff options
-rw-r--r-- | src/gleam/int.gleam | 10 | ||||
-rw-r--r-- | test/gleam/int_test.gleam | 3 |
2 files changed, 7 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) } - } } } diff --git a/test/gleam/int_test.gleam b/test/gleam/int_test.gleam index bd43324..fd1cb89 100644 --- a/test/gleam/int_test.gleam +++ b/test/gleam/int_test.gleam @@ -521,6 +521,9 @@ pub fn floor_divide_test() { int.floor_divide(-99, by: 2) |> should.equal(Ok(-50)) + + int.floor_divide(-1, by: 2) + |> should.equal(Ok(-1)) } pub fn add_test() { |