blob: 5cad0471f8bf7f4abbad1fed7fbfffbe189a122b [file] [log] [blame] [edit]
/*
* Copyright (C) 2025 The Android Open Source Project
*
* Licensed 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 "perfetto/ext/base/bits.h"
#include "test/gtest_and_gmock.h"
namespace perfetto {
namespace base {
namespace {
TEST(BitsTest, CountLeadZeros) {
EXPECT_EQ(CountLeadZeros(uint32_t(0)), 32u);
EXPECT_EQ(CountLeadZeros(uint32_t(1)), 31u);
EXPECT_EQ(CountLeadZeros(uint32_t(2)), 30u);
EXPECT_EQ(CountLeadZeros(uint32_t(3)), 30u);
EXPECT_EQ(CountLeadZeros(uint32_t(255)), 24u);
EXPECT_EQ(CountLeadZeros(uint32_t(256)), 23u);
EXPECT_EQ(CountLeadZeros(UINT32_MAX), 0u);
EXPECT_EQ(CountLeadZeros(uint64_t(0)), 64u);
EXPECT_EQ(CountLeadZeros(uint64_t(1)), 63u);
EXPECT_EQ(CountLeadZeros(uint64_t(2)), 62u);
EXPECT_EQ(CountLeadZeros(uint64_t(3)), 62u);
EXPECT_EQ(CountLeadZeros(uint64_t(255)), 56u);
EXPECT_EQ(CountLeadZeros(uint64_t(256)), 55u);
EXPECT_EQ(CountLeadZeros(UINT64_MAX), 0u);
}
TEST(BitsTest, CountTrailZeros) {
EXPECT_EQ(CountTrailZeros(uint32_t(0)), 32u);
EXPECT_EQ(CountTrailZeros(uint32_t(1)), 0u);
EXPECT_EQ(CountTrailZeros(uint32_t(2)), 1u);
EXPECT_EQ(CountTrailZeros(uint32_t(3)), 0u);
EXPECT_EQ(CountTrailZeros(uint32_t(255)), 0u);
EXPECT_EQ(CountTrailZeros(uint32_t(256)), 8u);
EXPECT_EQ(CountTrailZeros(UINT32_MAX), 0u);
EXPECT_EQ(CountTrailZeros(uint64_t(0)), 64u);
EXPECT_EQ(CountTrailZeros(uint64_t(1)), 0u);
EXPECT_EQ(CountTrailZeros(uint64_t(2)), 1u);
EXPECT_EQ(CountTrailZeros(uint64_t(3)), 0u);
EXPECT_EQ(CountTrailZeros(uint64_t(255)), 0u);
EXPECT_EQ(CountTrailZeros(uint64_t(256)), 8u);
EXPECT_EQ(CountTrailZeros(UINT64_MAX), 0u);
}
TEST(BitsTest, AllBitsSet) {
EXPECT_TRUE(AllBitsSet(uint8_t(0xFF)));
EXPECT_FALSE(AllBitsSet(uint16_t(0xFF)));
EXPECT_TRUE(AllBitsSet(uint16_t(0xFFFF)));
EXPECT_TRUE(AllBitsSet(uint32_t(0xFFFFFFFF)));
EXPECT_TRUE(AllBitsSet(uint64_t(0xFFFFFFFFFFFFFFFF)));
EXPECT_FALSE(AllBitsSet(uint64_t(0xFFFFFFFF)));
EXPECT_TRUE(AllBitsSet(int32_t(-1)));
EXPECT_TRUE(AllBitsSet(int64_t(-1)));
EXPECT_FALSE(AllBitsSet(int32_t(-2)));
EXPECT_FALSE(AllBitsSet(int64_t(-2)));
EXPECT_FALSE(AllBitsSet(uint32_t(0)));
EXPECT_FALSE(AllBitsSet(uint64_t(0)));
EXPECT_FALSE(AllBitsSet(int32_t(0)));
EXPECT_FALSE(AllBitsSet(int64_t(0)));
EXPECT_FALSE(AllBitsSet(int32_t(1)));
EXPECT_FALSE(AllBitsSet(int64_t(1)));
}
} // namespace
} // namespace base
} // namespace perfetto