aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gleam/int.gleam10
-rw-r--r--test/gleam/int_test.gleam3
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() {