#![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));
}
}
}