diff options
| author | Trevor Spiteri <tspiteri@ieee.org> | 2021-07-07 13:13:58 +0200 |
|---|---|---|
| committer | Trevor Spiteri <tspiteri@ieee.org> | 2021-07-07 14:07:32 +0200 |
| commit | b0f98c60a6ce6d71e244b355e1a602d6994fa8ed (patch) | |
| tree | 1a99a717c1c60613a438994c156c03722327e3be | |
| parent | c5e344f7747dbd7e7d4b209e3c480deb5979a56f (diff) | |
| download | rust-b0f98c60a6ce6d71e244b355e1a602d6994fa8ed.tar.gz rust-b0f98c60a6ce6d71e244b355e1a602d6994fa8ed.zip | |
test integer log10 values close to all powers of 10
| -rw-r--r-- | library/core/tests/num/int_log.rs | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/library/core/tests/num/int_log.rs b/library/core/tests/num/int_log.rs index 99a9b17ab11..51122c11ce1 100644 --- a/library/core/tests/num/int_log.rs +++ b/library/core/tests/num/int_log.rs @@ -97,3 +97,57 @@ fn checked_log10() { assert_eq!(i.checked_log10(), Some((i as f32).log10() as u16)); } } + +macro_rules! log10_loop { + ($T:ty, $log10_max:expr) => { + assert_eq!(<$T>::MAX.log10(), $log10_max); + for i in 0..=$log10_max { + let p = (10 as $T).pow(i as u32); + if p >= 10 { + assert_eq!((p - 9).log10(), i - 1); + assert_eq!((p - 1).log10(), i - 1); + } + assert_eq!(p.log10(), i); + assert_eq!((p + 1).log10(), i); + if p >= 10 { + assert_eq!((p + 9).log10(), i); + } + + // also check `x.log(10)` + if p >= 10 { + assert_eq!((p - 9).log(10), i - 1); + assert_eq!((p - 1).log(10), i - 1); + } + assert_eq!(p.log(10), i); + assert_eq!((p + 1).log(10), i); + if p >= 10 { + assert_eq!((p + 9).log(10), i); + } + } + }; +} + +#[test] +fn log10_u8() { + log10_loop! { u8, 2 } +} + +#[test] +fn log10_u16() { + log10_loop! { u16, 4 } +} + +#[test] +fn log10_u32() { + log10_loop! { u32, 9 } +} + +#[test] +fn log10_u64() { + log10_loop! { u64, 19 } +} + +#[test] +fn log10_u128() { + log10_loop! { u128, 38 } +} |
