Skip to content

Commit b0f98c6

Browse files
committed
test integer log10 values close to all powers of 10
1 parent c5e344f commit b0f98c6

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed

library/core/tests/num/int_log.rs

+54
Original file line numberDiff line numberDiff line change
@@ -97,3 +97,57 @@ fn checked_log10() {
9797
assert_eq!(i.checked_log10(), Some((i as f32).log10() as u16));
9898
}
9999
}
100+
101+
macro_rules! log10_loop {
102+
($T:ty, $log10_max:expr) => {
103+
assert_eq!(<$T>::MAX.log10(), $log10_max);
104+
for i in 0..=$log10_max {
105+
let p = (10 as $T).pow(i as u32);
106+
if p >= 10 {
107+
assert_eq!((p - 9).log10(), i - 1);
108+
assert_eq!((p - 1).log10(), i - 1);
109+
}
110+
assert_eq!(p.log10(), i);
111+
assert_eq!((p + 1).log10(), i);
112+
if p >= 10 {
113+
assert_eq!((p + 9).log10(), i);
114+
}
115+
116+
// also check `x.log(10)`
117+
if p >= 10 {
118+
assert_eq!((p - 9).log(10), i - 1);
119+
assert_eq!((p - 1).log(10), i - 1);
120+
}
121+
assert_eq!(p.log(10), i);
122+
assert_eq!((p + 1).log(10), i);
123+
if p >= 10 {
124+
assert_eq!((p + 9).log(10), i);
125+
}
126+
}
127+
};
128+
}
129+
130+
#[test]
131+
fn log10_u8() {
132+
log10_loop! { u8, 2 }
133+
}
134+
135+
#[test]
136+
fn log10_u16() {
137+
log10_loop! { u16, 4 }
138+
}
139+
140+
#[test]
141+
fn log10_u32() {
142+
log10_loop! { u32, 9 }
143+
}
144+
145+
#[test]
146+
fn log10_u64() {
147+
log10_loop! { u64, 19 }
148+
}
149+
150+
#[test]
151+
fn log10_u128() {
152+
log10_loop! { u128, 38 }
153+
}

0 commit comments

Comments
 (0)