Enable some ilog2 tests as well

This commit is contained in:
Ben Kimock 2024-08-26 23:00:21 -04:00
parent ee05de8e5e
commit 83de14c4ff

View File

@ -1,7 +1,4 @@
//! This tests the `Integer::{ilog,log2,log10}` methods. These tests are in a //! Tests for the `Integer::{ilog,log2,log10}` methods.
//! separate file because there's both a large number of them, and not all tests
//! can be run on Android. This is because in Android `ilog2` uses an imprecise
//! approximation:https://github.com/rust-lang/rust/blob/4825e12fc9c79954aa0fe18f5521efa6c19c7539/src/libstd/sys/unix/android.rs#L27-L53
#[test] #[test]
fn checked_ilog() { fn checked_ilog() {
@ -48,6 +45,10 @@ fn checked_ilog2() {
assert_eq!(0i8.checked_ilog2(), None); assert_eq!(0i8.checked_ilog2(), None);
assert_eq!(0i16.checked_ilog2(), None); assert_eq!(0i16.checked_ilog2(), None);
assert_eq!(8192u16.checked_ilog2(), Some((8192f32).log2() as u32));
assert_eq!(32768u16.checked_ilog2(), Some((32768f32).log2() as u32));
assert_eq!(8192i16.checked_ilog2(), Some((8192f32).log2() as u32));
for i in 1..=u8::MAX { for i in 1..=u8::MAX {
assert_eq!(i.checked_ilog2(), Some((i as f32).log2() as u32), "checking {i}"); assert_eq!(i.checked_ilog2(), Some((i as f32).log2() as u32), "checking {i}");
} }
@ -77,15 +78,6 @@ fn checked_ilog2() {
} }
} }
// Validate cases that fail on Android's imprecise float ilog2 implementation.
#[test]
#[cfg(not(target_os = "android"))]
fn checked_ilog2_not_android() {
assert_eq!(8192u16.checked_ilog2(), Some((8192f32).log2() as u32));
assert_eq!(32768u16.checked_ilog2(), Some((32768f32).log2() as u32));
assert_eq!(8192i16.checked_ilog2(), Some((8192f32).log2() as u32));
}
#[test] #[test]
fn checked_ilog10() { fn checked_ilog10() {
assert_eq!(0u8.checked_ilog10(), None); assert_eq!(0u8.checked_ilog10(), None);