1219 lines
34 KiB
Rust
1219 lines
34 KiB
Rust
mod util;
|
|
|
|
use core::fmt::Debug;
|
|
use core::str::{from_utf8_unchecked, FromStr};
|
|
|
|
#[cfg(feature = "radix")]
|
|
use lexical_util::constants::BUFFER_SIZE;
|
|
#[cfg(feature = "format")]
|
|
use lexical_util::format::NumberFormatBuilder;
|
|
use lexical_util::format::STANDARD;
|
|
use lexical_write_integer::{Options, ToLexical, ToLexicalWithOptions};
|
|
#[cfg(feature = "radix")]
|
|
use util::from_radix;
|
|
|
|
trait Roundtrip: ToLexical + ToLexicalWithOptions + FromStr {
|
|
#[allow(dead_code)]
|
|
fn from_str_radix(src: &str, radix: u32) -> Result<Self, std::num::ParseIntError>;
|
|
}
|
|
|
|
macro_rules! roundtrip_impl {
|
|
($($t:ty)*) => ($(
|
|
impl Roundtrip for $t {
|
|
fn from_str_radix(src: &str, radix: u32) -> Result<Self, std::num::ParseIntError> {
|
|
<$t>::from_str_radix(src, radix)
|
|
}
|
|
}
|
|
)*);
|
|
}
|
|
|
|
roundtrip_impl! { u8 u16 u32 u64 u128 usize i8 i16 i32 i64 i128 isize }
|
|
|
|
#[test]
|
|
#[cfg(feature = "format")]
|
|
fn mandatory_sign_test() {
|
|
let mut buffer = [b'\x00'; 16];
|
|
const OPTIONS: Options = Options::new();
|
|
const FORMAT: u128 = NumberFormatBuilder::new().required_mantissa_sign(true).build_strict();
|
|
assert_eq!(b"+0", 0i8.to_lexical_with_options::<{ FORMAT }>(&mut buffer, &OPTIONS));
|
|
assert_eq!(b"-1", (-1i8).to_lexical_with_options::<{ FORMAT }>(&mut buffer, &OPTIONS));
|
|
assert_eq!(b"+1", 1i8.to_lexical_with_options::<{ FORMAT }>(&mut buffer, &OPTIONS));
|
|
}
|
|
|
|
#[test]
|
|
fn u8_test() {
|
|
let mut buffer = [b'\x00'; 16];
|
|
assert_eq!(b"0", 0u8.to_lexical(&mut buffer));
|
|
assert_eq!(b"1", 1u8.to_lexical(&mut buffer));
|
|
assert_eq!(b"5", 5u8.to_lexical(&mut buffer));
|
|
assert_eq!(b"127", 127u8.to_lexical(&mut buffer));
|
|
assert_eq!(b"128", 128u8.to_lexical(&mut buffer));
|
|
assert_eq!(b"255", 255u8.to_lexical(&mut buffer));
|
|
assert_eq!(b"255", (-1i8 as u8).to_lexical(&mut buffer));
|
|
}
|
|
|
|
#[test]
|
|
fn i8_test() {
|
|
let mut buffer = [b'\x00'; 16];
|
|
assert_eq!(b"0", 0i8.to_lexical(&mut buffer));
|
|
assert_eq!(b"1", 1i8.to_lexical(&mut buffer));
|
|
assert_eq!(b"5", 5i8.to_lexical(&mut buffer));
|
|
assert_eq!(b"127", 127i8.to_lexical(&mut buffer));
|
|
assert_eq!(b"-128", (128u8 as i8).to_lexical(&mut buffer));
|
|
assert_eq!(b"-1", (255u8 as i8).to_lexical(&mut buffer));
|
|
assert_eq!(b"-1", (-1i8).to_lexical(&mut buffer));
|
|
}
|
|
|
|
#[test]
|
|
fn u16_test() {
|
|
let mut buffer = [b'\x00'; 16];
|
|
assert_eq!(b"0", 0u16.to_lexical(&mut buffer));
|
|
assert_eq!(b"1", 1u16.to_lexical(&mut buffer));
|
|
assert_eq!(b"5", 5u16.to_lexical(&mut buffer));
|
|
assert_eq!(b"32767", 32767u16.to_lexical(&mut buffer));
|
|
assert_eq!(b"32768", 32768u16.to_lexical(&mut buffer));
|
|
assert_eq!(b"65535", 65535u16.to_lexical(&mut buffer));
|
|
assert_eq!(b"65535", (-1i16 as u16).to_lexical(&mut buffer));
|
|
}
|
|
|
|
#[test]
|
|
fn i16_test() {
|
|
let mut buffer = [b'\x00'; 16];
|
|
assert_eq!(b"0", 0i16.to_lexical(&mut buffer));
|
|
assert_eq!(b"1", 1i16.to_lexical(&mut buffer));
|
|
assert_eq!(b"5", 5i16.to_lexical(&mut buffer));
|
|
assert_eq!(b"32767", 32767i16.to_lexical(&mut buffer));
|
|
assert_eq!(b"-32768", (32768u16 as i16).to_lexical(&mut buffer));
|
|
assert_eq!(b"-1", (65535u16 as i16).to_lexical(&mut buffer));
|
|
assert_eq!(b"-1", (-1i16).to_lexical(&mut buffer));
|
|
}
|
|
|
|
#[test]
|
|
fn u32_test() {
|
|
let mut buffer = [b'\x00'; 16];
|
|
assert_eq!(b"0", 0u32.to_lexical(&mut buffer));
|
|
assert_eq!(b"1", 1u32.to_lexical(&mut buffer));
|
|
assert_eq!(b"5", 5u32.to_lexical(&mut buffer));
|
|
assert_eq!(b"2147483647", 2147483647u32.to_lexical(&mut buffer));
|
|
assert_eq!(b"2147483648", 2147483648u32.to_lexical(&mut buffer));
|
|
assert_eq!(b"4294967295", 4294967295u32.to_lexical(&mut buffer));
|
|
assert_eq!(b"4294967295", (-1i32 as u32).to_lexical(&mut buffer));
|
|
}
|
|
|
|
#[test]
|
|
fn i32_test() {
|
|
let mut buffer = [b'\x00'; 16];
|
|
assert_eq!(b"0", 0i32.to_lexical(&mut buffer));
|
|
assert_eq!(b"1", 1i32.to_lexical(&mut buffer));
|
|
assert_eq!(b"5", 5i32.to_lexical(&mut buffer));
|
|
assert_eq!(b"2147483647", 2147483647i32.to_lexical(&mut buffer));
|
|
assert_eq!(b"-2147483648", (2147483648u32 as i32).to_lexical(&mut buffer));
|
|
assert_eq!(b"-1", (4294967295u32 as i32).to_lexical(&mut buffer));
|
|
assert_eq!(b"-1", (-1i32).to_lexical(&mut buffer));
|
|
}
|
|
|
|
#[test]
|
|
fn u64_test() {
|
|
let mut buffer = [b'\x00'; 32];
|
|
assert_eq!(b"0", 0u64.to_lexical(&mut buffer));
|
|
assert_eq!(b"1", 1u64.to_lexical(&mut buffer));
|
|
assert_eq!(b"5", 5u64.to_lexical(&mut buffer));
|
|
assert_eq!(b"9223372036854775807", 9223372036854775807u64.to_lexical(&mut buffer));
|
|
assert_eq!(b"9223372036854775808", 9223372036854775808u64.to_lexical(&mut buffer));
|
|
assert_eq!(b"18446744073709551615", 18446744073709551615u64.to_lexical(&mut buffer));
|
|
assert_eq!(b"18446744073709551615", (-1i64 as u64).to_lexical(&mut buffer));
|
|
}
|
|
|
|
#[test]
|
|
fn i64_test() {
|
|
let mut buffer = [b'\x00'; 32];
|
|
assert_eq!(b"0", 0i64.to_lexical(&mut buffer));
|
|
assert_eq!(b"1", 1i64.to_lexical(&mut buffer));
|
|
assert_eq!(b"5", 5i64.to_lexical(&mut buffer));
|
|
assert_eq!(b"9223372036854775807", 9223372036854775807i64.to_lexical(&mut buffer));
|
|
assert_eq!(b"-9223372036854775808", (9223372036854775808u64 as i64).to_lexical(&mut buffer));
|
|
assert_eq!(b"-1", (18446744073709551615u64 as i64).to_lexical(&mut buffer));
|
|
assert_eq!(b"-1", (-1i64).to_lexical(&mut buffer));
|
|
}
|
|
|
|
#[test]
|
|
fn u128_test() {
|
|
let mut buffer = [b'\x00'; 48];
|
|
assert_eq!(b"0", 0u128.to_lexical(&mut buffer));
|
|
assert_eq!(b"1", 1u128.to_lexical(&mut buffer));
|
|
assert_eq!(b"5", 5u128.to_lexical(&mut buffer));
|
|
assert_eq!(
|
|
&b"170141183460469231731687303715884105727"[..],
|
|
170141183460469231731687303715884105727u128.to_lexical(&mut buffer)
|
|
);
|
|
assert_eq!(
|
|
&b"170141183460469231731687303715884105728"[..],
|
|
170141183460469231731687303715884105728u128.to_lexical(&mut buffer)
|
|
);
|
|
assert_eq!(
|
|
&b"340282366920938463463374607431768211455"[..],
|
|
340282366920938463463374607431768211455u128.to_lexical(&mut buffer)
|
|
);
|
|
assert_eq!(
|
|
&b"340282366920938463463374607431768211455"[..],
|
|
(-1i128 as u128).to_lexical(&mut buffer)
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn i128_test() {
|
|
let mut buffer = [b'\x00'; 48];
|
|
assert_eq!(b"0", 0i128.to_lexical(&mut buffer));
|
|
assert_eq!(b"1", 1i128.to_lexical(&mut buffer));
|
|
assert_eq!(b"5", 5i128.to_lexical(&mut buffer));
|
|
assert_eq!(
|
|
&b"170141183460469231731687303715884105727"[..],
|
|
170141183460469231731687303715884105727i128.to_lexical(&mut buffer)
|
|
);
|
|
assert_eq!(
|
|
&b"-170141183460469231731687303715884105728"[..],
|
|
(170141183460469231731687303715884105728u128 as i128).to_lexical(&mut buffer)
|
|
);
|
|
assert_eq!(
|
|
b"-1",
|
|
(340282366920938463463374607431768211455u128 as i128).to_lexical(&mut buffer)
|
|
);
|
|
assert_eq!(b"-1", (-1i128).to_lexical(&mut buffer));
|
|
}
|
|
|
|
#[test]
|
|
#[cfg(feature = "radix")]
|
|
fn proptest_failures_radix() {
|
|
const FORMAT: u128 = from_radix(12);
|
|
let mut buffer = [b'\x00'; BUFFER_SIZE];
|
|
const OPTIONS: Options = Options::new();
|
|
assert_eq!(b"A8", 128u8.to_lexical_with_options::<{ FORMAT }>(&mut buffer, &OPTIONS));
|
|
}
|
|
|
|
#[test]
|
|
fn options_test() {
|
|
let mut buffer = [b'\x00'; 48];
|
|
const OPTIONS: Options = Options::new();
|
|
assert_eq!(b"0", 0u8.to_lexical_with_options::<{ STANDARD }>(&mut buffer, &OPTIONS));
|
|
assert_eq!(b"0", 0u16.to_lexical_with_options::<{ STANDARD }>(&mut buffer, &OPTIONS));
|
|
assert_eq!(b"0", 0u32.to_lexical_with_options::<{ STANDARD }>(&mut buffer, &OPTIONS));
|
|
assert_eq!(b"0", 0u64.to_lexical_with_options::<{ STANDARD }>(&mut buffer, &OPTIONS));
|
|
assert_eq!(b"0", 0u128.to_lexical_with_options::<{ STANDARD }>(&mut buffer, &OPTIONS));
|
|
assert_eq!(b"0", 0i8.to_lexical_with_options::<{ STANDARD }>(&mut buffer, &OPTIONS));
|
|
assert_eq!(b"0", 0i16.to_lexical_with_options::<{ STANDARD }>(&mut buffer, &OPTIONS));
|
|
assert_eq!(b"0", 0i32.to_lexical_with_options::<{ STANDARD }>(&mut buffer, &OPTIONS));
|
|
assert_eq!(b"0", 0i64.to_lexical_with_options::<{ STANDARD }>(&mut buffer, &OPTIONS));
|
|
assert_eq!(b"0", 0i128.to_lexical_with_options::<{ STANDARD }>(&mut buffer, &OPTIONS));
|
|
}
|
|
|
|
#[test]
|
|
#[cfg(feature = "radix")]
|
|
fn options_radix_test() {
|
|
const FORMAT: u128 = from_radix(12);
|
|
let mut buffer = [b'\x00'; 128];
|
|
const OPTIONS: Options = Options::new();
|
|
assert_eq!(b"A8", 128u8.to_lexical_with_options::<{ FORMAT }>(&mut buffer, &OPTIONS));
|
|
}
|
|
|
|
fn roundtrip<T>(x: T) -> T
|
|
where
|
|
T: Roundtrip,
|
|
<T as FromStr>::Err: Debug,
|
|
{
|
|
let mut buffer = [b'\x00'; 48];
|
|
let bytes = x.to_lexical(&mut buffer);
|
|
let string = unsafe { from_utf8_unchecked(bytes) };
|
|
string.parse::<T>().unwrap()
|
|
}
|
|
|
|
#[test]
|
|
fn u8_pow2_test() {
|
|
let values: &[u8] =
|
|
&[0, 1, 2, 3, 4, 5, 7, 8, 9, 15, 16, 17, 31, 32, 33, 63, 64, 65, 127, 128, 129, 255];
|
|
for &i in values.iter() {
|
|
assert_eq!(i, roundtrip(i));
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn u8_pow10_test() {
|
|
let values: &[u8] = &[0, 1, 5, 9, 10, 11, 15, 99, 100, 101, 105];
|
|
for &i in values.iter() {
|
|
assert_eq!(i, roundtrip(i));
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn u16_pow2_test() {
|
|
let values: &[u16] = &[
|
|
0, 1, 2, 3, 4, 5, 7, 8, 9, 15, 16, 17, 31, 32, 33, 63, 64, 65, 127, 128, 129, 255, 256,
|
|
257, 511, 512, 513, 1023, 1024, 1025, 2047, 2048, 2049, 4095, 4096, 4097, 8191, 8192, 8193,
|
|
16383, 16384, 16385, 32767, 32768, 32769, 65535,
|
|
];
|
|
for &i in values.iter() {
|
|
assert_eq!(i, roundtrip(i));
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn u16_pow10_test() {
|
|
let values: &[u16] = &[
|
|
0, 1, 5, 9, 10, 11, 15, 99, 100, 101, 105, 999, 1000, 1001, 1005, 9999, 10000, 10001, 10005,
|
|
];
|
|
for &i in values.iter() {
|
|
assert_eq!(i, roundtrip(i));
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn u32_pow2_test() {
|
|
let values: &[u32] = &[
|
|
0, 1, 2, 3, 4, 5, 7, 8, 9, 15, 16, 17, 31, 32, 33, 63, 64, 65, 127, 128, 129, 255, 256,
|
|
257, 511, 512, 513, 1023, 1024, 1025, 2047, 2048, 2049, 4095, 4096, 4097, 8191, 8192, 8193,
|
|
16383, 16384, 16385, 32767, 32768, 32769, 65535, 65536, 65537, 131071, 131072, 131073,
|
|
262143, 262144, 262145, 524287, 524288, 524289, 1048575, 1048576, 1048577, 2097151,
|
|
2097152, 2097153, 4194303, 4194304, 4194305, 8388607, 8388608, 8388609, 16777215, 16777216,
|
|
16777217, 33554431, 33554432, 33554433, 67108863, 67108864, 67108865, 134217727, 134217728,
|
|
134217729, 268435455, 268435456, 268435457, 536870911, 536870912, 536870913, 1073741823,
|
|
1073741824, 1073741825, 2147483647, 2147483648, 2147483649, 4294967295,
|
|
];
|
|
for &i in values.iter() {
|
|
assert_eq!(i, roundtrip(i));
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn u32_pow10_test() {
|
|
let values: &[u32] = &[
|
|
0, 1, 5, 9, 10, 11, 15, 99, 100, 101, 105, 999, 1000, 1001, 1005, 9999, 10000, 10001,
|
|
10005, 99999, 100000, 100001, 100005, 999999, 1000000, 1000001, 1000005, 9999999, 10000000,
|
|
10000001, 10000005, 99999999, 100000000, 100000001, 100000005, 999999999, 1000000000,
|
|
1000000001, 1000000005,
|
|
];
|
|
for &i in values.iter() {
|
|
assert_eq!(i, roundtrip(i));
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn u64_pow2_test() {
|
|
let values: &[u64] = &[
|
|
0,
|
|
1,
|
|
2,
|
|
3,
|
|
4,
|
|
5,
|
|
7,
|
|
8,
|
|
9,
|
|
15,
|
|
16,
|
|
17,
|
|
31,
|
|
32,
|
|
33,
|
|
63,
|
|
64,
|
|
65,
|
|
127,
|
|
128,
|
|
129,
|
|
255,
|
|
256,
|
|
257,
|
|
511,
|
|
512,
|
|
513,
|
|
1023,
|
|
1024,
|
|
1025,
|
|
2047,
|
|
2048,
|
|
2049,
|
|
4095,
|
|
4096,
|
|
4097,
|
|
8191,
|
|
8192,
|
|
8193,
|
|
16383,
|
|
16384,
|
|
16385,
|
|
32767,
|
|
32768,
|
|
32769,
|
|
65535,
|
|
65536,
|
|
65537,
|
|
131071,
|
|
131072,
|
|
131073,
|
|
262143,
|
|
262144,
|
|
262145,
|
|
524287,
|
|
524288,
|
|
524289,
|
|
1048575,
|
|
1048576,
|
|
1048577,
|
|
2097151,
|
|
2097152,
|
|
2097153,
|
|
4194303,
|
|
4194304,
|
|
4194305,
|
|
8388607,
|
|
8388608,
|
|
8388609,
|
|
16777215,
|
|
16777216,
|
|
16777217,
|
|
33554431,
|
|
33554432,
|
|
33554433,
|
|
67108863,
|
|
67108864,
|
|
67108865,
|
|
134217727,
|
|
134217728,
|
|
134217729,
|
|
268435455,
|
|
268435456,
|
|
268435457,
|
|
536870911,
|
|
536870912,
|
|
536870913,
|
|
1073741823,
|
|
1073741824,
|
|
1073741825,
|
|
2147483647,
|
|
2147483648,
|
|
2147483649,
|
|
4294967295,
|
|
4294967296,
|
|
4294967297,
|
|
8589934591,
|
|
8589934592,
|
|
8589934593,
|
|
17179869183,
|
|
17179869184,
|
|
17179869185,
|
|
34359738367,
|
|
34359738368,
|
|
34359738369,
|
|
68719476735,
|
|
68719476736,
|
|
68719476737,
|
|
137438953471,
|
|
137438953472,
|
|
137438953473,
|
|
274877906943,
|
|
274877906944,
|
|
274877906945,
|
|
549755813887,
|
|
549755813888,
|
|
549755813889,
|
|
1099511627775,
|
|
1099511627776,
|
|
1099511627777,
|
|
2199023255551,
|
|
2199023255552,
|
|
2199023255553,
|
|
4398046511103,
|
|
4398046511104,
|
|
4398046511105,
|
|
8796093022207,
|
|
8796093022208,
|
|
8796093022209,
|
|
17592186044415,
|
|
17592186044416,
|
|
17592186044417,
|
|
35184372088831,
|
|
35184372088832,
|
|
35184372088833,
|
|
70368744177663,
|
|
70368744177664,
|
|
70368744177665,
|
|
140737488355327,
|
|
140737488355328,
|
|
140737488355329,
|
|
281474976710655,
|
|
281474976710656,
|
|
281474976710657,
|
|
562949953421311,
|
|
562949953421312,
|
|
562949953421313,
|
|
1125899906842623,
|
|
1125899906842624,
|
|
1125899906842625,
|
|
2251799813685247,
|
|
2251799813685248,
|
|
2251799813685249,
|
|
4503599627370495,
|
|
4503599627370496,
|
|
4503599627370497,
|
|
9007199254740991,
|
|
9007199254740992,
|
|
9007199254740993,
|
|
18014398509481983,
|
|
18014398509481984,
|
|
18014398509481985,
|
|
36028797018963967,
|
|
36028797018963968,
|
|
36028797018963969,
|
|
72057594037927935,
|
|
72057594037927936,
|
|
72057594037927937,
|
|
144115188075855871,
|
|
144115188075855872,
|
|
144115188075855873,
|
|
288230376151711743,
|
|
288230376151711744,
|
|
288230376151711745,
|
|
576460752303423487,
|
|
576460752303423488,
|
|
576460752303423489,
|
|
1152921504606846975,
|
|
1152921504606846976,
|
|
1152921504606846977,
|
|
2305843009213693951,
|
|
2305843009213693952,
|
|
2305843009213693953,
|
|
4611686018427387903,
|
|
4611686018427387904,
|
|
4611686018427387905,
|
|
9223372036854775807,
|
|
9223372036854775808,
|
|
9223372036854775809,
|
|
18446744073709551615,
|
|
];
|
|
for &i in values.iter() {
|
|
assert_eq!(i, roundtrip(i));
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn u64_pow10_test() {
|
|
let values: &[u64] = &[
|
|
0,
|
|
1,
|
|
5,
|
|
9,
|
|
10,
|
|
11,
|
|
15,
|
|
99,
|
|
100,
|
|
101,
|
|
105,
|
|
999,
|
|
1000,
|
|
1001,
|
|
1005,
|
|
9999,
|
|
10000,
|
|
10001,
|
|
10005,
|
|
99999,
|
|
100000,
|
|
100001,
|
|
100005,
|
|
999999,
|
|
1000000,
|
|
1000001,
|
|
1000005,
|
|
9999999,
|
|
10000000,
|
|
10000001,
|
|
10000005,
|
|
99999999,
|
|
100000000,
|
|
100000001,
|
|
100000005,
|
|
999999999,
|
|
1000000000,
|
|
1000000001,
|
|
1000000005,
|
|
9999999999,
|
|
10000000000,
|
|
10000000001,
|
|
10000000005,
|
|
99999999999,
|
|
100000000000,
|
|
100000000001,
|
|
100000000005,
|
|
999999999999,
|
|
1000000000000,
|
|
1000000000001,
|
|
1000000000005,
|
|
9999999999999,
|
|
10000000000000,
|
|
10000000000001,
|
|
10000000000005,
|
|
99999999999999,
|
|
100000000000000,
|
|
100000000000001,
|
|
100000000000005,
|
|
999999999999999,
|
|
1000000000000000,
|
|
1000000000000001,
|
|
1000000000000005,
|
|
9999999999999999,
|
|
10000000000000000,
|
|
10000000000000001,
|
|
10000000000000005,
|
|
99999999999999999,
|
|
100000000000000000,
|
|
100000000000000001,
|
|
100000000000000005,
|
|
999999999999999999,
|
|
1000000000000000000,
|
|
1000000000000000001,
|
|
1000000000000000005,
|
|
];
|
|
for &i in values.iter() {
|
|
assert_eq!(i, roundtrip(i));
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn u128_pow2_test() {
|
|
let values: &[u128] = &[
|
|
0,
|
|
1,
|
|
2,
|
|
3,
|
|
4,
|
|
5,
|
|
7,
|
|
8,
|
|
9,
|
|
15,
|
|
16,
|
|
17,
|
|
31,
|
|
32,
|
|
33,
|
|
63,
|
|
64,
|
|
65,
|
|
127,
|
|
128,
|
|
129,
|
|
255,
|
|
256,
|
|
257,
|
|
511,
|
|
512,
|
|
513,
|
|
1023,
|
|
1024,
|
|
1025,
|
|
2047,
|
|
2048,
|
|
2049,
|
|
4095,
|
|
4096,
|
|
4097,
|
|
8191,
|
|
8192,
|
|
8193,
|
|
16383,
|
|
16384,
|
|
16385,
|
|
32767,
|
|
32768,
|
|
32769,
|
|
65535,
|
|
65536,
|
|
65537,
|
|
131071,
|
|
131072,
|
|
131073,
|
|
262143,
|
|
262144,
|
|
262145,
|
|
524287,
|
|
524288,
|
|
524289,
|
|
1048575,
|
|
1048576,
|
|
1048577,
|
|
2097151,
|
|
2097152,
|
|
2097153,
|
|
4194303,
|
|
4194304,
|
|
4194305,
|
|
8388607,
|
|
8388608,
|
|
8388609,
|
|
16777215,
|
|
16777216,
|
|
16777217,
|
|
33554431,
|
|
33554432,
|
|
33554433,
|
|
67108863,
|
|
67108864,
|
|
67108865,
|
|
134217727,
|
|
134217728,
|
|
134217729,
|
|
268435455,
|
|
268435456,
|
|
268435457,
|
|
536870911,
|
|
536870912,
|
|
536870913,
|
|
1073741823,
|
|
1073741824,
|
|
1073741825,
|
|
2147483647,
|
|
2147483648,
|
|
2147483649,
|
|
4294967295,
|
|
4294967296,
|
|
4294967297,
|
|
8589934591,
|
|
8589934592,
|
|
8589934593,
|
|
17179869183,
|
|
17179869184,
|
|
17179869185,
|
|
34359738367,
|
|
34359738368,
|
|
34359738369,
|
|
68719476735,
|
|
68719476736,
|
|
68719476737,
|
|
137438953471,
|
|
137438953472,
|
|
137438953473,
|
|
274877906943,
|
|
274877906944,
|
|
274877906945,
|
|
549755813887,
|
|
549755813888,
|
|
549755813889,
|
|
1099511627775,
|
|
1099511627776,
|
|
1099511627777,
|
|
2199023255551,
|
|
2199023255552,
|
|
2199023255553,
|
|
4398046511103,
|
|
4398046511104,
|
|
4398046511105,
|
|
8796093022207,
|
|
8796093022208,
|
|
8796093022209,
|
|
17592186044415,
|
|
17592186044416,
|
|
17592186044417,
|
|
35184372088831,
|
|
35184372088832,
|
|
35184372088833,
|
|
70368744177663,
|
|
70368744177664,
|
|
70368744177665,
|
|
140737488355327,
|
|
140737488355328,
|
|
140737488355329,
|
|
281474976710655,
|
|
281474976710656,
|
|
281474976710657,
|
|
562949953421311,
|
|
562949953421312,
|
|
562949953421313,
|
|
1125899906842623,
|
|
1125899906842624,
|
|
1125899906842625,
|
|
2251799813685247,
|
|
2251799813685248,
|
|
2251799813685249,
|
|
4503599627370495,
|
|
4503599627370496,
|
|
4503599627370497,
|
|
9007199254740991,
|
|
9007199254740992,
|
|
9007199254740993,
|
|
18014398509481983,
|
|
18014398509481984,
|
|
18014398509481985,
|
|
36028797018963967,
|
|
36028797018963968,
|
|
36028797018963969,
|
|
72057594037927935,
|
|
72057594037927936,
|
|
72057594037927937,
|
|
144115188075855871,
|
|
144115188075855872,
|
|
144115188075855873,
|
|
288230376151711743,
|
|
288230376151711744,
|
|
288230376151711745,
|
|
576460752303423487,
|
|
576460752303423488,
|
|
576460752303423489,
|
|
1152921504606846975,
|
|
1152921504606846976,
|
|
1152921504606846977,
|
|
2305843009213693951,
|
|
2305843009213693952,
|
|
2305843009213693953,
|
|
4611686018427387903,
|
|
4611686018427387904,
|
|
4611686018427387905,
|
|
9223372036854775807,
|
|
9223372036854775808,
|
|
9223372036854775809,
|
|
18446744073709551615,
|
|
18446744073709551616,
|
|
18446744073709551617,
|
|
36893488147419103231,
|
|
36893488147419103232,
|
|
36893488147419103233,
|
|
73786976294838206463,
|
|
73786976294838206464,
|
|
73786976294838206465,
|
|
147573952589676412927,
|
|
147573952589676412928,
|
|
147573952589676412929,
|
|
295147905179352825855,
|
|
295147905179352825856,
|
|
295147905179352825857,
|
|
590295810358705651711,
|
|
590295810358705651712,
|
|
590295810358705651713,
|
|
1180591620717411303423,
|
|
1180591620717411303424,
|
|
1180591620717411303425,
|
|
2361183241434822606847,
|
|
2361183241434822606848,
|
|
2361183241434822606849,
|
|
4722366482869645213695,
|
|
4722366482869645213696,
|
|
4722366482869645213697,
|
|
9444732965739290427391,
|
|
9444732965739290427392,
|
|
9444732965739290427393,
|
|
18889465931478580854783,
|
|
18889465931478580854784,
|
|
18889465931478580854785,
|
|
37778931862957161709567,
|
|
37778931862957161709568,
|
|
37778931862957161709569,
|
|
75557863725914323419135,
|
|
75557863725914323419136,
|
|
75557863725914323419137,
|
|
151115727451828646838271,
|
|
151115727451828646838272,
|
|
151115727451828646838273,
|
|
302231454903657293676543,
|
|
302231454903657293676544,
|
|
302231454903657293676545,
|
|
604462909807314587353087,
|
|
604462909807314587353088,
|
|
604462909807314587353089,
|
|
1208925819614629174706175,
|
|
1208925819614629174706176,
|
|
1208925819614629174706177,
|
|
2417851639229258349412351,
|
|
2417851639229258349412352,
|
|
2417851639229258349412353,
|
|
4835703278458516698824703,
|
|
4835703278458516698824704,
|
|
4835703278458516698824705,
|
|
9671406556917033397649407,
|
|
9671406556917033397649408,
|
|
9671406556917033397649409,
|
|
19342813113834066795298815,
|
|
19342813113834066795298816,
|
|
19342813113834066795298817,
|
|
38685626227668133590597631,
|
|
38685626227668133590597632,
|
|
38685626227668133590597633,
|
|
77371252455336267181195263,
|
|
77371252455336267181195264,
|
|
77371252455336267181195265,
|
|
154742504910672534362390527,
|
|
154742504910672534362390528,
|
|
154742504910672534362390529,
|
|
309485009821345068724781055,
|
|
309485009821345068724781056,
|
|
309485009821345068724781057,
|
|
618970019642690137449562111,
|
|
618970019642690137449562112,
|
|
618970019642690137449562113,
|
|
1237940039285380274899124223,
|
|
1237940039285380274899124224,
|
|
1237940039285380274899124225,
|
|
2475880078570760549798248447,
|
|
2475880078570760549798248448,
|
|
2475880078570760549798248449,
|
|
4951760157141521099596496895,
|
|
4951760157141521099596496896,
|
|
4951760157141521099596496897,
|
|
9903520314283042199192993791,
|
|
9903520314283042199192993792,
|
|
9903520314283042199192993793,
|
|
19807040628566084398385987583,
|
|
19807040628566084398385987584,
|
|
19807040628566084398385987585,
|
|
39614081257132168796771975167,
|
|
39614081257132168796771975168,
|
|
39614081257132168796771975169,
|
|
79228162514264337593543950335,
|
|
79228162514264337593543950336,
|
|
79228162514264337593543950337,
|
|
158456325028528675187087900671,
|
|
158456325028528675187087900672,
|
|
158456325028528675187087900673,
|
|
316912650057057350374175801343,
|
|
316912650057057350374175801344,
|
|
316912650057057350374175801345,
|
|
633825300114114700748351602687,
|
|
633825300114114700748351602688,
|
|
633825300114114700748351602689,
|
|
1267650600228229401496703205375,
|
|
1267650600228229401496703205376,
|
|
1267650600228229401496703205377,
|
|
2535301200456458802993406410751,
|
|
2535301200456458802993406410752,
|
|
2535301200456458802993406410753,
|
|
5070602400912917605986812821503,
|
|
5070602400912917605986812821504,
|
|
5070602400912917605986812821505,
|
|
10141204801825835211973625643007,
|
|
10141204801825835211973625643008,
|
|
10141204801825835211973625643009,
|
|
20282409603651670423947251286015,
|
|
20282409603651670423947251286016,
|
|
20282409603651670423947251286017,
|
|
40564819207303340847894502572031,
|
|
40564819207303340847894502572032,
|
|
40564819207303340847894502572033,
|
|
81129638414606681695789005144063,
|
|
81129638414606681695789005144064,
|
|
81129638414606681695789005144065,
|
|
162259276829213363391578010288127,
|
|
162259276829213363391578010288128,
|
|
162259276829213363391578010288129,
|
|
324518553658426726783156020576255,
|
|
324518553658426726783156020576256,
|
|
324518553658426726783156020576257,
|
|
649037107316853453566312041152511,
|
|
649037107316853453566312041152512,
|
|
649037107316853453566312041152513,
|
|
1298074214633706907132624082305023,
|
|
1298074214633706907132624082305024,
|
|
1298074214633706907132624082305025,
|
|
2596148429267413814265248164610047,
|
|
2596148429267413814265248164610048,
|
|
2596148429267413814265248164610049,
|
|
5192296858534827628530496329220095,
|
|
5192296858534827628530496329220096,
|
|
5192296858534827628530496329220097,
|
|
10384593717069655257060992658440191,
|
|
10384593717069655257060992658440192,
|
|
10384593717069655257060992658440193,
|
|
20769187434139310514121985316880383,
|
|
20769187434139310514121985316880384,
|
|
20769187434139310514121985316880385,
|
|
41538374868278621028243970633760767,
|
|
41538374868278621028243970633760768,
|
|
41538374868278621028243970633760769,
|
|
83076749736557242056487941267521535,
|
|
83076749736557242056487941267521536,
|
|
83076749736557242056487941267521537,
|
|
166153499473114484112975882535043071,
|
|
166153499473114484112975882535043072,
|
|
166153499473114484112975882535043073,
|
|
332306998946228968225951765070086143,
|
|
332306998946228968225951765070086144,
|
|
332306998946228968225951765070086145,
|
|
664613997892457936451903530140172287,
|
|
664613997892457936451903530140172288,
|
|
664613997892457936451903530140172289,
|
|
1329227995784915872903807060280344575,
|
|
1329227995784915872903807060280344576,
|
|
1329227995784915872903807060280344577,
|
|
2658455991569831745807614120560689151,
|
|
2658455991569831745807614120560689152,
|
|
2658455991569831745807614120560689153,
|
|
5316911983139663491615228241121378303,
|
|
5316911983139663491615228241121378304,
|
|
5316911983139663491615228241121378305,
|
|
10633823966279326983230456482242756607,
|
|
10633823966279326983230456482242756608,
|
|
10633823966279326983230456482242756609,
|
|
21267647932558653966460912964485513215,
|
|
21267647932558653966460912964485513216,
|
|
21267647932558653966460912964485513217,
|
|
42535295865117307932921825928971026431,
|
|
42535295865117307932921825928971026432,
|
|
42535295865117307932921825928971026433,
|
|
85070591730234615865843651857942052863,
|
|
85070591730234615865843651857942052864,
|
|
85070591730234615865843651857942052865,
|
|
170141183460469231731687303715884105727,
|
|
170141183460469231731687303715884105728,
|
|
170141183460469231731687303715884105729,
|
|
340282366920938463463374607431768211455,
|
|
];
|
|
for &i in values.iter() {
|
|
assert_eq!(i, roundtrip(i));
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn u128_pow10_test() {
|
|
let values: &[u128] = &[
|
|
0,
|
|
1,
|
|
5,
|
|
9,
|
|
10,
|
|
11,
|
|
15,
|
|
99,
|
|
100,
|
|
101,
|
|
105,
|
|
999,
|
|
1000,
|
|
1001,
|
|
1005,
|
|
9999,
|
|
10000,
|
|
10001,
|
|
10005,
|
|
99999,
|
|
100000,
|
|
100001,
|
|
100005,
|
|
999999,
|
|
1000000,
|
|
1000001,
|
|
1000005,
|
|
9999999,
|
|
10000000,
|
|
10000001,
|
|
10000005,
|
|
99999999,
|
|
100000000,
|
|
100000001,
|
|
100000005,
|
|
999999999,
|
|
1000000000,
|
|
1000000001,
|
|
1000000005,
|
|
9999999999,
|
|
10000000000,
|
|
10000000001,
|
|
10000000005,
|
|
99999999999,
|
|
100000000000,
|
|
100000000001,
|
|
100000000005,
|
|
999999999999,
|
|
1000000000000,
|
|
1000000000001,
|
|
1000000000005,
|
|
9999999999999,
|
|
10000000000000,
|
|
10000000000001,
|
|
10000000000005,
|
|
99999999999999,
|
|
100000000000000,
|
|
100000000000001,
|
|
100000000000005,
|
|
999999999999999,
|
|
1000000000000000,
|
|
1000000000000001,
|
|
1000000000000005,
|
|
9999999999999999,
|
|
10000000000000000,
|
|
10000000000000001,
|
|
10000000000000005,
|
|
99999999999999999,
|
|
100000000000000000,
|
|
100000000000000001,
|
|
100000000000000005,
|
|
999999999999999999,
|
|
1000000000000000000,
|
|
1000000000000000001,
|
|
1000000000000000005,
|
|
9999999999999999999,
|
|
10000000000000000000,
|
|
10000000000000000001,
|
|
10000000000000000005,
|
|
99999999999999999999,
|
|
100000000000000000000,
|
|
100000000000000000001,
|
|
100000000000000000005,
|
|
999999999999999999999,
|
|
1000000000000000000000,
|
|
1000000000000000000001,
|
|
1000000000000000000005,
|
|
9999999999999999999999,
|
|
10000000000000000000000,
|
|
10000000000000000000001,
|
|
10000000000000000000005,
|
|
99999999999999999999999,
|
|
100000000000000000000000,
|
|
100000000000000000000001,
|
|
100000000000000000000005,
|
|
999999999999999999999999,
|
|
1000000000000000000000000,
|
|
1000000000000000000000001,
|
|
1000000000000000000000005,
|
|
9999999999999999999999999,
|
|
10000000000000000000000000,
|
|
10000000000000000000000001,
|
|
10000000000000000000000005,
|
|
99999999999999999999999999,
|
|
100000000000000000000000000,
|
|
100000000000000000000000001,
|
|
100000000000000000000000005,
|
|
999999999999999999999999999,
|
|
1000000000000000000000000000,
|
|
1000000000000000000000000001,
|
|
1000000000000000000000000005,
|
|
9999999999999999999999999999,
|
|
10000000000000000000000000000,
|
|
10000000000000000000000000001,
|
|
10000000000000000000000000005,
|
|
99999999999999999999999999999,
|
|
100000000000000000000000000000,
|
|
100000000000000000000000000001,
|
|
100000000000000000000000000005,
|
|
999999999999999999999999999999,
|
|
1000000000000000000000000000000,
|
|
1000000000000000000000000000001,
|
|
1000000000000000000000000000005,
|
|
9999999999999999999999999999999,
|
|
10000000000000000000000000000000,
|
|
10000000000000000000000000000001,
|
|
10000000000000000000000000000005,
|
|
99999999999999999999999999999999,
|
|
100000000000000000000000000000000,
|
|
100000000000000000000000000000001,
|
|
100000000000000000000000000000005,
|
|
999999999999999999999999999999999,
|
|
1000000000000000000000000000000000,
|
|
1000000000000000000000000000000001,
|
|
1000000000000000000000000000000005,
|
|
9999999999999999999999999999999999,
|
|
10000000000000000000000000000000000,
|
|
10000000000000000000000000000000001,
|
|
10000000000000000000000000000000005,
|
|
99999999999999999999999999999999999,
|
|
100000000000000000000000000000000000,
|
|
100000000000000000000000000000000001,
|
|
100000000000000000000000000000000005,
|
|
999999999999999999999999999999999999,
|
|
1000000000000000000000000000000000000,
|
|
1000000000000000000000000000000000001,
|
|
1000000000000000000000000000000000005,
|
|
9999999999999999999999999999999999999,
|
|
10000000000000000000000000000000000000,
|
|
10000000000000000000000000000000000001,
|
|
10000000000000000000000000000000000005,
|
|
99999999999999999999999999999999999999,
|
|
100000000000000000000000000000000000000,
|
|
100000000000000000000000000000000000001,
|
|
100000000000000000000000000000000000005,
|
|
];
|
|
for &i in values.iter() {
|
|
assert_eq!(i, roundtrip(i));
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
#[should_panic]
|
|
fn i8_buffer_test() {
|
|
let mut buffer = [b'\x00'; 3];
|
|
(-123i8).to_lexical(&mut buffer);
|
|
}
|
|
|
|
#[test]
|
|
#[should_panic]
|
|
fn i16_buffer_test() {
|
|
let mut buffer = [b'\x00'; 4];
|
|
(-1234i16).to_lexical(&mut buffer);
|
|
}
|
|
|
|
#[test]
|
|
#[should_panic]
|
|
fn i32_buffer_test() {
|
|
let mut buffer = [b'\x00'; 6];
|
|
(-123456i32).to_lexical(&mut buffer);
|
|
}
|
|
|
|
#[test]
|
|
#[should_panic]
|
|
fn i64_buffer_test() {
|
|
let mut buffer = [b'\x00'; 7];
|
|
(-1234567i64).to_lexical(&mut buffer);
|
|
}
|
|
|
|
#[test]
|
|
#[should_panic]
|
|
fn i128_buffer_test() {
|
|
let mut buffer = [b'\x00'; 9];
|
|
(-123456789i128).to_lexical(&mut buffer);
|
|
}
|
|
|
|
#[test]
|
|
#[should_panic]
|
|
fn isize_buffer_test() {
|
|
let mut buffer = [b'\x00'; 6];
|
|
(-123456isize).to_lexical(&mut buffer);
|
|
}
|
|
|
|
#[test]
|
|
#[should_panic]
|
|
fn u8_buffer_test() {
|
|
let mut buffer = [b'\x00'; 2];
|
|
125u8.to_lexical(&mut buffer);
|
|
}
|
|
|
|
#[test]
|
|
#[should_panic]
|
|
fn u16_buffer_test() {
|
|
let mut buffer = [b'\x00'; 1];
|
|
12i16.to_lexical(&mut buffer);
|
|
}
|
|
|
|
#[test]
|
|
#[should_panic]
|
|
fn u32_buffer_test() {
|
|
let mut buffer = [b'\x00'; 5];
|
|
123456i32.to_lexical(&mut buffer);
|
|
}
|
|
|
|
#[test]
|
|
#[should_panic]
|
|
fn u64_buffer_test() {
|
|
let mut buffer = [b'\x00'; 5];
|
|
123456i64.to_lexical(&mut buffer);
|
|
}
|
|
|
|
#[test]
|
|
#[should_panic]
|
|
fn u128_buffer_test() {
|
|
let mut buffer = [b'\x00'; 8];
|
|
123456789i128.to_lexical(&mut buffer);
|
|
}
|
|
|
|
#[test]
|
|
#[should_panic]
|
|
fn usize_buffer_test() {
|
|
let mut buffer = [b'\x00'; 5];
|
|
123456usize.to_lexical(&mut buffer);
|
|
}
|