Skip to content

Commit f4c43aa

Browse files
Add bitset unit tests
1 parent a8f15ec commit f4c43aa

1 file changed

Lines changed: 87 additions & 0 deletions

File tree

tests/testEnumUtils.cpp

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
// Copyright (C) 2005 - 2023 Settlers Freaks (sf-team at siedler25.org)
2+
//
3+
// SPDX-License-Identifier: GPL-2.0-or-later
4+
5+
#include "s25util/enumUtils.h"
6+
#include <boost/test/unit_test.hpp>
7+
#include <sstream>
8+
9+
enum class InvalidBitset : int
10+
{
11+
};
12+
template<>
13+
struct IsBitset<InvalidBitset> : std::true_type
14+
{};
15+
16+
enum class Bitset : unsigned
17+
{
18+
None,
19+
A = (1 << 0),
20+
B = (1 << 1),
21+
C = (1 << 2)
22+
};
23+
MAKE_BITSET_STRONG(Bitset);
24+
25+
BOOST_AUTO_TEST_SUITE(EnumUtils)
26+
27+
BOOST_AUTO_TEST_CASE(TypeTraits)
28+
{
29+
BOOST_TEST(IsBitset<InvalidBitset>::value);
30+
BOOST_TEST(!IsValidBitset<InvalidBitset>::value);
31+
32+
BOOST_TEST(IsBitset<Bitset>::value);
33+
BOOST_TEST(IsValidBitset<Bitset>::value);
34+
}
35+
36+
BOOST_AUTO_TEST_CASE(Operators)
37+
{
38+
BOOST_REQUIRE(static_cast<unsigned>(Bitset{}) == 0);
39+
40+
{
41+
Bitset b{};
42+
b = b | Bitset::A;
43+
BOOST_TEST(static_cast<unsigned>(b) == 0x01u);
44+
b |= Bitset::B;
45+
BOOST_TEST(static_cast<unsigned>(b) == 0x03u);
46+
}
47+
48+
{
49+
Bitset b = Bitset::A | Bitset::B | Bitset::C;
50+
b = b & (Bitset::A | Bitset::B);
51+
BOOST_TEST(static_cast<unsigned>(b) == 0x03u);
52+
b &= Bitset::B;
53+
BOOST_TEST(static_cast<unsigned>(b) == 0x02u);
54+
}
55+
56+
{
57+
Bitset b = Bitset::A | Bitset::C;
58+
b = b ^ Bitset::B;
59+
BOOST_TEST(static_cast<unsigned>(b) == 0x07u);
60+
b ^= Bitset::A;
61+
BOOST_TEST(static_cast<unsigned>(b) == 0x06u);
62+
}
63+
}
64+
65+
BOOST_AUTO_TEST_CASE(UtilityFunctions)
66+
{
67+
Bitset b = Bitset::A | Bitset::C;
68+
BOOST_TEST(bitset::isSet(b, Bitset::A));
69+
BOOST_TEST(!bitset::isSet(b, Bitset::B));
70+
71+
b = bitset::set(b, Bitset::B, true);
72+
BOOST_TEST(static_cast<unsigned>(b) == 0x07u);
73+
74+
b = bitset::set(b, Bitset::B, false);
75+
BOOST_TEST(static_cast<unsigned>(b) == 0x05u);
76+
77+
b = bitset::clear(b, Bitset::A);
78+
BOOST_TEST(static_cast<unsigned>(b) == 0x04u);
79+
80+
b = bitset::toggle(b, Bitset::A);
81+
BOOST_TEST(static_cast<unsigned>(b) == 0x05u);
82+
83+
b = bitset::toggle(b, Bitset::A);
84+
BOOST_TEST(static_cast<unsigned>(b) == 0x04u);
85+
}
86+
87+
BOOST_AUTO_TEST_SUITE_END()

0 commit comments

Comments
 (0)