bit_field_tests.cpp
1 // This file is part of the mcl project. 2 // Copyright (c) 2022 merryhime 3 // SPDX-License-Identifier: MIT 4 5 #include <array> 6 #include <tuple> 7 8 #include <catch2/catch_test_macros.hpp> 9 #include <mcl/bit/bit_field.hpp> 10 #include <mcl/stdint.hpp> 11 12 TEST_CASE("mcl::bit::ones", "[bit]") 13 { 14 const std::array cases{ 15 std::make_tuple<size_t, u8>(0, 0x00), 16 std::make_tuple<size_t, u8>(1, 0x01), 17 std::make_tuple<size_t, u8>(2, 0x03), 18 std::make_tuple<size_t, u8>(3, 0x07), 19 std::make_tuple<size_t, u8>(4, 0x0f), 20 std::make_tuple<size_t, u8>(5, 0x1f), 21 std::make_tuple<size_t, u8>(6, 0x3f), 22 std::make_tuple<size_t, u8>(7, 0x7f), 23 std::make_tuple<size_t, u8>(8, 0xff), 24 }; 25 26 for (const auto [count, expected] : cases) { 27 REQUIRE(mcl::bit::ones<u8>(count) == expected); 28 REQUIRE(mcl::bit::ones<u16>(count) == expected); 29 REQUIRE(mcl::bit::ones<u32>(count) == expected); 30 REQUIRE(mcl::bit::ones<u64>(count) == expected); 31 REQUIRE(mcl::bit::ones<uptr>(count) == expected); 32 REQUIRE(mcl::bit::ones<size_t>(count) == expected); 33 } 34 } 35 36 static_assert(mcl::bit::ones<3, u8>() == 0x7); 37 static_assert(mcl::bit::ones<15, u16>() == 0x7fff); 38 static_assert(mcl::bit::ones<16, u16>() == 0xffff); 39 static_assert(mcl::bit::ones<31, u32>() == 0x7fff'ffff); 40 static_assert(mcl::bit::ones<32, u32>() == 0xffff'ffff); 41 static_assert(mcl::bit::ones<63, u64>() == 0x7fff'ffff'ffff'ffff); 42 static_assert(mcl::bit::ones<64, u64>() == 0xffff'ffff'ffff'ffff);