From a378d6e6f3996285d240ec9808563c9716f9e308 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sat, 13 Jun 2020 13:47:43 -0400 Subject: [PATCH] Add comparisons for json floats but not yet between OwnedLiterals and json. --- src/bin.rs | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/src/bin.rs b/src/bin.rs index 143f4cd..d2a9f35 100644 --- a/src/bin.rs +++ b/src/bin.rs @@ -503,28 +503,43 @@ where { let self_number: JsonNumber = self_input.into(); let other_number: JsonNumber = other_input.into(); - // TODO: Figure out how javascript compares floats and ints match (self_number, other_number) { (JsonNumber::Failure, _) => return None, (_, JsonNumber::Failure) => return None, (JsonNumber::UnsignedInteger(self_num), JsonNumber::UnsignedInteger(other_num)) => { return self_num.partial_cmp(&other_num) } - (JsonNumber::UnsignedInteger(_self_num), JsonNumber::SignedInteger(_other_num)) => { - return Some(Ordering::Greater) + (JsonNumber::UnsignedInteger(self_num), JsonNumber::SignedInteger(other_num)) => { + if self_num < std::i64::MAX as u64 { + return (self_num as i64).partial_cmp(&other_num); + } else { + return Some(Ordering::Greater); + } + } + (JsonNumber::UnsignedInteger(self_num), JsonNumber::Decimal(other_num)) => { + return (self_num as f64).partial_cmp(&other_num) } - (JsonNumber::UnsignedInteger(_self_num), JsonNumber::Decimal(_other_num)) => return None, - (JsonNumber::SignedInteger(_self_num), JsonNumber::UnsignedInteger(_other_num)) => { - return Some(Ordering::Less) + (JsonNumber::SignedInteger(self_num), JsonNumber::UnsignedInteger(other_num)) => { + if other_num < std::i64::MAX as u64 { + return self_num.partial_cmp(&(other_num as i64)); + } else { + return Some(Ordering::Less); + } } (JsonNumber::SignedInteger(self_num), JsonNumber::SignedInteger(other_num)) => { return self_num.partial_cmp(&other_num) } - (JsonNumber::SignedInteger(_self_num), JsonNumber::Decimal(_other_num)) => return None, + (JsonNumber::SignedInteger(self_num), JsonNumber::Decimal(other_num)) => { + return (self_num as f64).partial_cmp(&other_num) + } - (JsonNumber::Decimal(_self_num), JsonNumber::UnsignedInteger(_other_num)) => return None, - (JsonNumber::Decimal(_self_num), JsonNumber::SignedInteger(_other_num)) => return None, + (JsonNumber::Decimal(self_num), JsonNumber::UnsignedInteger(other_num)) => { + return self_num.partial_cmp(&(other_num as f64)) + } + (JsonNumber::Decimal(self_num), JsonNumber::SignedInteger(other_num)) => { + return self_num.partial_cmp(&(other_num as f64)) + } (JsonNumber::Decimal(self_num), JsonNumber::Decimal(other_num)) => { return self_num.partial_cmp(&other_num) }