Skip to content

Commit e518989

Browse files
committed
test: test the fmt support for bitset_set & mini_flat_map
Signed-off-by: Ronen Friedman <[email protected]>
1 parent eeeb012 commit e518989

File tree

2 files changed

+103
-2
lines changed

2 files changed

+103
-2
lines changed

src/test/common/test_bitset_set.cc

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// vim: ts=8 sw=2 smarttab
33

44
#include <gtest/gtest.h>
5-
#include <common/bitset_set.h>
5+
#include "common/bitset_set.h"
66

77
struct Key {
88
int8_t k;
@@ -23,6 +23,18 @@ struct Key {
2323
friend bool operator==(const Key &lhs, const Key &rhs) = default;
2424
};
2525

26+
namespace fmt {
27+
template <>
28+
struct formatter<Key> : private formatter<int> {
29+
using formatter<int>::parse;
30+
template <typename FormatContext>
31+
auto format(const Key& k, FormatContext& ctx) const {
32+
return formatter<int>::format(k.k, ctx);
33+
}
34+
};
35+
} // namespace fmt
36+
37+
2638
TEST(bitset_set, constructors) {
2739
bitset_set<128, Key> bs;
2840
ASSERT_TRUE(bs.empty());
@@ -182,3 +194,20 @@ TEST(bitset_set, equality) {
182194
bitset2.insert(64);
183195
ASSERT_EQ(bitset, bitset2);
184196
}
197+
198+
TEST(bitset_set, fmt_formatting) {
199+
bitset_set<128, Key> bitset;
200+
// when empty:
201+
auto using_fmt = fmt::format("{}", bitset);
202+
ASSERT_EQ("{}", using_fmt);
203+
204+
bitset.insert(30);
205+
bitset.insert(20);
206+
bitset.insert(10);
207+
using_fmt = fmt::format("{}", bitset);
208+
ASSERT_EQ("{10,20,30}", using_fmt);
209+
// compare to operator<<
210+
std::ostringstream oss;
211+
oss << bitset;
212+
EXPECT_EQ(using_fmt, oss.str());
213+
}

src/test/common/test_mini_flat_map.cc

Lines changed: 73 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// vim: ts=8 sw=2 smarttab
33

44
#include <gtest/gtest.h>
5-
#include <common/mini_flat_map.h>
5+
#include "common/mini_flat_map.h"
66

77
struct Value {
88
int value;
@@ -21,6 +21,17 @@ struct Value {
2121
}
2222
};
2323

24+
namespace fmt {
25+
template <>
26+
struct formatter<Value> : private formatter<int> {
27+
using formatter<int>::parse;
28+
template <typename FormatContext>
29+
auto format(const Value& v, FormatContext& ctx) const {
30+
return formatter<int>::format(v.value, ctx);
31+
}
32+
};
33+
} // namespace fmt
34+
2435
struct Key {
2536
int8_t k;
2637

@@ -43,6 +54,18 @@ struct Key {
4354
}
4455
};
4556

57+
namespace fmt {
58+
template <>
59+
struct formatter<Key> : private formatter<int> {
60+
using formatter<int>::parse;
61+
template <typename FormatContext>
62+
auto format(const Key& k, FormatContext& ctx) const {
63+
return formatter<int>::format(k.k, ctx);
64+
}
65+
};
66+
} // namespace fmt
67+
68+
4669
TEST(mini_flat_map, copy_operator_and_element_access) {
4770
mini_flat_map<Key, Value> m(4);
4871
m[0] = Value(1);
@@ -57,6 +80,55 @@ TEST(mini_flat_map, copy_operator_and_element_access) {
5780
ASSERT_TRUE(m.contains(0));
5881
}
5982

83+
TEST(mini_flat_map, fmt_formatting) {
84+
mini_flat_map<Key, Value> m(4);
85+
m[0] = Value(100);
86+
m[2] = Value(200);
87+
EXPECT_EQ("{0:100,2:200}", m.fmt_print());
88+
// compare to operator<<
89+
std::ostringstream oss;
90+
oss << m;
91+
EXPECT_EQ(m.fmt_print(), oss.str());
92+
// use indirectly in fmt::format
93+
EXPECT_EQ("{0:100,2:200}", fmt::format("{}", m));
94+
}
95+
96+
TEST(mini_flat_map, fmt_formatting_empty) {
97+
mini_flat_map<Key, Value> m(10);
98+
EXPECT_EQ("{}", m.fmt_print());
99+
// compare to operator<<
100+
const auto as_fmt = fmt::format("{}", m);
101+
EXPECT_EQ("{}", as_fmt);
102+
std::ostringstream oss;
103+
oss << m;
104+
EXPECT_EQ(as_fmt, oss.str());
105+
}
106+
107+
TEST(mini_flat_map, fmt_formatting_one) {
108+
mini_flat_map<Key, Value> m(4);
109+
m[2] = Value(100);
110+
const auto using_fmt = fmt::format("{}", m);
111+
EXPECT_EQ("{2:100}", using_fmt);
112+
// compare to operator<<
113+
std::ostringstream oss;
114+
oss << m;
115+
EXPECT_EQ(using_fmt, oss.str());
116+
}
117+
118+
TEST(mini_flat_map, fmt_formatting_full) {
119+
mini_flat_map<Key, Value> m(4);
120+
m[3] = Value(300);
121+
m[2] = Value(200);
122+
m[1] = Value(100);
123+
m[0] = Value(1);
124+
const auto using_fmt = fmt::format("{}", m);
125+
EXPECT_EQ("{0:1,1:100,2:200,3:300}", using_fmt);
126+
// compare to operator<<
127+
std::ostringstream oss;
128+
oss << m;
129+
EXPECT_EQ(using_fmt, oss.str());
130+
}
131+
60132
TEST(mini_flat_map, iterators) {
61133
mini_flat_map<Key, Value> m(4);
62134
m[0] = Value(1);

0 commit comments

Comments
 (0)