Coverage Report

Created: 2023-12-13 14:58

test/zserio/BuiltInOperatorsTest.cpp
Line
Count
Source
1
#include "zserio/BuiltInOperators.h"
2
3
#include "gtest/gtest.h"
4
5
namespace zserio
6
{
7
8
namespace builtin
9
{
10
11
namespace
12
{
13
14
class DummyBitmask
15
{
16
public:
17
    using underlying_type = uint8_t;
18
19
    enum class Values : underlying_type
20
    {
21
        READ = 1U,
22
        WRITE = 2U,
23
        CREATE = 1U | 2U
24
    };
25
26
    constexpr DummyBitmask(Values value) noexcept :
27
            m_value(static_cast<underlying_type>(value))
28
11
    {}
29
30
    constexpr explicit DummyBitmask(underlying_type value) noexcept :
31
            m_value(value)
32
8
    {}
33
34
    constexpr underlying_type getValue() const
35
22
    {
36
22
        return m_value;
37
22
    }
38
39
private:
40
    underlying_type m_value;
41
};
42
43
inline bool operator==(const DummyBitmask& lhs, const DummyBitmask& rhs)
44
7
{
45
7
    return lhs.getValue() == rhs.getValue();
46
7
}
47
48
inline DummyBitmask operator|(DummyBitmask::Values lhs, DummyBitmask::Values rhs)
49
1
{
50
1
    return DummyBitmask(static_cast<DummyBitmask::underlying_type>(lhs) |
51
1
            static_cast<DummyBitmask::underlying_type>(rhs));
52
1
}
53
54
55
inline DummyBitmask operator&(DummyBitmask::Values lhs, DummyBitmask::Values rhs)
56
3
{
57
3
    return DummyBitmask(static_cast<DummyBitmask::underlying_type>(lhs) &
58
3
            static_cast<DummyBitmask::underlying_type>(rhs));
59
3
}
60
61
inline DummyBitmask operator&(const DummyBitmask& lhs, const DummyBitmask& rhs)
62
4
{
63
4
    return DummyBitmask(lhs.getValue() & rhs.getValue());
64
4
}
65
66
} // namespace
67
68
TEST(BuiltInOperatorsTest, isSet)
69
1
{
70
    // randomly mix bitmask instances with DummyBitmask::Values enum values to check that all variants work
71
1
    ASSERT_TRUE(isSet(DummyBitmask(DummyBitmask::Values::READ), DummyBitmask::Values::READ));
72
1
    ASSERT_TRUE(isSet(DummyBitmask::Values::CREATE, DummyBitmask::Values::READ));
73
1
    ASSERT_TRUE(isSet(DummyBitmask::Values::CREATE, DummyBitmask(DummyBitmask::Values::WRITE)));
74
1
    ASSERT_TRUE(isSet(DummyBitmask::Values::CREATE, DummyBitmask::Values::CREATE));
75
1
    ASSERT_TRUE(isSet(DummyBitmask::Values::CREATE, DummyBitmask::Values::READ | DummyBitmask::Values::WRITE));
76
1
    ASSERT_FALSE(isSet(DummyBitmask(DummyBitmask::Values::READ), DummyBitmask(DummyBitmask::Values::WRITE)));
77
1
    ASSERT_FALSE(isSet(DummyBitmask::Values::READ, DummyBitmask::Values::CREATE));
78
1
}
79
80
TEST(BuiltInOperatorsTest, numBits)
81
1
{
82
1
    EXPECT_EQ(0, numBits(0));
83
1
    EXPECT_EQ(1, numBits(1));
84
1
    EXPECT_EQ(1, numBits(2));
85
1
    EXPECT_EQ(2, numBits(3));
86
1
    EXPECT_EQ(2, numBits(4));
87
1
    EXPECT_EQ(3, numBits(5));
88
1
    EXPECT_EQ(3, numBits(6));
89
1
    EXPECT_EQ(3, numBits(7));
90
1
    EXPECT_EQ(3, numBits(8));
91
1
    EXPECT_EQ(4, numBits(16));
92
1
    EXPECT_EQ(5, numBits(32));
93
1
    EXPECT_EQ(6, numBits(64));
94
1
    EXPECT_EQ(7, numBits(128));
95
1
    EXPECT_EQ(8, numBits(256));
96
1
    EXPECT_EQ(9, numBits(512));
97
1
    EXPECT_EQ(10, numBits(1024));
98
1
    EXPECT_EQ(11, numBits(2048));
99
1
    EXPECT_EQ(12, numBits(4096));
100
1
    EXPECT_EQ(13, numBits(8192));
101
1
    EXPECT_EQ(14, numBits(16384));
102
1
    EXPECT_EQ(15, numBits(32768));
103
1
    EXPECT_EQ(16, numBits(65536));
104
1
    EXPECT_EQ(24, numBits(UINT64_C(1) << 24U));
105
1
    EXPECT_EQ(25, numBits((UINT64_C(1) << 24U) + 1));
106
1
    EXPECT_EQ(32, numBits(UINT64_C(1) << 32U));
107
1
    EXPECT_EQ(33, numBits((UINT64_C(1) << 32U) + 1));
108
1
    EXPECT_EQ(63, numBits(UINT64_C(1) << 63U));
109
1
    EXPECT_EQ(64, numBits((UINT64_C(1) << 63U) + 1));
110
1
}
111
112
} // namespace builtin
113
114
} // namespace zserio