Skip to content

Commit

Permalink
Fix BigInt and Number comparison (#1887)
Browse files Browse the repository at this point in the history
Fixes `BigInt` and `Number` comparison, and vice versa. Before we were removing the decimal point of the floating-point number which was causing cases like `0.000001 > 0n` (or `0n < 0.000001`) to fail.
  • Loading branch information
HalidOdat authored and Razican committed Jun 8, 2022
1 parent 1ecfa5a commit bf590b8
Showing 1 changed file with 12 additions and 14 deletions.
26 changes: 12 additions & 14 deletions boa_engine/src/value/operations.rs
Original file line number Diff line number Diff line change
Expand Up @@ -536,13 +536,12 @@ impl JsValue {
if y.is_infinite() {
return Ok(y.is_sign_positive().into());
}
let n = if y.is_sign_negative() {
y.floor()
} else {
y.ceil()
};
(*x < JsBigInt::try_from(n).expect("invalid conversion to BigInt"))
.into()

if let Ok(y) = JsBigInt::try_from(y) {
return Ok((*x < y).into());
}

(x.to_f64() < y).into()
}
(Numeric::Number(x), Numeric::BigInt(ref y)) => {
if x.is_nan() {
Expand All @@ -551,13 +550,12 @@ impl JsValue {
if x.is_infinite() {
return Ok(x.is_sign_negative().into());
}
let n = if x.is_sign_negative() {
x.floor()
} else {
x.ceil()
};
(JsBigInt::try_from(n).expect("invalid conversion to BigInt") < *y)
.into()

if let Ok(x) = JsBigInt::try_from(x) {
return Ok((x < *y).into());
}

(x < y.to_f64()).into()
}
},
}
Expand Down

0 comments on commit bf590b8

Please sign in to comment.