Skip to content

Commit 3452006

Browse files
Add bitset unit tests
1 parent d99cf47 commit 3452006

File tree

1 file changed

+88
-0
lines changed

1 file changed

+88
-0
lines changed

tests/testEnumUtils.cpp

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
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+
24+
MAKE_BITSET_STRONG(Bitset);
25+
26+
BOOST_AUTO_TEST_SUITE(EnumUtils)
27+
28+
BOOST_AUTO_TEST_CASE(TypeTraits)
29+
{
30+
BOOST_TEST(IsBitset<InvalidBitset>::value);
31+
BOOST_TEST(!IsValidBitset<InvalidBitset>::value);
32+
33+
BOOST_TEST(IsBitset<Bitset>::value);
34+
BOOST_TEST(IsValidBitset<Bitset>::value);
35+
}
36+
37+
BOOST_AUTO_TEST_CASE(Operators)
38+
{
39+
BOOST_REQUIRE(static_cast<unsigned>(Bitset{}) == 0);
40+
41+
{
42+
Bitset b{};
43+
b = b | Bitset::A;
44+
BOOST_TEST(static_cast<unsigned>(b) == 0x01u);
45+
b |= Bitset::B;
46+
BOOST_TEST(static_cast<unsigned>(b) == 0x03u);
47+
}
48+
49+
{
50+
Bitset b = Bitset::A | Bitset::B | Bitset::C;
51+
b = b & (Bitset::A | Bitset::B);
52+
BOOST_TEST(static_cast<unsigned>(b) == 0x03u);
53+
b &= Bitset::B;
54+
BOOST_TEST(static_cast<unsigned>(b) == 0x02u);
55+
}
56+
57+
{
58+
Bitset b = Bitset::A | Bitset::C;
59+
b = b ^ Bitset::B;
60+
BOOST_TEST(static_cast<unsigned>(b) == 0x07u);
61+
b ^= Bitset::A;
62+
BOOST_TEST(static_cast<unsigned>(b) == 0x06u);
63+
}
64+
}
65+
66+
BOOST_AUTO_TEST_CASE(UtilityFunctions)
67+
{
68+
Bitset b = Bitset::A | Bitset::C;
69+
BOOST_TEST(bitset::isSet(b, Bitset::A));
70+
BOOST_TEST(!bitset::isSet(b, Bitset::B));
71+
72+
b = bitset::set(b, Bitset::B, true);
73+
BOOST_TEST(static_cast<unsigned>(b) == 0x07u);
74+
75+
b = bitset::set(b, Bitset::B, false);
76+
BOOST_TEST(static_cast<unsigned>(b) == 0x05u);
77+
78+
b = bitset::clear(b, Bitset::A);
79+
BOOST_TEST(static_cast<unsigned>(b) == 0x04u);
80+
81+
b = bitset::toggle(b, Bitset::A);
82+
BOOST_TEST(static_cast<unsigned>(b) == 0x05u);
83+
84+
b = bitset::toggle(b, Bitset::A);
85+
BOOST_TEST(static_cast<unsigned>(b) == 0x04u);
86+
}
87+
88+
BOOST_AUTO_TEST_SUITE_END()

0 commit comments

Comments
 (0)