#![cfg(feature = "with-num-bigint")]
mod common;
use num_bigint::{BigInt, BigUint, Sign};
use num_format::{CustomFormat, ToFormattedString, WriteFormatted};
use crate::common::POLICIES;
#[test]
fn test_num_big_int() {
let test_cases: &[(&str, BigInt, &CustomFormat)] = &[
("\u{200e}-\u{200e}1𠜱000", BigInt::new(Sign::Minus, vec![1000]), &POLICIES[2]),
("\u{200e}-\u{200e}1𠜱00𠜱000", BigInt::new(Sign::Minus, vec![100000]), &POLICIES[2]),
("1", BigInt::new(Sign::Plus, vec![1]), &POLICIES[0]),
("1", BigInt::new(Sign::Plus, vec![1]), &POLICIES[1]),
("1", BigInt::new(Sign::Plus, vec![1]), &POLICIES[2]),
("1", BigInt::new(Sign::Plus, vec![1]), &POLICIES[3]),
("1", BigInt::new(Sign::Plus, vec![1]), &POLICIES[4]),
(
"340,282,366,920,938,463,463,374,607,431,768,211,455",
BigInt::new(
Sign::Plus,
vec![std::u32::MAX, std::u32::MAX, std::u32::MAX, std::u32::MAX],
),
&POLICIES[0],
),
(
"340𠜱282𠜱366𠜱920𠜱938𠜱463𠜱463𠜱374𠜱607𠜱431𠜱768𠜱211𠜱455",
BigInt::new(
Sign::Plus,
vec![std::u32::MAX, std::u32::MAX, std::u32::MAX, std::u32::MAX],
),
&POLICIES[1],
),
(
"34𠜱02𠜱82𠜱36𠜱69𠜱20𠜱93𠜱84𠜱63𠜱46𠜱33𠜱74𠜱60𠜱74𠜱31𠜱76𠜱82𠜱11𠜱455",
BigInt::new(
Sign::Plus,
vec![std::u32::MAX, std::u32::MAX, std::u32::MAX, std::u32::MAX],
),
&POLICIES[2],
),
(
"340282366920938463463374607431768211455",
BigInt::new(
Sign::Plus,
vec![std::u32::MAX, std::u32::MAX, std::u32::MAX, std::u32::MAX],
),
&POLICIES[3],
),
(
"340282366920938463463374607431768211455",
BigInt::new(
Sign::Plus,
vec![std::u32::MAX, std::u32::MAX, std::u32::MAX, std::u32::MAX],
),
&POLICIES[4],
),
(
"-340,282,366,920,938,463,463,374,607,431,768,211,455",
BigInt::new(
Sign::Minus,
vec![std::u32::MAX, std::u32::MAX, std::u32::MAX, std::u32::MAX],
),
&POLICIES[0],
),
(
"\u{200e}-\u{200e}340𠜱282𠜱366𠜱920𠜱938𠜱463𠜱463𠜱374𠜱607𠜱431𠜱768𠜱211𠜱455",
BigInt::new(
Sign::Minus,
vec![std::u32::MAX, std::u32::MAX, std::u32::MAX, std::u32::MAX],
),
&POLICIES[1],
),
(
"\u{200e}-\u{200e}34𠜱02𠜱82𠜱36𠜱69𠜱20𠜱93𠜱84𠜱63𠜱46𠜱33𠜱74𠜱60𠜱74𠜱31𠜱76𠜱82𠜱11𠜱455",
BigInt::new(
Sign::Minus,
vec![std::u32::MAX, std::u32::MAX, std::u32::MAX, std::u32::MAX],
),
&POLICIES[2],
),
(
"\u{200e}-\u{200e}340282366920938463463374607431768211455",
BigInt::new(
Sign::Minus,
vec![std::u32::MAX, std::u32::MAX, std::u32::MAX, std::u32::MAX],
),
&POLICIES[3],
),
(
"\u{200e}-\u{200e}340282366920938463463374607431768211455",
BigInt::new(
Sign::Minus,
vec![std::u32::MAX, std::u32::MAX, std::u32::MAX, std::u32::MAX],
),
&POLICIES[4],
),
];
for (expected, input, format) in test_cases {
assert_eq!(expected.to_string(), input.to_formatted_string(*format));
let mut v = Vec::new();
v.write_formatted(input, *format).unwrap();
let s = String::from_utf8(v).unwrap();
assert_eq!(expected.to_string(), s);
let mut s = String::new();
s.write_formatted(input, *format).unwrap();
assert_eq!(expected.to_string(), s);
}
}
#[test]
fn test_num_big_uint() {
let test_cases: &[(&str, BigUint, &CustomFormat)] = &[
("1", BigUint::new(vec![1]), &POLICIES[0]),
("1", BigUint::new(vec![1]), &POLICIES[1]),
("1", BigUint::new(vec![1]), &POLICIES[2]),
("1", BigUint::new(vec![1]), &POLICIES[3]),
("1", BigUint::new(vec![1]), &POLICIES[4]),
(
"340,282,366,920,938,463,463,374,607,431,768,211,455",
BigUint::new(vec![
std::u32::MAX,
std::u32::MAX,
std::u32::MAX,
std::u32::MAX,
]),
&POLICIES[0],
),
(
"340𠜱282𠜱366𠜱920𠜱938𠜱463𠜱463𠜱374𠜱607𠜱431𠜱768𠜱211𠜱455",
BigUint::new(vec![
std::u32::MAX,
std::u32::MAX,
std::u32::MAX,
std::u32::MAX,
]),
&POLICIES[1],
),
(
"34𠜱02𠜱82𠜱36𠜱69𠜱20𠜱93𠜱84𠜱63𠜱46𠜱33𠜱74𠜱60𠜱74𠜱31𠜱76𠜱82𠜱11𠜱455",
BigUint::new(vec![
std::u32::MAX,
std::u32::MAX,
std::u32::MAX,
std::u32::MAX,
]),
&POLICIES[2],
),
(
"340282366920938463463374607431768211455",
BigUint::new(vec![
std::u32::MAX,
std::u32::MAX,
std::u32::MAX,
std::u32::MAX,
]),
&POLICIES[3],
),
(
"340282366920938463463374607431768211455",
BigUint::new(vec![
std::u32::MAX,
std::u32::MAX,
std::u32::MAX,
std::u32::MAX,
]),
&POLICIES[4],
),
];
for (expected, input, format) in test_cases {
assert_eq!(expected.to_string(), input.to_formatted_string(*format));
let mut v = Vec::new();
v.write_formatted(input, *format).unwrap();
let s = String::from_utf8(v).unwrap();
assert_eq!(expected.to_string(), s);
let mut s = String::new();
s.write_formatted(input, *format).unwrap();
assert_eq!(expected.to_string(), s);
}
}