GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: test/zserio/BuiltInOperatorsTest.cpp Lines: 55 55 100.0 %
Date: 2023-12-13 14:51:09 Branches: 108 440 24.5 %

Line Branch Exec 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
11
    constexpr DummyBitmask(Values value) noexcept :
27
11
            m_value(static_cast<underlying_type>(value))
28
11
    {}
29
30
8
    constexpr explicit DummyBitmask(underlying_type value) noexcept :
31
8
            m_value(value)
32
8
    {}
33
34
22
    constexpr underlying_type getValue() const
35
    {
36
22
        return m_value;
37
    }
38
39
private:
40
    underlying_type m_value;
41
};
42
43
7
inline bool operator==(const DummyBitmask& lhs, const DummyBitmask& rhs)
44
{
45
7
    return lhs.getValue() == rhs.getValue();
46
}
47
48
1
inline DummyBitmask operator|(DummyBitmask::Values lhs, DummyBitmask::Values rhs)
49
{
50
    return DummyBitmask(static_cast<DummyBitmask::underlying_type>(lhs) |
51
1
            static_cast<DummyBitmask::underlying_type>(rhs));
52
}
53
54
55
3
inline DummyBitmask operator&(DummyBitmask::Values lhs, DummyBitmask::Values rhs)
56
{
57
    return DummyBitmask(static_cast<DummyBitmask::underlying_type>(lhs) &
58
3
            static_cast<DummyBitmask::underlying_type>(rhs));
59
}
60
61
4
inline DummyBitmask operator&(const DummyBitmask& lhs, const DummyBitmask& rhs)
62
{
63
4
    return DummyBitmask(lhs.getValue() & rhs.getValue());
64
}
65
66
} // namespace
67
68


802
TEST(BuiltInOperatorsTest, isSet)
69
{
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
}
79
80


802
TEST(BuiltInOperatorsTest, numBits)
81
{
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

2394
} // namespace zserio