blob: ec6f7cd426df4b30b1e6ce88a0d716ead588df6a [file]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "bits.h"
#include <gtest/gtest.h>
TEST(bits, countRZero) {
EXPECT_EQ(8, ignite::countr_zero(uint8_t(0)));
EXPECT_EQ(0, ignite::countr_zero(uint8_t(1)));
EXPECT_EQ(1, ignite::countr_zero(uint8_t(2)));
EXPECT_EQ(0, ignite::countr_zero(uint8_t(3)));
EXPECT_EQ(2, ignite::countr_zero(uint8_t(4)));
EXPECT_EQ(0, ignite::countr_zero(uint8_t(5)));
EXPECT_EQ(1, ignite::countr_zero(uint8_t(6)));
EXPECT_EQ(0, ignite::countr_zero(uint8_t(7)));
EXPECT_EQ(3, ignite::countr_zero(uint8_t(8)));
EXPECT_EQ(2, ignite::countr_zero(uint8_t(12)));
EXPECT_EQ(0, ignite::countr_zero(uint8_t(15)));
EXPECT_EQ(4, ignite::countr_zero(uint8_t(16)));
EXPECT_EQ(7, ignite::countr_zero(uint8_t(128)));
EXPECT_EQ(0, ignite::countr_zero(uint8_t(255)));
EXPECT_EQ(16, ignite::countr_zero(uint16_t(0)));
EXPECT_EQ(0, ignite::countr_zero(uint16_t(1)));
EXPECT_EQ(1, ignite::countr_zero(uint16_t(2)));
EXPECT_EQ(0, ignite::countr_zero(uint16_t(3)));
EXPECT_EQ(2, ignite::countr_zero(uint16_t(4)));
EXPECT_EQ(0, ignite::countr_zero(uint16_t(5)));
EXPECT_EQ(1, ignite::countr_zero(uint16_t(6)));
EXPECT_EQ(0, ignite::countr_zero(uint16_t(7)));
EXPECT_EQ(3, ignite::countr_zero(uint16_t(8)));
EXPECT_EQ(2, ignite::countr_zero(uint16_t(12)));
EXPECT_EQ(0, ignite::countr_zero(uint16_t(15)));
EXPECT_EQ(4, ignite::countr_zero(uint16_t(16)));
EXPECT_EQ(7, ignite::countr_zero(uint16_t(128)));
EXPECT_EQ(0, ignite::countr_zero(uint16_t(255)));
EXPECT_EQ(11, ignite::countr_zero(uint16_t(0x0800)));
EXPECT_EQ(0, ignite::countr_zero(uint16_t(0x0fff)));
EXPECT_EQ(15, ignite::countr_zero(uint16_t(0x8000)));
EXPECT_EQ(0, ignite::countr_zero(uint16_t(0xffff)));
EXPECT_EQ(32, ignite::countr_zero(uint32_t(0)));
EXPECT_EQ(0, ignite::countr_zero(uint32_t(1)));
EXPECT_EQ(1, ignite::countr_zero(uint32_t(2)));
EXPECT_EQ(0, ignite::countr_zero(uint32_t(3)));
EXPECT_EQ(2, ignite::countr_zero(uint32_t(4)));
EXPECT_EQ(0, ignite::countr_zero(uint32_t(5)));
EXPECT_EQ(1, ignite::countr_zero(uint32_t(6)));
EXPECT_EQ(0, ignite::countr_zero(uint32_t(7)));
EXPECT_EQ(3, ignite::countr_zero(uint32_t(8)));
EXPECT_EQ(2, ignite::countr_zero(uint32_t(12)));
EXPECT_EQ(0, ignite::countr_zero(uint32_t(15)));
EXPECT_EQ(4, ignite::countr_zero(uint32_t(16)));
EXPECT_EQ(7, ignite::countr_zero(uint32_t(128)));
EXPECT_EQ(0, ignite::countr_zero(uint32_t(255)));
EXPECT_EQ(11, ignite::countr_zero(uint32_t(0x0800)));
EXPECT_EQ(0, ignite::countr_zero(uint32_t(0x0fff)));
EXPECT_EQ(15, ignite::countr_zero(uint32_t(0x8000)));
EXPECT_EQ(0, ignite::countr_zero(uint32_t(0xffff)));
EXPECT_EQ(23, ignite::countr_zero(uint32_t(0x00800000)));
EXPECT_EQ(0, ignite::countr_zero(uint32_t(0x00ffffff)));
EXPECT_EQ(31, ignite::countr_zero(uint32_t(0x80000000)));
EXPECT_EQ(0, ignite::countr_zero(uint32_t(0xffffffff)));
EXPECT_EQ(64, ignite::countr_zero(uint64_t(0)));
EXPECT_EQ(0, ignite::countr_zero(uint64_t(1)));
EXPECT_EQ(1, ignite::countr_zero(uint64_t(2)));
EXPECT_EQ(0, ignite::countr_zero(uint64_t(3)));
EXPECT_EQ(2, ignite::countr_zero(uint64_t(4)));
EXPECT_EQ(0, ignite::countr_zero(uint64_t(5)));
EXPECT_EQ(1, ignite::countr_zero(uint64_t(6)));
EXPECT_EQ(0, ignite::countr_zero(uint64_t(7)));
EXPECT_EQ(3, ignite::countr_zero(uint64_t(8)));
EXPECT_EQ(2, ignite::countr_zero(uint64_t(12)));
EXPECT_EQ(0, ignite::countr_zero(uint64_t(15)));
EXPECT_EQ(4, ignite::countr_zero(uint64_t(16)));
EXPECT_EQ(7, ignite::countr_zero(uint64_t(128)));
EXPECT_EQ(0, ignite::countr_zero(uint64_t(255)));
EXPECT_EQ(11, ignite::countr_zero(uint64_t(0x0800)));
EXPECT_EQ(0, ignite::countr_zero(uint64_t(0x0fff)));
EXPECT_EQ(15, ignite::countr_zero(uint64_t(0x8000)));
EXPECT_EQ(0, ignite::countr_zero(uint64_t(0xffff)));
EXPECT_EQ(31, ignite::countr_zero(uint64_t(0x80000000)));
EXPECT_EQ(0, ignite::countr_zero(uint64_t(0xffffffff)));
EXPECT_EQ(47, ignite::countr_zero(uint64_t(0x0000800000000000)));
EXPECT_EQ(0, ignite::countr_zero(uint64_t(0x0000ffffffffffff)));
EXPECT_EQ(63, ignite::countr_zero(uint64_t(0x8000000000000000)));
EXPECT_EQ(0, ignite::countr_zero(uint64_t(0xffffffffffffffff)));
}
TEST(bits, countLZero) {
EXPECT_EQ(8, ignite::countl_zero(uint8_t(0)));
EXPECT_EQ(7, ignite::countl_zero(uint8_t(1)));
EXPECT_EQ(6, ignite::countl_zero(uint8_t(2)));
EXPECT_EQ(6, ignite::countl_zero(uint8_t(3)));
EXPECT_EQ(5, ignite::countl_zero(uint8_t(4)));
EXPECT_EQ(5, ignite::countl_zero(uint8_t(5)));
EXPECT_EQ(5, ignite::countl_zero(uint8_t(6)));
EXPECT_EQ(5, ignite::countl_zero(uint8_t(7)));
EXPECT_EQ(4, ignite::countl_zero(uint8_t(8)));
EXPECT_EQ(4, ignite::countl_zero(uint8_t(12)));
EXPECT_EQ(4, ignite::countl_zero(uint8_t(15)));
EXPECT_EQ(3, ignite::countl_zero(uint8_t(16)));
EXPECT_EQ(0, ignite::countl_zero(uint8_t(128)));
EXPECT_EQ(0, ignite::countl_zero(uint8_t(255)));
EXPECT_EQ(16, ignite::countl_zero(uint16_t(0)));
EXPECT_EQ(15, ignite::countl_zero(uint16_t(1)));
EXPECT_EQ(14, ignite::countl_zero(uint16_t(2)));
EXPECT_EQ(14, ignite::countl_zero(uint16_t(3)));
EXPECT_EQ(13, ignite::countl_zero(uint16_t(4)));
EXPECT_EQ(13, ignite::countl_zero(uint16_t(5)));
EXPECT_EQ(13, ignite::countl_zero(uint16_t(6)));
EXPECT_EQ(13, ignite::countl_zero(uint16_t(7)));
EXPECT_EQ(12, ignite::countl_zero(uint16_t(8)));
EXPECT_EQ(12, ignite::countl_zero(uint16_t(12)));
EXPECT_EQ(12, ignite::countl_zero(uint16_t(15)));
EXPECT_EQ(11, ignite::countl_zero(uint16_t(16)));
EXPECT_EQ(8, ignite::countl_zero(uint16_t(128)));
EXPECT_EQ(8, ignite::countl_zero(uint16_t(255)));
EXPECT_EQ(4, ignite::countl_zero(uint16_t(0x0800)));
EXPECT_EQ(4, ignite::countl_zero(uint16_t(0x0fff)));
EXPECT_EQ(0, ignite::countl_zero(uint16_t(0x8000)));
EXPECT_EQ(0, ignite::countl_zero(uint16_t(0xffff)));
EXPECT_EQ(32, ignite::countl_zero(uint32_t(0)));
EXPECT_EQ(31, ignite::countl_zero(uint32_t(1)));
EXPECT_EQ(30, ignite::countl_zero(uint32_t(2)));
EXPECT_EQ(30, ignite::countl_zero(uint32_t(3)));
EXPECT_EQ(29, ignite::countl_zero(uint32_t(4)));
EXPECT_EQ(29, ignite::countl_zero(uint32_t(5)));
EXPECT_EQ(29, ignite::countl_zero(uint32_t(6)));
EXPECT_EQ(29, ignite::countl_zero(uint32_t(7)));
EXPECT_EQ(28, ignite::countl_zero(uint32_t(8)));
EXPECT_EQ(28, ignite::countl_zero(uint32_t(12)));
EXPECT_EQ(28, ignite::countl_zero(uint32_t(15)));
EXPECT_EQ(27, ignite::countl_zero(uint32_t(16)));
EXPECT_EQ(24, ignite::countl_zero(uint32_t(128)));
EXPECT_EQ(24, ignite::countl_zero(uint32_t(255)));
EXPECT_EQ(20, ignite::countl_zero(uint32_t(0x0800)));
EXPECT_EQ(20, ignite::countl_zero(uint32_t(0x0fff)));
EXPECT_EQ(16, ignite::countl_zero(uint32_t(0x8000)));
EXPECT_EQ(16, ignite::countl_zero(uint32_t(0xffff)));
EXPECT_EQ(8, ignite::countl_zero(uint32_t(0x00800000)));
EXPECT_EQ(8, ignite::countl_zero(uint32_t(0x00ffffff)));
EXPECT_EQ(0, ignite::countl_zero(uint32_t(0x80000000)));
EXPECT_EQ(0, ignite::countl_zero(uint32_t(0xffffffff)));
EXPECT_EQ(64, ignite::countl_zero(uint64_t(0)));
EXPECT_EQ(63, ignite::countl_zero(uint64_t(1)));
EXPECT_EQ(62, ignite::countl_zero(uint64_t(2)));
EXPECT_EQ(62, ignite::countl_zero(uint64_t(3)));
EXPECT_EQ(61, ignite::countl_zero(uint64_t(4)));
EXPECT_EQ(61, ignite::countl_zero(uint64_t(5)));
EXPECT_EQ(61, ignite::countl_zero(uint64_t(6)));
EXPECT_EQ(61, ignite::countl_zero(uint64_t(7)));
EXPECT_EQ(60, ignite::countl_zero(uint64_t(8)));
EXPECT_EQ(60, ignite::countl_zero(uint64_t(12)));
EXPECT_EQ(60, ignite::countl_zero(uint64_t(15)));
EXPECT_EQ(59, ignite::countl_zero(uint64_t(16)));
EXPECT_EQ(56, ignite::countl_zero(uint64_t(128)));
EXPECT_EQ(56, ignite::countl_zero(uint64_t(255)));
EXPECT_EQ(52, ignite::countl_zero(uint64_t(0x0800)));
EXPECT_EQ(52, ignite::countl_zero(uint64_t(0x0fff)));
EXPECT_EQ(48, ignite::countl_zero(uint64_t(0x8000)));
EXPECT_EQ(48, ignite::countl_zero(uint64_t(0xffff)));
EXPECT_EQ(40, ignite::countl_zero(uint64_t(0x00800000)));
EXPECT_EQ(40, ignite::countl_zero(uint64_t(0x00ffffff)));
EXPECT_EQ(32, ignite::countl_zero(uint64_t(0x80000000)));
EXPECT_EQ(32, ignite::countl_zero(uint64_t(0xffffffff)));
EXPECT_EQ(16, ignite::countl_zero(uint64_t(0x0000800000000000)));
EXPECT_EQ(16, ignite::countl_zero(uint64_t(0x0000ffffffffffff)));
EXPECT_EQ(0, ignite::countl_zero(uint64_t(0x8000000000000000)));
EXPECT_EQ(0, ignite::countl_zero(uint64_t(0xffffffffffffffff)));
}
TEST(bits, bitWidth) {
EXPECT_EQ(0, ignite::bit_width(uint8_t(0)));
EXPECT_EQ(1, ignite::bit_width(uint8_t(1)));
EXPECT_EQ(2, ignite::bit_width(uint8_t(2)));
EXPECT_EQ(2, ignite::bit_width(uint8_t(3)));
EXPECT_EQ(3, ignite::bit_width(uint8_t(4)));
EXPECT_EQ(3, ignite::bit_width(uint8_t(5)));
EXPECT_EQ(3, ignite::bit_width(uint8_t(6)));
EXPECT_EQ(3, ignite::bit_width(uint8_t(7)));
EXPECT_EQ(4, ignite::bit_width(uint8_t(8)));
EXPECT_EQ(4, ignite::bit_width(uint8_t(12)));
EXPECT_EQ(4, ignite::bit_width(uint8_t(15)));
EXPECT_EQ(5, ignite::bit_width(uint8_t(16)));
EXPECT_EQ(8, ignite::bit_width(uint8_t(128)));
EXPECT_EQ(8, ignite::bit_width(uint8_t(255)));
EXPECT_EQ(0, ignite::bit_width(uint16_t(0)));
EXPECT_EQ(1, ignite::bit_width(uint16_t(1)));
EXPECT_EQ(2, ignite::bit_width(uint16_t(2)));
EXPECT_EQ(2, ignite::bit_width(uint16_t(3)));
EXPECT_EQ(3, ignite::bit_width(uint16_t(4)));
EXPECT_EQ(3, ignite::bit_width(uint16_t(5)));
EXPECT_EQ(3, ignite::bit_width(uint16_t(6)));
EXPECT_EQ(3, ignite::bit_width(uint16_t(7)));
EXPECT_EQ(4, ignite::bit_width(uint16_t(8)));
EXPECT_EQ(4, ignite::bit_width(uint16_t(12)));
EXPECT_EQ(4, ignite::bit_width(uint16_t(15)));
EXPECT_EQ(5, ignite::bit_width(uint16_t(16)));
EXPECT_EQ(8, ignite::bit_width(uint16_t(128)));
EXPECT_EQ(8, ignite::bit_width(uint16_t(255)));
EXPECT_EQ(12, ignite::bit_width(uint16_t(0x0800)));
EXPECT_EQ(12, ignite::bit_width(uint16_t(0x0fff)));
EXPECT_EQ(16, ignite::bit_width(uint16_t(0x8000)));
EXPECT_EQ(16, ignite::bit_width(uint16_t(0xffff)));
EXPECT_EQ(0, ignite::bit_width(uint32_t(0)));
EXPECT_EQ(1, ignite::bit_width(uint32_t(1)));
EXPECT_EQ(2, ignite::bit_width(uint32_t(2)));
EXPECT_EQ(2, ignite::bit_width(uint32_t(3)));
EXPECT_EQ(3, ignite::bit_width(uint32_t(4)));
EXPECT_EQ(3, ignite::bit_width(uint32_t(5)));
EXPECT_EQ(3, ignite::bit_width(uint32_t(6)));
EXPECT_EQ(3, ignite::bit_width(uint32_t(7)));
EXPECT_EQ(4, ignite::bit_width(uint32_t(8)));
EXPECT_EQ(4, ignite::bit_width(uint32_t(12)));
EXPECT_EQ(4, ignite::bit_width(uint32_t(15)));
EXPECT_EQ(5, ignite::bit_width(uint32_t(16)));
EXPECT_EQ(8, ignite::bit_width(uint32_t(128)));
EXPECT_EQ(8, ignite::bit_width(uint32_t(255)));
EXPECT_EQ(12, ignite::bit_width(uint32_t(0x0800)));
EXPECT_EQ(12, ignite::bit_width(uint32_t(0x0fff)));
EXPECT_EQ(16, ignite::bit_width(uint32_t(0x8000)));
EXPECT_EQ(16, ignite::bit_width(uint32_t(0xffff)));
EXPECT_EQ(24, ignite::bit_width(uint32_t(0x00800000)));
EXPECT_EQ(24, ignite::bit_width(uint32_t(0x00ffffff)));
EXPECT_EQ(32, ignite::bit_width(uint32_t(0x80000000)));
EXPECT_EQ(32, ignite::bit_width(uint32_t(0xffffffff)));
EXPECT_EQ(0, ignite::bit_width(uint64_t(0)));
EXPECT_EQ(1, ignite::bit_width(uint64_t(1)));
EXPECT_EQ(2, ignite::bit_width(uint64_t(2)));
EXPECT_EQ(2, ignite::bit_width(uint64_t(3)));
EXPECT_EQ(3, ignite::bit_width(uint64_t(4)));
EXPECT_EQ(3, ignite::bit_width(uint64_t(5)));
EXPECT_EQ(3, ignite::bit_width(uint64_t(6)));
EXPECT_EQ(3, ignite::bit_width(uint64_t(7)));
EXPECT_EQ(4, ignite::bit_width(uint64_t(8)));
EXPECT_EQ(4, ignite::bit_width(uint64_t(12)));
EXPECT_EQ(4, ignite::bit_width(uint64_t(15)));
EXPECT_EQ(5, ignite::bit_width(uint64_t(16)));
EXPECT_EQ(8, ignite::bit_width(uint64_t(128)));
EXPECT_EQ(8, ignite::bit_width(uint64_t(255)));
EXPECT_EQ(12, ignite::bit_width(uint64_t(0x0800)));
EXPECT_EQ(12, ignite::bit_width(uint64_t(0x0fff)));
EXPECT_EQ(16, ignite::bit_width(uint64_t(0x8000)));
EXPECT_EQ(16, ignite::bit_width(uint64_t(0xffff)));
EXPECT_EQ(24, ignite::bit_width(uint64_t(0x00800000)));
EXPECT_EQ(24, ignite::bit_width(uint64_t(0x00ffffff)));
EXPECT_EQ(32, ignite::bit_width(uint64_t(0x80000000)));
EXPECT_EQ(32, ignite::bit_width(uint64_t(0xffffffff)));
EXPECT_EQ(48, ignite::bit_width(uint64_t(0x0000800000000000)));
EXPECT_EQ(48, ignite::bit_width(uint64_t(0x0000ffffffffffff)));
EXPECT_EQ(64, ignite::bit_width(uint64_t(0x8000000000000000)));
EXPECT_EQ(64, ignite::bit_width(uint64_t(0xffffffffffffffff)));
}
TEST(bits, bitFloor) {
EXPECT_EQ(0, ignite::bit_floor(uint8_t(0)));
EXPECT_EQ(1, ignite::bit_floor(uint8_t(1)));
EXPECT_EQ(2, ignite::bit_floor(uint8_t(2)));
EXPECT_EQ(2, ignite::bit_floor(uint8_t(3)));
EXPECT_EQ(4, ignite::bit_floor(uint8_t(4)));
EXPECT_EQ(4, ignite::bit_floor(uint8_t(5)));
EXPECT_EQ(4, ignite::bit_floor(uint8_t(6)));
EXPECT_EQ(4, ignite::bit_floor(uint8_t(7)));
EXPECT_EQ(8, ignite::bit_floor(uint8_t(8)));
EXPECT_EQ(8, ignite::bit_floor(uint8_t(9)));
EXPECT_EQ(8, ignite::bit_floor(uint8_t(10)));
EXPECT_EQ(8, ignite::bit_floor(uint8_t(15)));
EXPECT_EQ(16, ignite::bit_floor(uint8_t(16)));
EXPECT_EQ(128, ignite::bit_floor(uint8_t(128)));
EXPECT_EQ(128, ignite::bit_floor(uint8_t(255)));
EXPECT_EQ(0, ignite::bit_floor(uint16_t(0)));
EXPECT_EQ(1, ignite::bit_floor(uint16_t(1)));
EXPECT_EQ(2, ignite::bit_floor(uint16_t(2)));
EXPECT_EQ(2, ignite::bit_floor(uint16_t(3)));
EXPECT_EQ(4, ignite::bit_floor(uint16_t(4)));
EXPECT_EQ(4, ignite::bit_floor(uint16_t(5)));
EXPECT_EQ(4, ignite::bit_floor(uint16_t(6)));
EXPECT_EQ(4, ignite::bit_floor(uint16_t(7)));
EXPECT_EQ(8, ignite::bit_floor(uint16_t(8)));
EXPECT_EQ(8, ignite::bit_floor(uint16_t(9)));
EXPECT_EQ(8, ignite::bit_floor(uint16_t(10)));
EXPECT_EQ(8, ignite::bit_floor(uint16_t(15)));
EXPECT_EQ(16, ignite::bit_floor(uint16_t(16)));
EXPECT_EQ(128, ignite::bit_floor(uint16_t(128)));
EXPECT_EQ(128, ignite::bit_floor(uint16_t(255)));
EXPECT_EQ(0x8000, ignite::bit_floor(uint16_t(0x8000)));
EXPECT_EQ(0x8000, ignite::bit_floor(uint16_t(0xffff)));
EXPECT_EQ(0, ignite::bit_floor(uint32_t(0)));
EXPECT_EQ(1, ignite::bit_floor(uint32_t(1)));
EXPECT_EQ(2, ignite::bit_floor(uint32_t(2)));
EXPECT_EQ(2, ignite::bit_floor(uint32_t(3)));
EXPECT_EQ(4, ignite::bit_floor(uint32_t(4)));
EXPECT_EQ(4, ignite::bit_floor(uint32_t(5)));
EXPECT_EQ(4, ignite::bit_floor(uint32_t(6)));
EXPECT_EQ(4, ignite::bit_floor(uint32_t(7)));
EXPECT_EQ(8, ignite::bit_floor(uint32_t(8)));
EXPECT_EQ(8, ignite::bit_floor(uint32_t(9)));
EXPECT_EQ(8, ignite::bit_floor(uint32_t(10)));
EXPECT_EQ(8, ignite::bit_floor(uint32_t(15)));
EXPECT_EQ(16, ignite::bit_floor(uint32_t(16)));
EXPECT_EQ(128, ignite::bit_floor(uint32_t(128)));
EXPECT_EQ(128, ignite::bit_floor(uint32_t(255)));
EXPECT_EQ(0x8000, ignite::bit_floor(uint32_t(0x8000)));
EXPECT_EQ(0x8000, ignite::bit_floor(uint32_t(0xffff)));
EXPECT_EQ(0x80000000, ignite::bit_floor(uint32_t(0x80000000)));
EXPECT_EQ(0x80000000, ignite::bit_floor(uint32_t(0xffffffff)));
EXPECT_EQ(0, ignite::bit_floor(uint64_t(0)));
EXPECT_EQ(1, ignite::bit_floor(uint64_t(1)));
EXPECT_EQ(2, ignite::bit_floor(uint64_t(2)));
EXPECT_EQ(2, ignite::bit_floor(uint64_t(3)));
EXPECT_EQ(4, ignite::bit_floor(uint64_t(4)));
EXPECT_EQ(4, ignite::bit_floor(uint64_t(5)));
EXPECT_EQ(4, ignite::bit_floor(uint64_t(6)));
EXPECT_EQ(4, ignite::bit_floor(uint64_t(7)));
EXPECT_EQ(8, ignite::bit_floor(uint64_t(8)));
EXPECT_EQ(8, ignite::bit_floor(uint64_t(9)));
EXPECT_EQ(8, ignite::bit_floor(uint64_t(10)));
EXPECT_EQ(8, ignite::bit_floor(uint64_t(15)));
EXPECT_EQ(16, ignite::bit_floor(uint64_t(16)));
EXPECT_EQ(128, ignite::bit_floor(uint64_t(128)));
EXPECT_EQ(128, ignite::bit_floor(uint64_t(255)));
EXPECT_EQ(0x8000, ignite::bit_floor(uint64_t(0x8000)));
EXPECT_EQ(0x8000, ignite::bit_floor(uint64_t(0xff00)));
EXPECT_EQ(0x80000000, ignite::bit_floor(uint64_t(0x80000000)));
EXPECT_EQ(0x80000000, ignite::bit_floor(uint64_t(0xffffffff)));
EXPECT_EQ(0x8000000000000000, ignite::bit_floor(uint64_t(0x8000000000000000)));
EXPECT_EQ(0x8000000000000000, ignite::bit_floor(uint64_t(0xffffffffffffffff)));
}
TEST(bits, bitCeil) {
EXPECT_EQ(1, ignite::bit_ceil(uint8_t(0)));
EXPECT_EQ(1, ignite::bit_ceil(uint8_t(1)));
EXPECT_EQ(2, ignite::bit_ceil(uint8_t(2)));
EXPECT_EQ(4, ignite::bit_ceil(uint8_t(3)));
EXPECT_EQ(4, ignite::bit_ceil(uint8_t(4)));
EXPECT_EQ(8, ignite::bit_ceil(uint8_t(5)));
EXPECT_EQ(8, ignite::bit_ceil(uint8_t(6)));
EXPECT_EQ(8, ignite::bit_ceil(uint8_t(7)));
EXPECT_EQ(8, ignite::bit_ceil(uint8_t(8)));
EXPECT_EQ(16, ignite::bit_ceil(uint8_t(9)));
EXPECT_EQ(16, ignite::bit_ceil(uint8_t(10)));
EXPECT_EQ(16, ignite::bit_ceil(uint8_t(15)));
EXPECT_EQ(16, ignite::bit_ceil(uint8_t(16)));
EXPECT_EQ(128, ignite::bit_ceil(uint8_t(65)));
EXPECT_EQ(128, ignite::bit_ceil(uint8_t(128)));
EXPECT_EQ(1, ignite::bit_ceil(uint16_t(0)));
EXPECT_EQ(1, ignite::bit_ceil(uint16_t(1)));
EXPECT_EQ(2, ignite::bit_ceil(uint16_t(2)));
EXPECT_EQ(4, ignite::bit_ceil(uint16_t(3)));
EXPECT_EQ(4, ignite::bit_ceil(uint16_t(4)));
EXPECT_EQ(8, ignite::bit_ceil(uint16_t(5)));
EXPECT_EQ(8, ignite::bit_ceil(uint16_t(6)));
EXPECT_EQ(8, ignite::bit_ceil(uint16_t(7)));
EXPECT_EQ(8, ignite::bit_ceil(uint16_t(8)));
EXPECT_EQ(16, ignite::bit_ceil(uint16_t(9)));
EXPECT_EQ(16, ignite::bit_ceil(uint16_t(10)));
EXPECT_EQ(16, ignite::bit_ceil(uint16_t(15)));
EXPECT_EQ(16, ignite::bit_ceil(uint16_t(16)));
EXPECT_EQ(128, ignite::bit_ceil(uint16_t(65)));
EXPECT_EQ(128, ignite::bit_ceil(uint16_t(128)));
EXPECT_EQ(0x8000, ignite::bit_ceil(uint16_t(0x4001)));
EXPECT_EQ(0x8000, ignite::bit_ceil(uint16_t(0x8000)));
EXPECT_EQ(1, ignite::bit_ceil(uint32_t(0)));
EXPECT_EQ(1, ignite::bit_ceil(uint32_t(1)));
EXPECT_EQ(2, ignite::bit_ceil(uint32_t(2)));
EXPECT_EQ(4, ignite::bit_ceil(uint32_t(3)));
EXPECT_EQ(4, ignite::bit_ceil(uint32_t(4)));
EXPECT_EQ(8, ignite::bit_ceil(uint32_t(5)));
EXPECT_EQ(8, ignite::bit_ceil(uint32_t(6)));
EXPECT_EQ(8, ignite::bit_ceil(uint32_t(7)));
EXPECT_EQ(8, ignite::bit_ceil(uint32_t(8)));
EXPECT_EQ(16, ignite::bit_ceil(uint32_t(9)));
EXPECT_EQ(16, ignite::bit_ceil(uint32_t(10)));
EXPECT_EQ(16, ignite::bit_ceil(uint32_t(15)));
EXPECT_EQ(16, ignite::bit_ceil(uint32_t(16)));
EXPECT_EQ(128, ignite::bit_ceil(uint32_t(65)));
EXPECT_EQ(128, ignite::bit_ceil(uint32_t(128)));
EXPECT_EQ(0x8000, ignite::bit_ceil(uint32_t(0x4001)));
EXPECT_EQ(0x8000, ignite::bit_ceil(uint32_t(0x8000)));
EXPECT_EQ(0x80000000, ignite::bit_ceil(uint32_t(0x40000001)));
EXPECT_EQ(0x80000000, ignite::bit_ceil(uint32_t(0x80000000)));
EXPECT_EQ(1, ignite::bit_ceil(uint64_t(0)));
EXPECT_EQ(1, ignite::bit_ceil(uint64_t(1)));
EXPECT_EQ(2, ignite::bit_ceil(uint64_t(2)));
EXPECT_EQ(4, ignite::bit_ceil(uint64_t(3)));
EXPECT_EQ(4, ignite::bit_ceil(uint64_t(4)));
EXPECT_EQ(8, ignite::bit_ceil(uint64_t(5)));
EXPECT_EQ(8, ignite::bit_ceil(uint64_t(6)));
EXPECT_EQ(8, ignite::bit_ceil(uint64_t(7)));
EXPECT_EQ(8, ignite::bit_ceil(uint64_t(8)));
EXPECT_EQ(16, ignite::bit_ceil(uint64_t(9)));
EXPECT_EQ(16, ignite::bit_ceil(uint64_t(10)));
EXPECT_EQ(16, ignite::bit_ceil(uint64_t(15)));
EXPECT_EQ(16, ignite::bit_ceil(uint64_t(16)));
EXPECT_EQ(128, ignite::bit_ceil(uint64_t(65)));
EXPECT_EQ(128, ignite::bit_ceil(uint64_t(128)));
EXPECT_EQ(0x8000, ignite::bit_ceil(uint64_t(0x4001)));
EXPECT_EQ(0x8000, ignite::bit_ceil(uint64_t(0x8000)));
EXPECT_EQ(0x80000000, ignite::bit_ceil(uint64_t(0x40000001)));
EXPECT_EQ(0x80000000, ignite::bit_ceil(uint64_t(0x80000000)));
EXPECT_EQ(0x8000000000000000, ignite::bit_ceil(uint64_t(0x4000000000000001)));
EXPECT_EQ(0x8000000000000000, ignite::bit_ceil(uint64_t(0x8000000000000000)));
}