154 lines
5.0 KiB
Rust
154 lines
5.0 KiB
Rust
#![cfg(not(feature = "compact"))]
|
|
|
|
mod util;
|
|
|
|
use lexical_write_integer::digit_count::{self, DigitCount};
|
|
|
|
#[test]
|
|
fn fast_log2_test() {
|
|
// Check the first, even if illogical case works.
|
|
assert_eq!(digit_count::fast_log2(0u32), 0);
|
|
assert_eq!(digit_count::fast_log2(1u32), 0);
|
|
assert_eq!(digit_count::fast_log2(2u32), 1);
|
|
assert_eq!(digit_count::fast_log2(3u32), 1);
|
|
|
|
assert_eq!(digit_count::fast_log2((1u32 << 16) - 1), 15);
|
|
assert_eq!(digit_count::fast_log2(1u32 << 16), 16);
|
|
assert_eq!(digit_count::fast_log2((1u32 << 16) + 1), 16);
|
|
|
|
assert_eq!(digit_count::fast_log2(u32::MAX), 31);
|
|
}
|
|
|
|
#[test]
|
|
fn base10_count_test() {
|
|
assert_eq!(1, 0u32.digit_count(10));
|
|
assert_eq!(1, 9u32.digit_count(10));
|
|
assert_eq!(2, 10u32.digit_count(10));
|
|
assert_eq!(2, 11u32.digit_count(10));
|
|
assert_eq!(2, 99u32.digit_count(10));
|
|
assert_eq!(3, 100u32.digit_count(10));
|
|
assert_eq!(3, 101u32.digit_count(10));
|
|
}
|
|
|
|
#[test]
|
|
fn base2_count_test() {
|
|
assert_eq!(1, 0u32.digit_count(2));
|
|
assert_eq!(1, 1u32.digit_count(2));
|
|
assert_eq!(2, 2u32.digit_count(2));
|
|
assert_eq!(2, 3u32.digit_count(2));
|
|
assert_eq!(3, 4u32.digit_count(2));
|
|
|
|
if cfg!(feature = "power-of-two") {
|
|
for i in 1usize..=127 {
|
|
let value = 2u128.pow(i as u32);
|
|
assert_eq!(i + 1, value.digit_count(2));
|
|
assert_eq!(i + 1, (value + 1).digit_count(2));
|
|
assert_eq!(i, (value - 1).digit_count(2));
|
|
}
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn base4_count_test() {
|
|
assert_eq!(1, 0u32.digit_count(4));
|
|
assert_eq!(1, 1u32.digit_count(4));
|
|
assert_eq!(1, 3u32.digit_count(4));
|
|
assert_eq!(2, 4u32.digit_count(4));
|
|
assert_eq!(2, 5u32.digit_count(4));
|
|
assert_eq!(2, 15u32.digit_count(4));
|
|
assert_eq!(3, 16u32.digit_count(4));
|
|
assert_eq!(3, 17u32.digit_count(4));
|
|
|
|
if cfg!(feature = "power-of-two") {
|
|
for i in 1usize..=63 {
|
|
let value = 4u128.pow(i as u32);
|
|
assert_eq!(i + 1, value.digit_count(4));
|
|
assert_eq!(i + 1, (value + 1).digit_count(4));
|
|
assert_eq!(i, (value - 1).digit_count(4));
|
|
|
|
let halfway = value + 2u128.pow(i as u32);
|
|
assert_eq!(i + 1, halfway.digit_count(4));
|
|
assert_eq!(i + 1, (halfway + 1).digit_count(4));
|
|
assert_eq!(i + 1, (halfway - 1).digit_count(4));
|
|
}
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn base8_count_test() {
|
|
assert_eq!(1, 0u32.digit_count(8));
|
|
assert_eq!(1, 1u32.digit_count(8));
|
|
assert_eq!(1, 7u32.digit_count(8));
|
|
assert_eq!(2, 8u32.digit_count(8));
|
|
assert_eq!(2, 9u32.digit_count(8));
|
|
assert_eq!(2, 63u32.digit_count(8));
|
|
assert_eq!(3, 64u32.digit_count(8));
|
|
assert_eq!(3, 65u32.digit_count(8));
|
|
|
|
if cfg!(feature = "power-of-two") {
|
|
for i in 1usize..=31 {
|
|
let value = 8u128.pow(i as u32);
|
|
assert_eq!(i + 1, value.digit_count(8));
|
|
assert_eq!(i + 1, (value + 1).digit_count(8));
|
|
assert_eq!(i, (value - 1).digit_count(8));
|
|
|
|
let halfway = value + 4u128.pow(i as u32);
|
|
assert_eq!(i + 1, halfway.digit_count(8));
|
|
assert_eq!(i + 1, (halfway + 1).digit_count(8));
|
|
assert_eq!(i + 1, (halfway - 1).digit_count(8));
|
|
}
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn base16_count_test() {
|
|
assert_eq!(1, 0u32.digit_count(16));
|
|
assert_eq!(1, 1u32.digit_count(16));
|
|
assert_eq!(1, 15u32.digit_count(16));
|
|
assert_eq!(2, 16u32.digit_count(16));
|
|
assert_eq!(2, 17u32.digit_count(16));
|
|
assert_eq!(2, 255u32.digit_count(16));
|
|
assert_eq!(3, 256u32.digit_count(16));
|
|
assert_eq!(3, 257u32.digit_count(16));
|
|
|
|
if cfg!(feature = "power-of-two") {
|
|
for i in 1usize..=15 {
|
|
let value = 16u128.pow(i as u32);
|
|
assert_eq!(i + 1, value.digit_count(16));
|
|
assert_eq!(i + 1, (value + 1).digit_count(16));
|
|
assert_eq!(i, (value - 1).digit_count(16));
|
|
|
|
let halfway = value + 8u128.pow(i as u32);
|
|
assert_eq!(i + 1, halfway.digit_count(16));
|
|
assert_eq!(i + 1, (halfway + 1).digit_count(16));
|
|
assert_eq!(i + 1, (halfway - 1).digit_count(16));
|
|
}
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn base32_count_test() {
|
|
assert_eq!(1, 0u32.digit_count(32));
|
|
assert_eq!(1, 1u32.digit_count(32));
|
|
assert_eq!(1, 31u32.digit_count(32));
|
|
assert_eq!(2, 32u32.digit_count(32));
|
|
assert_eq!(2, 33u32.digit_count(32));
|
|
assert_eq!(2, 1023u32.digit_count(32));
|
|
assert_eq!(3, 1024u32.digit_count(32));
|
|
assert_eq!(3, 1025u32.digit_count(32));
|
|
|
|
if cfg!(feature = "power-of-two") {
|
|
for i in 1usize..=7 {
|
|
let value = 32u128.pow(i as u32);
|
|
assert_eq!(i + 1, value.digit_count(32));
|
|
assert_eq!(i + 1, (value + 1).digit_count(32));
|
|
assert_eq!(i, (value - 1).digit_count(32));
|
|
|
|
let halfway = value + 16u128.pow(i as u32);
|
|
assert_eq!(i + 1, halfway.digit_count(32));
|
|
assert_eq!(i + 1, (halfway + 1).digit_count(32));
|
|
assert_eq!(i + 1, (halfway - 1).digit_count(32));
|
|
}
|
|
}
|
|
}
|