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
77struct 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+
2435struct 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+
4669TEST (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+
60132TEST (mini_flat_map, iterators) {
61133 mini_flat_map<Key, Value> m (4 );
62134 m[0 ] = Value (1 );
0 commit comments