// MIT License
//
// Copyright (c) 2016 Paul Mason
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// Copyright 2023 Datafuse Labs.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
use jsonb::RawJsonb;
use jsonb::{parse_value, parse_value_standard_mode};
use ordered_float::OrderedFloat;
#[test]
#[cfg(feature = "arbitrary_precision")]
fn it_cmps_decimals() {
use core::cmp::Ordering::*;
use jsonb::{Number, Value};
fn cmp(a: &str, b: &str, c: core::cmp::Ordering) {
let v1 = parse_value(a.as_bytes()).unwrap();
let v2 = parse_value(b.as_bytes()).unwrap();
let s1 = format!("{v1}");
let s2 = format!("{v2}");
let buf1 = v1.to_vec();
let buf2 = v2.to_vec();
let r1 = RawJsonb::new(&buf1);
let r2 = RawJsonb::new(&buf2);
let ss1 = r1.to_string();
let ss2 = r2.to_string();
// ignore -0.0 assert
let zero_val = Value::Number(Number::UInt64(0));
let zero_buf = zero_val.to_vec();
let zero = RawJsonb::new(&zero_buf);
if r1.cmp(&zero) != Equal {
assert_eq!(a, s1);
assert_eq!(a, ss1);
}
if r2.cmp(&zero) != Equal {
assert_eq!(b, s2);
assert_eq!(b, ss2);
}
assert_eq!(
c,
r1.cmp(&r2),
"{} {} {}",
a,
match c {
Less => "<",
Equal => "==",
Greater => ">",
},
b
);
}
let tests = &[
("1", "1", Equal),
("1", "-1", Greater),
("1", "1.00", Equal),
("1.2345000000000", "1.2345", Equal),
(
"1.0000000000000000000000000001",
"1.0000000000000000000000000000",
Greater,
),
(
"1.0000000000000000000000000000",
"1.0000000000000000000000000001",
Less,
),
("-1", "100", Less),
("-100", "1", Less),
("0", "0.5", Less),
("0.5", "0", Greater),
("100", "0.0098", Greater),
("1000000000000000", "999000000000000.0001", Greater),
("2.0001", "2.0001", Equal),
(
"11.815126050420168067226890757",
"0.6386554621848739495798319328",
Greater,
),
(
"0.6386554621848739495798319328",
"11.815126050420168067226890757",
Less,
),
("-0.5", "-0.01", Less),
("-0.5", "-0.1", Less),
("-0.01", "-0.5", Greater),
("-0.1", "-0.5", Greater),
// 000 equality
("0.00000000", "0.00000000", Equal),
// 000 000 same scale
("0.00000000", "0.00000000", Equal),
("-0.00000000", "0.00000000", Equal),
("0.00000000", "-0.00000000", Equal),
("-0.00000000", "-0.00000000", Equal),
// 000 000 different scale
("0.000000000", "0.00000000000000000000000", Equal),
("-0.000000000", "0.00000000000000000000000", Equal),
("0.000000000", "-0.00000000000000000000000", Equal),
("-0.000000000", "-0.00000000000000000000000", Equal),
// 000 100 same scale
("0.00000000", "6.56792910", Less),
("-0.00000000", "6.56792910", Less),
("0.00000000", "-6.56792910", Greater),
("-0.00000000", "-6.56792910", Greater),
// 000 100 different scale
(
"0.0000000000000000000",
"0.00000000000000001916236746",
Less,
),
(
"-0.0000000000000000000",
"0.00000000000000001916236746",
Less,
),
(
"0.0000000000000000000",
"-0.00000000000000001916236746",
Greater,
),
(
"-0.0000000000000000000",
"-0.00000000000000001916236746",
Greater,
),
// 000 010 same scale
("0.00000000", "49037796231.72571136", Less),
("-0.00000000", "49037796231.72571136", Less),
("0.00000000", "-49037796231.72571136", Greater),
("-0.00000000", "-49037796231.72571136", Greater),
// 000 010 different scale
("0", "14459264155.12895488", Less),
("-0", "14459264155.12895488", Less),
("0", "-14459264155.12895488", Greater),
("-0", "-14459264155.12895488", Greater),
// 000 110 same scale
("0.00000000", "38675108055.09052783", Less),
("-0.00000000", "38675108055.09052783", Less),
("0.00000000", "-38675108055.09052783", Greater),
("-0.00000000", "-38675108055.09052783", Greater),
// 000 110 different scale
("0.00", "1495767034080324868", Less),
("-0.00", "1495767034080324868", Less),
("0.00", "-1495767034080324868", Greater),
("-0.00", "-1495767034080324868", Greater),
// 000 001 same scale
("0.00000000", "359299289270893106016.81305600", Less),
("-0.00000000", "359299289270893106016.81305600", Less),
("0.00000000", "-359299289270893106016.81305600", Greater),
("-0.00000000", "-359299289270893106016.81305600", Greater),
// 000 001 different scale
(
"0.00000000000000000000000000",
"261631091689.9518486763536384",
Less,
),
(
"-0.00000000000000000000000000",
"261631091689.9518486763536384",
Less,
),
(
"0.00000000000000000000000000",
"-261631091689.9518486763536384",
Greater,
),
(
"-0.00000000000000000000000000",
"-261631091689.9518486763536384",
Greater,
),
// 000 101 same scale
("0.00000000", "184137107696737410476.63166815", Less),
("-0.00000000", "184137107696737410476.63166815", Less),
("0.00000000", "-184137107696737410476.63166815", Greater),
("-0.00000000", "-184137107696737410476.63166815", Greater),
// 000 101 different scale
("0.000000000", "2286857871088.7514840434334478", Less),
("-0.000000000", "2286857871088.7514840434334478", Less),
("0.000000000", "-2286857871088.7514840434334478", Greater),
("-0.000000000", "-2286857871088.7514840434334478", Greater),
// 000 011 same scale
("0.00000000", "169194696640288819908.07715840", Less),
("-0.00000000", "169194696640288819908.07715840", Less),
("0.00000000", "-169194696640288819908.07715840", Greater),
("-0.00000000", "-169194696640288819908.07715840", Greater),
// 000 011 different scale
("0.00000000", "2757550691.7650076909569048576", Less),
("-0.00000000", "2757550691.7650076909569048576", Less),
("0.00000000", "-2757550691.7650076909569048576", Greater),
("-0.00000000", "-2757550691.7650076909569048576", Greater),
// 000 111 same scale
("0.00000000", "133610725292915899001.10059212", Less),
("-0.00000000", "133610725292915899001.10059212", Less),
("0.00000000", "-133610725292915899001.10059212", Greater),
("-0.00000000", "-133610725292915899001.10059212", Greater),
// 000 111 different scale
(
"0.00000000000000000000",
"86.25432767926620368822165265",
Less,
),
(
"-0.00000000000000000000",
"86.25432767926620368822165265",
Less,
),
(
"0.00000000000000000000",
"-86.25432767926620368822165265",
Greater,
),
(
"-0.00000000000000000000",
"-86.25432767926620368822165265",
Greater,
),
// 100 equality
("0.0000000000598992228", "0.0000000000598992228", Equal),
// 100 000 same scale
("0.0000000000598992228", "0.0000000000000000000", Greater),
("-0.0000000000598992228", "0.0000000000000000000", Less),
("0.0000000000598992228", "-0.0000000000000000000", Greater),
("-0.0000000000598992228", "-0.0000000000000000000", Less),
// 100 000 different scale
("0.1797407597", "0.0000000000000000000", Greater),
("-0.1797407597", "0.0000000000000000000", Less),
("0.1797407597", "-0.0000000000000000000", Greater),
("-0.1797407597", "-0.0000000000000000000", Less),
// 100 100 same scale
("0.0000000000598992228", "0.0000000000064510789", Greater),
("-0.0000000000598992228", "0.0000000000064510789", Less),
("0.0000000000598992228", "-0.0000000000064510789", Greater),
("-0.0000000000598992228", "-0.0000000000064510789", Less),
// 100 100 different scale
("0.000000000000011217354", "0.0000000000217735186", Less),
("-0.000000000000011217354", "0.0000000000217735186", Less),
("0.000000000000011217354", "-0.0000000000217735186", Greater),
(
"-0.000000000000011217354",
"-0.0000000000217735186",
Greater,
),
// 100 010 same scale
("0.0000000000598992228", "0.0659116848159129600", Less),
("-0.0000000000598992228", "0.0659116848159129600", Less),
("0.0000000000598992228", "-0.0659116848159129600", Greater),
("-0.0000000000598992228", "-0.0659116848159129600", Greater),
// 100 010 different scale
("0.00042035421", "0.004709460588143575040", Less),
("-0.00042035421", "0.004709460588143575040", Less),
("0.00042035421", "-0.004709460588143575040", Greater),
("-0.00042035421", "-0.004709460588143575040", Greater),
// 100 110 same scale
("0.0000000000598992228", "0.0755686585127091375", Less),
("-0.0000000000598992228", "0.0755686585127091375", Less),
("0.0000000000598992228", "-0.0755686585127091375", Greater),
("-0.0000000000598992228", "-0.0755686585127091375", Greater),
// 100 110 different scale
("14872.94465", "1284707831905.854085", Less),
("-14872.94465", "1284707831905.854085", Less),
("14872.94465", "-1284707831905.854085", Greater),
("-14872.94465", "-1284707831905.854085", Greater),
// 100 001 same scale
(
"0.0000000000598992228",
"888767595.6145376468836286464",
Less,
),
(
"-0.0000000000598992228",
"888767595.6145376468836286464",
Less,
),
(
"0.0000000000598992228",
"-888767595.6145376468836286464",
Greater,
),
(
"-0.0000000000598992228",
"-888767595.6145376468836286464",
Greater,
),
// 100 001 different scale
("0.0002108155975", "36.07555527243968476014968832", Less),
("-0.0002108155975", "36.07555527243968476014968832", Less),
("0.0002108155975", "-36.07555527243968476014968832", Greater),
(
"-0.0002108155975",
"-36.07555527243968476014968832",
Greater,
),
// 100 101 same scale
(
"0.0000000000598992228",
"125730345.7412344676309569911",
Less,
),
(
"-0.0000000000598992228",
"125730345.7412344676309569911",
Less,
),
(
"0.0000000000598992228",
"-125730345.7412344676309569911",
Greater,
),
(
"-0.0000000000598992228",
"-125730345.7412344676309569911",
Greater,
),
// 100 101 different scale
(
"0.0000000000871576741",
"1.7283925558865766140690239662",
Less,
),
(
"-0.0000000000871576741",
"1.7283925558865766140690239662",
Less,
),
(
"0.0000000000871576741",
"-1.7283925558865766140690239662",
Greater,
),
(
"-0.0000000000871576741",
"-1.7283925558865766140690239662",
Greater,
),
// 100 011 same scale
(
"0.0000000000598992228",
"645513262.9193254090737451008",
Less,
),
(
"-0.0000000000598992228",
"645513262.9193254090737451008",
Less,
),
(
"0.0000000000598992228",
"-645513262.9193254090737451008",
Greater,
),
(
"-0.0000000000598992228",
"-645513262.9193254090737451008",
Greater,
),
// 100 011 different scale
(
"0.000000000000000760885021",
"3718370638.2004059326675681280",
Less,
),
(
"-0.000000000000000760885021",
"3718370638.2004059326675681280",
Less,
),
(
"0.000000000000000760885021",
"-3718370638.2004059326675681280",
Greater,
),
(
"-0.000000000000000760885021",
"-3718370638.2004059326675681280",
Greater,
),
// 100 111 same scale
(
"0.0000000000598992228",
"422482675.5515775479939306437",
Less,
),
(
"-0.0000000000598992228",
"422482675.5515775479939306437",
Less,
),
(
"0.0000000000598992228",
"-422482675.5515775479939306437",
Greater,
),
(
"-0.0000000000598992228",
"-422482675.5515775479939306437",
Greater,
),
// 100 111 different scale
("0.000000044182898", "25.452953262109919998605674045", Less),
("-0.000000044182898", "25.452953262109919998605674045", Less),
(
"0.000000044182898",
"-25.452953262109919998605674045",
Greater,
),
(
"-0.000000044182898",
"-25.452953262109919998605674045",
Greater,
),
// 010 equality
("423.1744746042687488", "423.1744746042687488", Equal),
// 010 000 same scale
("423.1744746042687488", "0.0000000000000000", Greater),
("-423.1744746042687488", "0.0000000000000000", Less),
("423.1744746042687488", "-0.0000000000000000", Greater),
("-423.1744746042687488", "-0.0000000000000000", Less),
// 010 000 different scale
(
"9002354991.192604672",
"0.00000000000000000000000000",
Greater,
),
(
"-9002354991.192604672",
"0.00000000000000000000000000",
Less,
),
(
"9002354991.192604672",
"-0.00000000000000000000000000",
Greater,
),
(
"-9002354991.192604672",
"-0.00000000000000000000000000",
Less,
),
// 010 100 same scale
("423.1744746042687488", "0.0000000981820809", Greater),
("-423.1744746042687488", "0.0000000981820809", Less),
("423.1744746042687488", "-0.0000000981820809", Greater),
("-423.1744746042687488", "-0.0000000981820809", Less),
// 010 100 different scale
("4327019125101559.808", "0.00484846050", Greater),
("-4327019125101559.808", "0.00484846050", Less),
("4327019125101559.808", "-0.00484846050", Greater),
("-4327019125101559.808", "-0.00484846050", Less),
// 010 010 same scale
("423.1744746042687488", "786.9082854590775296", Less),
("-423.1744746042687488", "786.9082854590775296", Less),
("423.1744746042687488", "-786.9082854590775296", Greater),
("-423.1744746042687488", "-786.9082854590775296", Greater),
// 010 010 different scale
("793.0067125291450368", "0.0001587297248335626240", Greater),
("-793.0067125291450368", "0.0001587297248335626240", Less),
("793.0067125291450368", "-0.0001587297248335626240", Greater),
("-793.0067125291450368", "-0.0001587297248335626240", Less),
// 010 110 same scale
("423.1744746042687488", "300.0541360230572049", Greater),
("-423.1744746042687488", "300.0541360230572049", Less),
("423.1744746042687488", "-300.0541360230572049", Greater),
("-423.1744746042687488", "-300.0541360230572049", Less),
// 010 110 different scale
("90627.2042582540288", "4472414566654924.741", Less),
("-90627.2042582540288", "4472414566654924.741", Less),
("90627.2042582540288", "-4472414566654924.741", Greater),
("-90627.2042582540288", "-4472414566654924.741", Greater),
// 010 001 same scale
(
"423.1744746042687488",
"3960577151543.5796707636412416",
Less,
),
(
"-423.1744746042687488",
"3960577151543.5796707636412416",
Less,
),
(
"423.1744746042687488",
"-3960577151543.5796707636412416",
Greater,
),
(
"-423.1744746042687488",
"-3960577151543.5796707636412416",
Greater,
),
// 010 001 different scale
(
"0.000008867461591822499840",
"185286.04378228713249986052096",
Less,
),
(
"-0.000008867461591822499840",
"185286.04378228713249986052096",
Less,
),
(
"0.000008867461591822499840",
"-185286.04378228713249986052096",
Greater,
),
(
"-0.000008867461591822499840",
"-185286.04378228713249986052096",
Greater,
),
// 010 101 same scale
(
"423.1744746042687488",
"2825958416017.6213507229869501",
Less,
),
(
"-423.1744746042687488",
"2825958416017.6213507229869501",
Less,
),
(
"423.1744746042687488",
"-2825958416017.6213507229869501",
Greater,
),
(
"-423.1744746042687488",
"-2825958416017.6213507229869501",
Greater,
),
// 010 101 different scale
(
"0.01901870767742648320",
"37662082383021542232.529651212",
Less,
),
(
"-0.01901870767742648320",
"37662082383021542232.529651212",
Less,
),
(
"0.01901870767742648320",
"-37662082383021542232.529651212",
Greater,
),
(
"-0.01901870767742648320",
"-37662082383021542232.529651212",
Greater,
),
// 010 011 same scale
(
"423.1744746042687488",
"3628063966991.6759417059016704",
Less,
),
(
"-423.1744746042687488",
"3628063966991.6759417059016704",
Less,
),
(
"423.1744746042687488",
"-3628063966991.6759417059016704",
Greater,
),
(
"-423.1744746042687488",
"-3628063966991.6759417059016704",
Greater,
),
// 010 011 different scale
(
"45359904.32470925312",
"2.4203452488052342918570049536",
Greater,
),
(
"-45359904.32470925312",
"2.4203452488052342918570049536",
Less,
),
(
"45359904.32470925312",
"-2.4203452488052342918570049536",
Greater,
),
(
"-45359904.32470925312",
"-2.4203452488052342918570049536",
Less,
),
// 010 111 same scale
(
"423.1744746042687488",
"2629665172331.9610693820109120",
Less,
),
(
"-423.1744746042687488",
"2629665172331.9610693820109120",
Less,
),
(
"423.1744746042687488",
"-2629665172331.9610693820109120",
Greater,
),
(
"-423.1744746042687488",
"-2629665172331.9610693820109120",
Greater,
),
// 010 111 different scale
(
"0.0006420803252266205184",
"8172.032417576265900588945489",
Less,
),
(
"-0.0006420803252266205184",
"8172.032417576265900588945489",
Less,
),
(
"0.0006420803252266205184",
"-8172.032417576265900588945489",
Greater,
),
(
"-0.0006420803252266205184",
"-8172.032417576265900588945489",
Greater,
),
// 110 equality
("844.5530620517286511", "844.5530620517286511", Equal),
// 110 000 same scale
("844.5530620517286511", "0.0000000000000000", Greater),
("-844.5530620517286511", "0.0000000000000000", Less),
("844.5530620517286511", "-0.0000000000000000", Greater),
("-844.5530620517286511", "-0.0000000000000000", Less),
// 110 000 different scale
("3285.530033386074797", "0.00000000000000000000", Greater),
("-3285.530033386074797", "0.00000000000000000000", Less),
("3285.530033386074797", "-0.00000000000000000000", Greater),
("-3285.530033386074797", "-0.00000000000000000000", Less),
// 110 100 same scale
("844.5530620517286511", "0.0000001953470063", Greater),
("-844.5530620517286511", "0.0000001953470063", Less),
("844.5530620517286511", "-0.0000001953470063", Greater),
("-844.5530620517286511", "-0.0000001953470063", Less),
// 110 100 different scale
(
"371284.0210972493371",
"0.000000000000001307794657",
Greater,
),
("-371284.0210972493371", "0.000000000000001307794657", Less),
(
"371284.0210972493371",
"-0.000000000000001307794657",
Greater,
),
("-371284.0210972493371", "-0.000000000000001307794657", Less),
// 110 010 same scale
("844.5530620517286511", "612.1542773033140224", Greater),
("-844.5530620517286511", "612.1542773033140224", Less),
("844.5530620517286511", "-612.1542773033140224", Greater),
("-844.5530620517286511", "-612.1542773033140224", Less),
// 110 010 different scale
("0.00004869219159821525572", "23341676485159.15776", Less),
("-0.00004869219159821525572", "23341676485159.15776", Less),
(
"0.00004869219159821525572",
"-23341676485159.15776",
Greater,
),
(
"-0.00004869219159821525572",
"-23341676485159.15776",
Greater,
),
// 110 110 same scale
("844.5530620517286511", "326.6132818317622015", Greater),
("-844.5530620517286511", "326.6132818317622015", Less),
("844.5530620517286511", "-326.6132818317622015", Greater),
("-844.5530620517286511", "-326.6132818317622015", Less),
// 110 110 different scale
("4752139369958.820619", "1330851022882027.972", Less),
("-4752139369958.820619", "1330851022882027.972", Less),
("4752139369958.820619", "-1330851022882027.972", Greater),
("-4752139369958.820619", "-1330851022882027.972", Greater),
// 110 001 same scale
(
"844.5530620517286511",
"3585610241942.1922435648192512",
Less,
),
(
"-844.5530620517286511",
"3585610241942.1922435648192512",
Less,
),
(
"844.5530620517286511",
"-3585610241942.1922435648192512",
Greater,
),
(
"-844.5530620517286511",
"-3585610241942.1922435648192512",
Greater,
),
// 110 001 different scale
(
"539313715923.4424678",
"12410950080603997079634706432",
Less,
),
(
"-539313715923.4424678",
"12410950080603997079634706432",
Less,
),
(
"539313715923.4424678",
"-12410950080603997079634706432",
Greater,
),
(
"-539313715923.4424678",
"-12410950080603997079634706432",
Greater,
),
// 110 101 same scale
(
"844.5530620517286511",
"1947825396031.6933708908343230",
Less,
),
(
"-844.5530620517286511",
"1947825396031.6933708908343230",
Less,
),
(
"844.5530620517286511",
"-1947825396031.6933708908343230",
Greater,
),
(
"-844.5530620517286511",
"-1947825396031.6933708908343230",
Greater,
),
// 110 101 different scale
(
"0.2301405445512525317",
"245433629587.71206426704897154",
Less,
),
(
"-0.2301405445512525317",
"245433629587.71206426704897154",
Less,
),
(
"0.2301405445512525317",
"-245433629587.71206426704897154",
Greater,
),
(
"-0.2301405445512525317",
"-245433629587.71206426704897154",
Greater,
),
// 110 011 same scale
(
"844.5530620517286511",
"3637850451015.0843464291450880",
Less,
),
(
"-844.5530620517286511",
"3637850451015.0843464291450880",
Less,
),
(
"844.5530620517286511",
"-3637850451015.0843464291450880",
Greater,
),
(
"-844.5530620517286511",
"-3637850451015.0843464291450880",
Greater,
),
// 110 011 different scale
(
"0.00000000717944802566514691",
"18143443615.480512395717115904",
Less,
),
(
"-0.00000000717944802566514691",
"18143443615.480512395717115904",
Less,
),
(
"0.00000000717944802566514691",
"-18143443615.480512395717115904",
Greater,
),
(
"-0.00000000717944802566514691",
"-18143443615.480512395717115904",
Greater,
),
// 110 111 same scale
(
"844.5530620517286511",
"2738424264600.4917875777303163",
Less,
),
(
"-844.5530620517286511",
"2738424264600.4917875777303163",
Less,
),
(
"844.5530620517286511",
"-2738424264600.4917875777303163",
Greater,
),
(
"-844.5530620517286511",
"-2738424264600.4917875777303163",
Greater,
),
// 110 111 different scale
(
"0.0000000007762706076409491335",
"2489879185787497651.6458518595",
Less,
),
(
"-0.0000000007762706076409491335",
"2489879185787497651.6458518595",
Less,
),
(
"0.0000000007762706076409491335",
"-2489879185787497651.6458518595",
Greater,
),
(
"-0.0000000007762706076409491335",
"-2489879185787497651.6458518595",
Greater,
),
// 001 equality
(
"316007568232.9263258873102336",
"316007568232.9263258873102336",
Equal,
),
// 001 000 same scale
(
"316007568232.9263258873102336",
"0.0000000000000000",
Greater,
),
("-316007568232.9263258873102336", "0.0000000000000000", Less),
(
"316007568232.9263258873102336",
"-0.0000000000000000",
Greater,
),
(
"-316007568232.9263258873102336",
"-0.0000000000000000",
Less,
),
// 001 000 different scale
("3522055990024364385815547084.8", "0.000000000000", Greater),
("-3522055990024364385815547084.8", "0.000000000000", Less),
("3522055990024364385815547084.8", "-0.000000000000", Greater),
("-3522055990024364385815547084.8", "-0.000000000000", Less),
// 001 100 same scale
(
"316007568232.9263258873102336",
"0.0000001073412971",
Greater,
),
("-316007568232.9263258873102336", "0.0000001073412971", Less),
(
"316007568232.9263258873102336",
"-0.0000001073412971",
Greater,
),
(
"-316007568232.9263258873102336",
"-0.0000001073412971",
Less,
),
// 001 100 different scale
(
"1319006.0491408208640440532992",
"0.00000000000000611866432",
Greater,
),
(
"-1319006.0491408208640440532992",
"0.00000000000000611866432",
Less,
),
(
"1319006.0491408208640440532992",
"-0.00000000000000611866432",
Greater,
),
(
"-1319006.0491408208640440532992",
"-0.00000000000000611866432",
Less,
),
// 001 010 same scale
(
"316007568232.9263258873102336",
"159.1054215143227392",
Greater,
),
(
"-316007568232.9263258873102336",
"159.1054215143227392",
Less,
),
(
"316007568232.9263258873102336",
"-159.1054215143227392",
Greater,
),
(
"-316007568232.9263258873102336",
"-159.1054215143227392",
Less,
),
// 001 010 different scale
(
"2470144.7146711063666704252928",
"211.0186916505714688",
Greater,
),
(
"-2470144.7146711063666704252928",
"211.0186916505714688",
Less,
),
(
"2470144.7146711063666704252928",
"-211.0186916505714688",
Greater,
),
(
"-2470144.7146711063666704252928",
"-211.0186916505714688",
Less,
),
// 001 110 same scale
(
"316007568232.9263258873102336",
"15.1186658969096112",
Greater,
),
(
"-316007568232.9263258873102336",
"15.1186658969096112",
Less,
),
(
"316007568232.9263258873102336",
"-15.1186658969096112",
Greater,
),
(
"-316007568232.9263258873102336",
"-15.1186658969096112",
Less,
),
// 001 110 different scale
(
"3840504199004148630832.3360768",
"7581138850996748864",
Greater,
),
(
"-3840504199004148630832.3360768",
"7581138850996748864",
Less,
),
(
"3840504199004148630832.3360768",
"-7581138850996748864",
Greater,
),
(
"-3840504199004148630832.3360768",
"-7581138850996748864",
Less,
),
// 001 001 same scale
(
"316007568232.9263258873102336",
"810157633226.6053390856880128",
Less,
),
(
"-316007568232.9263258873102336",
"810157633226.6053390856880128",
Less,
),
(
"316007568232.9263258873102336",
"-810157633226.6053390856880128",
Greater,
),
(
"-316007568232.9263258873102336",
"-810157633226.6053390856880128",
Greater,
),
// 001 001 different scale
(
"1951046382014.4037956952260608",
"3626102772868740412010083.1232",
Less,
),
(
"-1951046382014.4037956952260608",
"3626102772868740412010083.1232",
Less,
),
(
"1951046382014.4037956952260608",
"-3626102772868740412010083.1232",
Greater,
),
(
"-1951046382014.4037956952260608",
"-3626102772868740412010083.1232",
Greater,
),
// 001 101 same scale
(
"316007568232.9263258873102336",
"3258394380359.1965879291312453",
Less,
),
(
"-316007568232.9263258873102336",
"3258394380359.1965879291312453",
Less,
),
(
"316007568232.9263258873102336",
"-3258394380359.1965879291312453",
Greater,
),
(
"-316007568232.9263258873102336",
"-3258394380359.1965879291312453",
Greater,
),
// 001 101 different scale
(
"17580513970289834.943527780352",
"3.7977957031395371036126086595",
Greater,
),
(
"-17580513970289834.943527780352",
"3.7977957031395371036126086595",
Less,
),
(
"17580513970289834.943527780352",
"-3.7977957031395371036126086595",
Greater,
),
(
"-17580513970289834.943527780352",
"-3.7977957031395371036126086595",
Less,
),
// 001 011 same scale
(
"316007568232.9263258873102336",
"1154574080460.9867510617997312",
Less,
),
(
"-316007568232.9263258873102336",
"1154574080460.9867510617997312",
Less,
),
(
"316007568232.9263258873102336",
"-1154574080460.9867510617997312",
Greater,
),
(
"-316007568232.9263258873102336",
"-1154574080460.9867510617997312",
Greater,
),
// 001 011 different scale
(
"2008379587.5525351789031325696",
"32824109460554.341800487157760",
Less,
),
(
"-2008379587.5525351789031325696",
"32824109460554.341800487157760",
Less,
),
(
"2008379587.5525351789031325696",
"-32824109460554.341800487157760",
Greater,
),
(
"-2008379587.5525351789031325696",
"-32824109460554.341800487157760",
Greater,
),
// 001 111 same scale
(
"316007568232.9263258873102336",
"2816795479724.6069787794805311",
Less,
),
(
"-316007568232.9263258873102336",
"2816795479724.6069787794805311",
Less,
),
(
"316007568232.9263258873102336",
"-2816795479724.6069787794805311",
Greater,
),
(
"-316007568232.9263258873102336",
"-2816795479724.6069787794805311",
Greater,
),
// 001 111 different scale
(
"3536806574745420013541890.4576",
"9793146.81730411145833529126",
Greater,
),
(
"-3536806574745420013541890.4576",
"9793146.81730411145833529126",
Less,
),
(
"3536806574745420013541890.4576",
"-9793146.81730411145833529126",
Greater,
),
(
"-3536806574745420013541890.4576",
"-9793146.81730411145833529126",
Less,
),
// 101 equality
(
"254208186622762823842.71629992",
"254208186622762823842.71629992",
Equal,
),
// 101 000 same scale
("254208186622762823842.71629992", "0.00000000", Greater),
("-254208186622762823842.71629992", "0.00000000", Less),
("254208186622762823842.71629992", "-0.00000000", Greater),
("-254208186622762823842.71629992", "-0.00000000", Less),
// 101 000 different scale
(
"975421950664039.3614304091804",
"0.0000000000000000",
Greater,
),
("-975421950664039.3614304091804", "0.0000000000000000", Less),
(
"975421950664039.3614304091804",
"-0.0000000000000000",
Greater,
),
(
"-975421950664039.3614304091804",
"-0.0000000000000000",
Less,
),
// 101 100 same scale
("254208186622762823842.71629992", "10.74141379", Greater),
("-254208186622762823842.71629992", "10.74141379", Less),
("254208186622762823842.71629992", "-10.74141379", Greater),
("-254208186622762823842.71629992", "-10.74141379", Less),
// 101 100 different scale
(
"2552221405032275.8358630506229",
"0.000000000000000592656995",
Greater,
),
(
"-2552221405032275.8358630506229",
"0.000000000000000592656995",
Less,
),
(
"2552221405032275.8358630506229",
"-0.000000000000000592656995",
Greater,
),
(
"-2552221405032275.8358630506229",
"-0.000000000000000592656995",
Less,
),
// 101 010 same scale
(
"254208186622762823842.71629992",
"62767493748.48499712",
Greater,
),
(
"-254208186622762823842.71629992",
"62767493748.48499712",
Less,
),
(
"254208186622762823842.71629992",
"-62767493748.48499712",
Greater,
),
(
"-254208186622762823842.71629992",
"-62767493748.48499712",
Less,
),
// 101 010 different scale
(
"197346074219.25327589999174264",
"0.7623493575178715136",
Greater,
),
(
"-197346074219.25327589999174264",
"0.7623493575178715136",
Less,
),
(
"197346074219.25327589999174264",
"-0.7623493575178715136",
Greater,
),
(
"-197346074219.25327589999174264",
"-0.7623493575178715136",
Less,
),
// 101 110 same scale
(
"254208186622762823842.71629992",
"76597126194.51389094",
Greater,
),
(
"-254208186622762823842.71629992",
"76597126194.51389094",
Less,
),
(
"254208186622762823842.71629992",
"-76597126194.51389094",
Greater,
),
(
"-254208186622762823842.71629992",
"-76597126194.51389094",
Less,
),
// 101 110 different scale
(
"25899773651648.380071130043467",
"61306258142804903.38",
Less,
),
(
"-25899773651648.380071130043467",
"61306258142804903.38",
Less,
),
(
"25899773651648.380071130043467",
"-61306258142804903.38",
Greater,
),
(
"-25899773651648.380071130043467",
"-61306258142804903.38",
Greater,
),
// 101 001 same scale
(
"254208186622762823842.71629992",
"83547191565151621967.28086528",
Greater,
),
(
"-254208186622762823842.71629992",
"83547191565151621967.28086528",
Less,
),
(
"254208186622762823842.71629992",
"-83547191565151621967.28086528",
Greater,
),
(
"-254208186622762823842.71629992",
"-83547191565151621967.28086528",
Less,
),
// 101 001 different scale
(
"244762.90302171293318719286219",
"9964072.600255221193011888128",
Less,
),
(
"-244762.90302171293318719286219",
"9964072.600255221193011888128",
Less,
),
(
"244762.90302171293318719286219",
"-9964072.600255221193011888128",
Greater,
),
(
"-244762.90302171293318719286219",
"-9964072.600255221193011888128",
Greater,
),
// 101 101 same scale
(
"254208186622762823842.71629992",
"106541875981662806348.63716235",
Greater,
),
(
"-254208186622762823842.71629992",
"106541875981662806348.63716235",
Less,
),
(
"254208186622762823842.71629992",
"-106541875981662806348.63716235",
Greater,
),
(
"-254208186622762823842.71629992",
"-106541875981662806348.63716235",
Less,
),
// 101 101 different scale
(
"362319.18250030256385507568342",
"3619454249020577423546109236",
Less,
),
(
"-362319.18250030256385507568342",
"3619454249020577423546109236",
Less,
),
(
"362319.18250030256385507568342",
"-3619454249020577423546109236",
Greater,
),
(
"-362319.18250030256385507568342",
"-3619454249020577423546109236",
Greater,
),
// 101 011 same scale
(
"254208186622762823842.71629992",
"156781478378762688050.06557184",
Greater,
),
(
"-254208186622762823842.71629992",
"156781478378762688050.06557184",
Less,
),
(
"254208186622762823842.71629992",
"-156781478378762688050.06557184",
Greater,
),
(
"-254208186622762823842.71629992",
"-156781478378762688050.06557184",
Less,
),
// 101 011 different scale
(
"2486073465266.0337130589931876",
"153874906950888902858.19691008",
Less,
),
(
"-2486073465266.0337130589931876",
"153874906950888902858.19691008",
Less,
),
(
"2486073465266.0337130589931876",
"-153874906950888902858.19691008",
Greater,
),
(
"-2486073465266.0337130589931876",
"-153874906950888902858.19691008",
Greater,
),
// 101 111 same scale
(
"254208186622762823842.71629992",
"10101645723744656462.08148676",
Greater,
),
(
"-254208186622762823842.71629992",
"10101645723744656462.08148676",
Less,
),
(
"254208186622762823842.71629992",
"-10101645723744656462.08148676",
Greater,
),
(
"-254208186622762823842.71629992",
"-10101645723744656462.08148676",
Less,
),
// 101 111 different scale
(
"14107601965.909635434653634526",
"111238758546502973973477.99454",
Less,
),
(
"-14107601965.909635434653634526",
"111238758546502973973477.99454",
Less,
),
(
"14107601965.909635434653634526",
"-111238758546502973973477.99454",
Greater,
),
(
"-14107601965.909635434653634526",
"-111238758546502973973477.99454",
Greater,
),
// 011 equality
(
"272322.48219624218537039495168",
"272322.48219624218537039495168",
Equal,
),
// 011 000 same scale
(
"272322.48219624218537039495168",
"0.00000000000000000000000",
Greater,
),
(
"-272322.48219624218537039495168",
"0.00000000000000000000000",
Less,
),
(
"272322.48219624218537039495168",
"-0.00000000000000000000000",
Greater,
),
(
"-272322.48219624218537039495168",
"-0.00000000000000000000000",
Less,
),
// 011 000 different scale
(
"3214885516.0787854158246969344",
"0.00000000000000000",
Greater,
),
(
"-3214885516.0787854158246969344",
"0.00000000000000000",
Less,
),
(
"3214885516.0787854158246969344",
"-0.00000000000000000",
Greater,
),
(
"-3214885516.0787854158246969344",
"-0.00000000000000000",
Less,
),
// 011 100 same scale
(
"272322.48219624218537039495168",
"0.00000000000000379487994",
Greater,
),
(
"-272322.48219624218537039495168",
"0.00000000000000379487994",
Less,
),
(
"272322.48219624218537039495168",
"-0.00000000000000379487994",
Greater,
),
(
"-272322.48219624218537039495168",
"-0.00000000000000379487994",
Less,
),
// 011 100 different scale
(
"388166715906.19371912596291584",
"0.000000000000001996700736",
Greater,
),
(
"-388166715906.19371912596291584",
"0.000000000000001996700736",
Less,
),
(
"388166715906.19371912596291584",
"-0.000000000000001996700736",
Greater,
),
(
"-388166715906.19371912596291584",
"-0.000000000000001996700736",
Less,
),
// 011 010 same scale
(
"272322.48219624218537039495168",
"0.00000175873997328613376",
Greater,
),
(
"-272322.48219624218537039495168",
"0.00000175873997328613376",
Less,
),
(
"272322.48219624218537039495168",
"-0.00000175873997328613376",
Greater,
),
(
"-272322.48219624218537039495168",
"-0.00000175873997328613376",
Less,
),
// 011 010 different scale
(
"17963864.0946434527121637376",
"0.0000000001112699367808040960",
Greater,
),
(
"-17963864.0946434527121637376",
"0.0000000001112699367808040960",
Less,
),
(
"17963864.0946434527121637376",
"-0.0000000001112699367808040960",
Greater,
),
(
"-17963864.0946434527121637376",
"-0.0000000001112699367808040960",
Less,
),
// 011 110 same scale
(
"272322.48219624218537039495168",
"0.00009168252278596474115",
Greater,
),
(
"-272322.48219624218537039495168",
"0.00009168252278596474115",
Less,
),
(
"272322.48219624218537039495168",
"-0.00009168252278596474115",
Greater,
),
(
"-272322.48219624218537039495168",
"-0.00009168252278596474115",
Less,
),
// 011 110 different scale
(
"3.1530040332824324172729548800",
"0.05636139104712652784",
Greater,
),
(
"-3.1530040332824324172729548800",
"0.05636139104712652784",
Less,
),
(
"3.1530040332824324172729548800",
"-0.05636139104712652784",
Greater,
),
(
"-3.1530040332824324172729548800",
"-0.05636139104712652784",
Less,
),
// 011 001 same scale
(
"272322.48219624218537039495168",
"78956.15667671475190631497728",
Greater,
),
(
"-272322.48219624218537039495168",
"78956.15667671475190631497728",
Less,
),
(
"272322.48219624218537039495168",
"-78956.15667671475190631497728",
Greater,
),
(
"-272322.48219624218537039495168",
"-78956.15667671475190631497728",
Less,
),
// 011 001 different scale
(
"247159638929.90774677497446400",
"18573048.37697991870462820352",
Greater,
),
(
"-247159638929.90774677497446400",
"18573048.37697991870462820352",
Less,
),
(
"247159638929.90774677497446400",
"-18573048.37697991870462820352",
Greater,
),
(
"-247159638929.90774677497446400",
"-18573048.37697991870462820352",
Less,
),
// 011 101 same scale
(
"272322.48219624218537039495168",
"311953.28803357654172947915942",
Less,
),
(
"-272322.48219624218537039495168",
"311953.28803357654172947915942",
Less,
),
(
"272322.48219624218537039495168",
"-311953.28803357654172947915942",
Greater,
),
(
"-272322.48219624218537039495168",
"-311953.28803357654172947915942",
Greater,
),
// 011 101 different scale
(
"2922696937234119470.0273745920",
"22441101906503785827606686629",
Less,
),
(
"-2922696937234119470.0273745920",
"22441101906503785827606686629",
Less,
),
(
"2922696937234119470.0273745920",
"-22441101906503785827606686629",
Greater,
),
(
"-2922696937234119470.0273745920",
"-22441101906503785827606686629",
Greater,
),
// 011 011 same scale
(
"272322.48219624218537039495168",
"348316.28306497394164006649856",
Less,
),
(
"-272322.48219624218537039495168",
"348316.28306497394164006649856",
Less,
),
(
"272322.48219624218537039495168",
"-348316.28306497394164006649856",
Greater,
),
(
"-272322.48219624218537039495168",
"-348316.28306497394164006649856",
Greater,
),
// 011 011 different scale
(
"178190346.76624086261395619840",
"62208030746.22038852927225856",
Less,
),
(
"-178190346.76624086261395619840",
"62208030746.22038852927225856",
Less,
),
(
"178190346.76624086261395619840",
"-62208030746.22038852927225856",
Greater,
),
(
"-178190346.76624086261395619840",
"-62208030746.22038852927225856",
Greater,
),
// 011 111 same scale
(
"272322.48219624218537039495168",
"41534.52021391898039335355927",
Greater,
),
(
"-272322.48219624218537039495168",
"41534.52021391898039335355927",
Less,
),
(
"272322.48219624218537039495168",
"-41534.52021391898039335355927",
Greater,
),
(
"-272322.48219624218537039495168",
"-41534.52021391898039335355927",
Less,
),
// 011 111 different scale
(
"11.959910518519677083499626496",
"2844684364802261541879551.2259",
Less,
),
(
"-11.959910518519677083499626496",
"2844684364802261541879551.2259",
Less,
),
(
"11.959910518519677083499626496",
"-2844684364802261541879551.2259",
Greater,
),
(
"-11.959910518519677083499626496",
"-2844684364802261541879551.2259",
Greater,
),
// 111 equality
(
"3836286746260530032892706.6174",
"3836286746260530032892706.6174",
Equal,
),
// 111 000 same scale
("3836286746260530032892706.6174", "0.0000", Greater),
("-3836286746260530032892706.6174", "0.0000", Less),
("3836286746260530032892706.6174", "-0.0000", Greater),
("-3836286746260530032892706.6174", "-0.0000", Less),
// 111 000 different scale
("4401861854803552.033657814547", "0.0000000", Greater),
("-4401861854803552.033657814547", "0.0000000", Less),
("4401861854803552.033657814547", "-0.0000000", Greater),
("-4401861854803552.033657814547", "-0.0000000", Less),
// 111 100 same scale
("3836286746260530032892706.6174", "68758.6561", Greater),
("-3836286746260530032892706.6174", "68758.6561", Less),
("3836286746260530032892706.6174", "-68758.6561", Greater),
("-3836286746260530032892706.6174", "-68758.6561", Less),
// 111 100 different scale
(
"18794337354296131695536777.153",
"0.000000000000000001563875977",
Greater,
),
(
"-18794337354296131695536777.153",
"0.000000000000000001563875977",
Less,
),
(
"18794337354296131695536777.153",
"-0.000000000000000001563875977",
Greater,
),
(
"-18794337354296131695536777.153",
"-0.000000000000000001563875977",
Less,
),
// 111 010 same scale
(
"3836286746260530032892706.6174",
"439097665563236.7616",
Greater,
),
(
"-3836286746260530032892706.6174",
"439097665563236.7616",
Less,
),
(
"3836286746260530032892706.6174",
"-439097665563236.7616",
Greater,
),
(
"-3836286746260530032892706.6174",
"-439097665563236.7616",
Less,
),
// 111 010 different scale
(
"219364497389.57405761662363679",
"0.6569644274462228480",
Greater,
),
(
"-219364497389.57405761662363679",
"0.6569644274462228480",
Less,
),
(
"219364497389.57405761662363679",
"-0.6569644274462228480",
Greater,
),
(
"-219364497389.57405761662363679",
"-0.6569644274462228480",
Less,
),
// 111 110 same scale
(
"3836286746260530032892706.6174",
"100013274294974.8269",
Greater,
),
(
"-3836286746260530032892706.6174",
"100013274294974.8269",
Less,
),
(
"3836286746260530032892706.6174",
"-100013274294974.8269",
Greater,
),
(
"-3836286746260530032892706.6174",
"-100013274294974.8269",
Less,
),
// 111 110 different scale
(
"76072704083682.85472479207171",
"50.52437989651117182",
Greater,
),
(
"-76072704083682.85472479207171",
"50.52437989651117182",
Less,
),
(
"76072704083682.85472479207171",
"-50.52437989651117182",
Greater,
),
(
"-76072704083682.85472479207171",
"-50.52437989651117182",
Less,
),
// 111 001 same scale
(
"3836286746260530032892706.6174",
"2766133872545894272402142.0032",
Greater,
),
(
"-3836286746260530032892706.6174",
"2766133872545894272402142.0032",
Less,
),
(
"3836286746260530032892706.6174",
"-2766133872545894272402142.0032",
Greater,
),
(
"-3836286746260530032892706.6174",
"-2766133872545894272402142.0032",
Less,
),
// 111 001 different scale
(
"38199979438250010.80610984395",
"31104752430710.408848162684928",
Greater,
),
(
"-38199979438250010.80610984395",
"31104752430710.408848162684928",
Less,
),
(
"38199979438250010.80610984395",
"-31104752430710.408848162684928",
Greater,
),
(
"-38199979438250010.80610984395",
"-31104752430710.408848162684928",
Less,
),
// 111 101 same scale
(
"3836286746260530032892706.6174",
"441847458119168110406908.6115",
Greater,
),
(
"-3836286746260530032892706.6174",
"441847458119168110406908.6115",
Less,
),
(
"3836286746260530032892706.6174",
"-441847458119168110406908.6115",
Greater,
),
(
"-3836286746260530032892706.6174",
"-441847458119168110406908.6115",
Less,
),
// 111 101 different scale
(
"255945012905633524.15746865235",
"1005021647855597114428453997.8",
Less,
),
(
"-255945012905633524.15746865235",
"1005021647855597114428453997.8",
Less,
),
(
"255945012905633524.15746865235",
"-1005021647855597114428453997.8",
Greater,
),
(
"-255945012905633524.15746865235",
"-1005021647855597114428453997.8",
Greater,
),
// 111 011 same scale
(
"3836286746260530032892706.6174",
"1111481055212557787730018.3040",
Greater,
),
(
"-3836286746260530032892706.6174",
"1111481055212557787730018.3040",
Less,
),
(
"3836286746260530032892706.6174",
"-1111481055212557787730018.3040",
Greater,
),
(
"-3836286746260530032892706.6174",
"-1111481055212557787730018.3040",
Less,
),
// 111 011 different scale
(
"79710135995301690627798250.27",
"4613684285077.479267304996864",
Greater,
),
(
"-79710135995301690627798250.27",
"4613684285077.479267304996864",
Less,
),
(
"79710135995301690627798250.27",
"-4613684285077.479267304996864",
Greater,
),
(
"-79710135995301690627798250.27",
"-4613684285077.479267304996864",
Less,
),
// 111 111 same scale
(
"3836286746260530032892706.6174",
"1881105048659612897896770.8539",
Greater,
),
(
"-3836286746260530032892706.6174",
"1881105048659612897896770.8539",
Less,
),
(
"3836286746260530032892706.6174",
"-1881105048659612897896770.8539",
Greater,
),
(
"-3836286746260530032892706.6174",
"-1881105048659612897896770.8539",
Less,
),
// 111 111 different scale
(
"3879592276836332218003.2886500",
"35612499407667292.686490959658",
Greater,
),
(
"-3879592276836332218003.2886500",
"35612499407667292.686490959658",
Less,
),
(
"3879592276836332218003.2886500",
"-35612499407667292.686490959658",
Greater,
),
(
"-3879592276836332218003.2886500",
"-35612499407667292.686490959658",
Less,
),
];
for &(a, b, c) in tests {
cmp(a, b, c);
}
}
#[test]
fn test_parse_decimal() {
let tests = [
"10000000000000000000000000000000000000",
"100000000000000000000000000000000000004",
"1.00000000000000000000000000000000000004",
"123.4500000000000000000000000000000000000004",
"123.0045000000000000000000000000000000000004",
"123450000000000000000000.0000000000000000004",
"0.001234500000000000000000000000000000000004",
"-123456789012345678",
"123456789012345678",
"-123456789012.34567890123456789012345678",
"12345678901234567890123456.789012345678",
"-12345678901234567890123456789012345678901234567890123456789.01234567890123456",
"1234567890123.456789012345678901234567890123456789012345678901234567890123456",
"-999999999999999999",
"999999999999999999",
"-999999999.99999999999999999999999999999",
"-99999999999999999999999999999999999999",
"9999999999999999999999999.9999999999999",
"99999999999999999999999999999999999999",
"-999999999999999999999999999999999999999999999999999.9999999999999999999999999",
"-9999999999999999999999999999999999999999999999999999999999999999999999999999",
"99999999999999999999999999999999999.99999999999999999999999999999999999999999",
"9999999999999999999999999999999999999999999999999999999999999999999999999999",
"1.123456",
"-0.123456",
"-1.00",
"92233720368547758.07",
"-92233720368547758.08",
"233.323223",
"-233.43343",
"0.000001",
"-0.000001",
"79228162514264337593543950330",
"79.228162514264337593543950330",
"12.3456789",
"5233.9008808150288439427720175",
"-5233.9008808150288439427720175",
"-1.9393111376951473493673267553",
"-0.1939311137695147349367326755",
"-0.0193931113769514734936732676",
"-0.0019393111376951473493673268",
"3.1415926535897932384626433833",
"6.2831853071795864769252867666",
"1.5707963267948966192313216916",
"2.7182818284590452353602874714",
"0.3678794411714423215955237702",
"-714606667614253123173036.85120",
"-79228157791897.854723898738431",
"184512476.73336922111",
"0.1000000000000000055511151231257827021181583404541015625",
"0.333333333333333314829616256247390992939472198486328125",
"3.141592653589793115997963468544185161590576171875",
"3.000000000000000444089209850062616169452667236328125",
"0.001000000047497451305389404296875",
"0.033203125",
"1401757440",
"21509.19921875",
"2289619968",
"0.00000999999974737875163555145263671875",
"0.100000001490116119384765625",
"0.20000000298023223876953125",
"0.00000000023283064365386962890625",
"0.146938621997833251953125",
"100000002004087734272",
"1000000015047466219876688855040",
"99999996802856924650656260769173209088",
"317000006395220278118691742155288870912",
];
#[cfg(feature = "arbitrary_precision")]
for test in tests {
let v = parse_value(test.as_bytes()).unwrap();
let s = format!("{v}");
let buf = v.to_vec();
let r = RawJsonb::new(&buf);
let ss = r.to_string();
assert_eq!(test, s);
assert_eq!(test, ss);
}
// standard json
for test in tests {
let v = parse_value_standard_mode(test.as_bytes()).unwrap();
let s = OrderedFloat(v.as_f64().unwrap());
let buf = v.to_vec();
let r = RawJsonb::new(&buf);
let ss = OrderedFloat(r.as_f64().unwrap().unwrap());
let val: f64 = fast_float2::parse(test).unwrap();
let expected = OrderedFloat(val);
assert_eq!(expected, s);
assert_eq!(expected, ss);
}
}
#[test]
fn test_parse_float() {
let tests = [
("-1e+77", "-99999999999999999999999999999999999999999999999999999999999999999999999999991"),
("1e+79", "9999999999999999999999999999999999999999999999999999999999999999999999999999123"),
("2.350988981904268e-38", "2.35098898190426788090088725919040801362055736959656341832065776397049129686767088287524529732763767242431640625E-38"),
("2.350987440475957e-38", "2.350987440475957123602109243087866394712812961308427354153308831195379018097479928428583662025630474090576171875E-38"),
("3.1700000098946436e-38", "3.1700000098946435501119816090716154772221806896649747100732700841687651538425285480116144753992557525634765625E-38"),
("1.401298464324817e-45", "1.40129846432481707092372958328991613128026194187651577175706828388979108268586060148663818836212158203125E-45"),
("1.0005271035279194e-42", "1.0005271035279193886395429224690001177341070264998322610345467546973108330377044694614596664905548095703125e-42"),
("3.919999330594565e-39", "3.91999933059456489828739575494312783522406115751507460249208160269472102366083987590172910131514072418212890625E-39"),
("8.544283616667655e-306", "8.5442836166676545758745469881475846986178991076220674838778719735182619591847930738097459423424470941335996703553180065389909675214026779902482660710563190540056652827644969523715287333767167538014707594736533997824798692690142890189753467148541192574394234161821394612038920127719106177776787375705338074667624093006332620080979623387970617655687653904110103913103933178304212511707769987213793880764157458662751217010283883439888757033430556011326632895537144105152597427684695380215955244686097497705226475608085097617996058799189036784865947060736971859470127760066696392182317083388979882704968230500619384728741377732016919538675848783600526390429792978252568964346334556191024880163233082812954995600973750951114861484914086986464099027216434478759765625e-306"),
("3e+300", "3000000000000000157514280765613260746113405743324477464747562346535407373966724587359114125241343592131113331498651634530827569706081291726934376554360120948545161602779727411213490701384364270178106859704912399835243357116902922640223958228340427483737776366460170528514347008416589160596378201620480"),
("3.105036184601418e+231", "3105036184601417870297958976925005110513772034233393222278104076052101905372753772661756817657292955900975461394262146412343160088229628782888574550082362278408909952041699811100530571263196889650525998387432937501785693707632115712"),
("2.81341650018752e-308", "2.8134165001875198278759275525943498067505063001967969175506480744152639496835355462897889950138699429916690515722729976876607247658891051736045520063301219592298855232146428654590713004216312194773871772185068366206180596731958890086634117134422695105490626598276746331472433159429067991016548063113298957324839879447939977012897422163463450947345510093578791948321798481101505330952230105511530048812659083481787407026258844307461890753626327683153826358878159001221539330872743255707112001100520519610144879206546597846231715071742093092641158571855689231930930474890818690333095288369471228217443460522531282790309374378111440076317827545086535792316428407651758951233693496387904508572484340169054222573303301594335791590596740352481219815672375261783599853515625E-308"),
("-1.7976931348623157e+308", "-179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368"),
("1.7976931348623157e+308", "179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368"),
];
for (expected, test) in tests {
let v = parse_value(test.as_bytes()).unwrap();
let s = format!("{v}");
let buf = v.to_vec();
let r = RawJsonb::new(&buf);
let ss = r.to_string();
assert_eq!(expected, s);
assert_eq!(expected, ss);
}
// standard json
for (expected, test) in tests {
let v = parse_value_standard_mode(test.as_bytes()).unwrap();
let s = format!("{v}");
let buf = v.to_vec();
let r = RawJsonb::new(&buf);
let ss = r.to_string();
assert_eq!(expected, s);
assert_eq!(expected, ss);
}
}