1111
1212#include " fmt/base.h"
1313
14- #include < climits> // INT_MAX
15- #include < cstring> // std::strlen
14+ #include < limits.h> // INT_MAX
15+ #include < string.h> // strlen
16+
1617#include < functional> // std::equal_to
1718#include < iterator> // std::back_insert_iterator, std::distance
1819#include < limits> // std::numeric_limits
2122
2223#include " gmock/gmock.h"
2324
24- using fmt::string_view;
2525using fmt::detail::buffer;
2626
2727using testing::_;
@@ -38,22 +38,22 @@ fmt::appender copy(fmt::string_view s, fmt::appender out) {
3838}
3939
4040TEST (string_view_test, value_type) {
41- static_assert (std::is_same<string_view::value_type, char >::value, " " );
41+ static_assert (std::is_same<fmt:: string_view::value_type, char >::value, " " );
4242}
4343
4444TEST (string_view_test, ctor) {
45- EXPECT_STREQ (" abc " , fmt::string_view (" abc" ).data ());
46- EXPECT_EQ (3u , fmt::string_view (" abc" ).size ());
45+ EXPECT_STREQ (fmt::string_view (" abc" ).data (), " abc " );
46+ EXPECT_EQ (fmt::string_view (" abc" ).size (), 3u );
4747
48- EXPECT_STREQ (" defg " , fmt::string_view (std::string (" defg" )).data ());
49- EXPECT_EQ (4u , fmt::string_view (std::string (" defg" )).size ());
48+ EXPECT_STREQ (fmt::string_view (std::string (" defg" )).data (), " defg " );
49+ EXPECT_EQ (fmt::string_view (std::string (" defg" )).size (), 4u );
5050}
5151
5252TEST (string_view_test, length) {
5353 // Test that string_view::size() returns string length, not buffer size.
5454 char str[100 ] = " some string" ;
55- EXPECT_EQ (std::strlen (str), string_view (str).size ());
56- EXPECT_LT (std:: strlen (str), sizeof (str));
55+ EXPECT_EQ (fmt:: string_view (str).size (), strlen (str ));
56+ EXPECT_LT (strlen (str), sizeof (str));
5757}
5858
5959// Check string_view's comparison operator.
@@ -62,13 +62,16 @@ template <template <typename> class Op> void check_op() {
6262 size_t num_inputs = sizeof (inputs) / sizeof (*inputs);
6363 for (size_t i = 0 ; i < num_inputs; ++i) {
6464 for (size_t j = 0 ; j < num_inputs; ++j) {
65- string_view lhs (inputs[i]), rhs (inputs[j]);
66- EXPECT_EQ (Op<int >()(lhs.compare (rhs), 0 ), Op<string_view>()(lhs, rhs));
65+ fmt::string_view lhs (inputs[i]), rhs (inputs[j]);
66+ EXPECT_EQ (Op<int >()(lhs.compare (rhs), 0 ),
67+ Op<fmt::string_view>()(lhs, rhs));
6768 }
6869 }
6970}
7071
7172TEST (string_view_test, compare) {
73+ using fmt::string_view;
74+
7275 EXPECT_EQ (string_view (" foo" ).compare (string_view (" foo" )), 0 );
7376 EXPECT_GT (string_view (" fop" ).compare (string_view (" foo" )), 0 );
7477 EXPECT_LT (string_view (" foo" ).compare (string_view (" fop" )), 0 );
@@ -174,51 +177,51 @@ template <typename T> struct mock_buffer final : buffer<T> {
174177TEST (buffer_test, ctor) {
175178 {
176179 mock_buffer<int > buffer;
177- EXPECT_EQ (nullptr , buffer.data ());
178- EXPECT_EQ (static_cast < size_t >( 0 ), buffer.size ());
179- EXPECT_EQ (static_cast < size_t >( 0 ), buffer.capacity ());
180+ EXPECT_EQ (buffer.data (), nullptr );
181+ EXPECT_EQ (buffer.size (), 0u );
182+ EXPECT_EQ (buffer.capacity (), 0u );
180183 }
181184 {
182- int dummy ;
183- mock_buffer<int > buffer (&dummy );
184- EXPECT_EQ (&dummy, & buffer[0 ]);
185- EXPECT_EQ (static_cast < size_t >( 0 ), buffer.size ());
186- EXPECT_EQ (static_cast < size_t >( 0 ), buffer.capacity ());
185+ int data ;
186+ mock_buffer<int > buffer (&data );
187+ EXPECT_EQ (&buffer[0 ], &data );
188+ EXPECT_EQ (buffer.size (), 0u );
189+ EXPECT_EQ (buffer.capacity (), 0u );
187190 }
188191 {
189- int dummy ;
192+ int data ;
190193 size_t capacity = std::numeric_limits<size_t >::max ();
191- mock_buffer<int > buffer (&dummy , capacity);
192- EXPECT_EQ (&dummy, & buffer[0 ]);
193- EXPECT_EQ (static_cast < size_t >( 0 ), buffer.size ());
194- EXPECT_EQ (capacity, buffer.capacity ());
194+ mock_buffer<int > buffer (&data , capacity);
195+ EXPECT_EQ (&buffer[0 ], &data );
196+ EXPECT_EQ (buffer.size (), 0u );
197+ EXPECT_EQ (buffer.capacity (), capacity );
195198 }
196199}
197200
198201TEST (buffer_test, access) {
199202 char data[10 ];
200203 mock_buffer<char > buffer (data, sizeof (data));
201204 buffer[0 ] = 11 ;
202- EXPECT_EQ (11 , buffer[0 ]);
205+ EXPECT_EQ (buffer[0 ], 11 );
203206 buffer[3 ] = 42 ;
204- EXPECT_EQ (42 , *(&buffer[0 ] + 3 ));
207+ EXPECT_EQ (*(&buffer[0 ] + 3 ), 42 );
205208 const fmt::detail::buffer<char >& const_buffer = buffer;
206- EXPECT_EQ (42 , const_buffer[3 ]);
209+ EXPECT_EQ (const_buffer[3 ], 42 );
207210}
208211
209212TEST (buffer_test, try_resize) {
210213 char data[123 ];
211214 mock_buffer<char > buffer (data, sizeof (data));
212215 buffer[10 ] = 42 ;
213- EXPECT_EQ (42 , buffer[10 ]);
216+ EXPECT_EQ (buffer[10 ], 42 );
214217 buffer.try_resize (20 );
215- EXPECT_EQ (20u , buffer.size ());
216- EXPECT_EQ (123u , buffer.capacity ());
217- EXPECT_EQ (42 , buffer[10 ]);
218+ EXPECT_EQ (buffer.size (), 20u );
219+ EXPECT_EQ (buffer.capacity (), 123u );
220+ EXPECT_EQ (buffer[10 ], 42 );
218221 buffer.try_resize (5 );
219- EXPECT_EQ (5u , buffer.size ());
220- EXPECT_EQ (123u , buffer.capacity ());
221- EXPECT_EQ (42 , buffer[10 ]);
222+ EXPECT_EQ (buffer.size (), 5u );
223+ EXPECT_EQ (buffer.capacity (), 123u );
224+ EXPECT_EQ (buffer[10 ], 42 );
222225 // Check if try_resize calls grow.
223226 EXPECT_CALL (buffer, do_grow (124 ));
224227 buffer.try_resize (124 );
@@ -240,23 +243,23 @@ TEST(buffer_test, clear) {
240243 EXPECT_CALL (buffer, do_grow (20 ));
241244 buffer.try_resize (20 );
242245 buffer.try_resize (0 );
243- EXPECT_EQ (static_cast < size_t >( 0 ), buffer.size ());
244- EXPECT_EQ (20u , buffer.capacity ());
246+ EXPECT_EQ (buffer.size (), 0u );
247+ EXPECT_EQ (buffer.capacity (), 20u );
245248}
246249
247250TEST (buffer_test, append) {
248251 char data[15 ];
249252 mock_buffer<char > buffer (data, 10 );
250253 auto test = " test" ;
251254 buffer.append (test, test + 5 );
252- EXPECT_STREQ (test, &buffer[0 ]);
253- EXPECT_EQ (5u , buffer.size ());
255+ EXPECT_STREQ (&buffer[0 ], test );
256+ EXPECT_EQ (buffer.size (), 5u );
254257 buffer.try_resize (10 );
255258 EXPECT_CALL (buffer, do_grow (12 ));
256259 buffer.append (test, test + 2 );
257- EXPECT_EQ (' t ' , buffer[10 ]);
258- EXPECT_EQ (' e ' , buffer[11 ]);
259- EXPECT_EQ (12u , buffer.size ());
260+ EXPECT_EQ (buffer[10 ], ' t ' );
261+ EXPECT_EQ (buffer[11 ], ' e ' );
262+ EXPECT_EQ (buffer.size (), 12u );
260263}
261264
262265TEST (buffer_test, append_partial) {
@@ -444,7 +447,7 @@ struct check_custom {
444447 auto parse_ctx = fmt::format_parse_context (" " );
445448 auto ctx = fmt::format_context (fmt::appender (buffer), fmt::format_args ());
446449 h.format (parse_ctx, ctx);
447- EXPECT_EQ (" test " , std::string (buffer.data , buffer.size ()));
450+ EXPECT_EQ (std::string (buffer.data , buffer.size ()), " test " );
448451 return test_result ();
449452 }
450453};
@@ -470,14 +473,14 @@ enum class arg_id_result { none, index, name };
470473struct test_arg_id_handler {
471474 arg_id_result res = arg_id_result::none;
472475 int index = 0 ;
473- string_view name;
476+ fmt:: string_view name;
474477
475478 constexpr void on_index (int i) {
476479 res = arg_id_result::index;
477480 index = i;
478481 }
479482
480- constexpr void on_name (string_view n) {
483+ constexpr void on_name (fmt:: string_view n) {
481484 res = arg_id_result::name;
482485 name = n;
483486 }
@@ -700,46 +703,46 @@ TEST(base_test, format_to) {
700703TEST (base_test, format_to_array) {
701704 char buffer[4 ];
702705 auto result = fmt::format_to (buffer, " {}" , 12345 );
703- EXPECT_EQ (4 , std::distance (&buffer[0 ], result.out ));
706+ EXPECT_EQ (std::distance (&buffer[0 ], result.out ), 4 );
704707 EXPECT_TRUE (result.truncated );
705- EXPECT_EQ (buffer + 4 , result. out );
706- EXPECT_EQ (" 1234 " , fmt::string_view (buffer, 4 ));
708+ EXPECT_EQ (result. out , buffer + 4 );
709+ EXPECT_EQ (fmt::string_view (buffer, 4 ), " 1234 " );
707710
708711 char * out = nullptr ;
709712 EXPECT_THROW (out = result, std::runtime_error);
710713 (void )out;
711714
712715 result = fmt::format_to (buffer, " {:s}" , " foobar" );
713- EXPECT_EQ (4 , std::distance (&buffer[0 ], result.out ));
716+ EXPECT_EQ (std::distance (&buffer[0 ], result.out ), 4 );
714717 EXPECT_TRUE (result.truncated );
715- EXPECT_EQ (buffer + 4 , result. out );
716- EXPECT_EQ (" foob " , fmt::string_view (buffer, 4 ));
718+ EXPECT_EQ (result. out , buffer + 4 );
719+ EXPECT_EQ (fmt::string_view (buffer, 4 ), " foob " );
717720
718721 buffer[0 ] = ' x' ;
719722 buffer[1 ] = ' x' ;
720723 buffer[2 ] = ' x' ;
721724 buffer[3 ] = ' x' ;
722725 result = fmt::format_to (buffer, " {}" , ' A' );
723- EXPECT_EQ (1 , std::distance (&buffer[0 ], result.out ));
726+ EXPECT_EQ (std::distance (&buffer[0 ], result.out ), 1 );
724727 EXPECT_FALSE (result.truncated );
725- EXPECT_EQ (buffer + 1 , result. out );
726- EXPECT_EQ (" Axxx " , fmt::string_view (buffer, 4 ));
728+ EXPECT_EQ (result. out , buffer + 1 );
729+ EXPECT_EQ (fmt::string_view (buffer, 4 ), " Axxx " );
727730
728731 result = fmt::format_to (buffer, " {}{} " , ' B' , ' C' );
729- EXPECT_EQ (3 , std::distance (&buffer[0 ], result.out ));
732+ EXPECT_EQ (std::distance (&buffer[0 ], result.out ), 3 );
730733 EXPECT_FALSE (result.truncated );
731- EXPECT_EQ (buffer + 3 , result. out );
732- EXPECT_EQ (" BC x " , fmt::string_view (buffer, 4 ));
734+ EXPECT_EQ (result. out , buffer + 3 );
735+ EXPECT_EQ (fmt::string_view (buffer, 4 ), " BC x " );
733736
734737 result = fmt::format_to (buffer, " {}" , " ABCDE" );
735- EXPECT_EQ (4 , std::distance (&buffer[0 ], result.out ));
738+ EXPECT_EQ (std::distance (&buffer[0 ], result.out ), 4 );
736739 EXPECT_TRUE (result.truncated );
737- EXPECT_EQ (" ABCD " , fmt::string_view (buffer, 4 ));
740+ EXPECT_EQ (fmt::string_view (buffer, 4 ), " ABCD " );
738741
739742 result = fmt::format_to (buffer, " {}" , std::string (1000 , ' *' ).c_str ());
740- EXPECT_EQ (4 , std::distance (&buffer[0 ], result.out ));
743+ EXPECT_EQ (std::distance (&buffer[0 ], result.out ), 4 );
741744 EXPECT_TRUE (result.truncated );
742- EXPECT_EQ (" **** " , fmt::string_view (buffer, 4 ));
745+ EXPECT_EQ (fmt::string_view (buffer, 4 ), " **** " );
743746}
744747
745748// Test that check is not found by ADL.
@@ -828,7 +831,7 @@ TEST(base_test, throw_in_buffer_dtor) {
828831 }
829832}
830833
831- struct its_a_trap {
834+ struct convertible_to_anything {
832835 template <typename T> operator T () const {
833836 auto v = T ();
834837 v.x = 42 ;
@@ -837,12 +840,12 @@ struct its_a_trap {
837840};
838841
839842FMT_BEGIN_NAMESPACE
840- template <> struct formatter <its_a_trap > {
843+ template <> struct formatter <convertible_to_anything > {
841844 FMT_CONSTEXPR auto parse (format_parse_context& ctx) -> decltype(ctx.begin()) {
842845 return ctx.begin ();
843846 }
844847
845- auto format (its_a_trap , format_context& ctx) const
848+ auto format (convertible_to_anything , format_context& ctx) const
846849 -> decltype(ctx.out()) const {
847850 auto out = ctx.out ();
848851 *out++ = ' x' ;
@@ -851,9 +854,9 @@ template <> struct formatter<its_a_trap> {
851854};
852855FMT_END_NAMESPACE
853856
854- TEST (base_test, trappy_conversion ) {
857+ TEST (base_test, convertible_to_anything ) {
855858 auto s = std::string ();
856- fmt::format_to (std::back_inserter (s), " {}" , its_a_trap ());
859+ fmt::format_to (std::back_inserter (s), " {}" , convertible_to_anything ());
857860 EXPECT_EQ (s, " x" );
858861}
859862
@@ -878,25 +881,22 @@ TEST(base_test, format_to_custom_container) {
878881 fmt::format_to (std::back_inserter (c), " " );
879882}
880883
881- struct nondeterministic_format_string {
882- mutable int i = 0 ;
883- FMT_CONSTEXPR operator string_view () const {
884- return string_view (" {}" , i++ != 0 ? 2 : 0 );
885- }
886- };
887-
888884TEST (base_test, no_repeated_format_string_conversions) {
885+ struct nondeterministic_format_string {
886+ mutable int i = 0 ;
887+ FMT_CONSTEXPR operator fmt::string_view () const {
888+ return {" {}" , i++ != 0 ? 2 : 0 };
889+ }
890+ };
891+
889892#if !FMT_GCC_VERSION
890893 char buf[10 ];
891894 fmt::format_to (buf, nondeterministic_format_string ());
892895#endif
893896}
894897
895898TEST (base_test, format_context_accessors) {
896- class copier {
897- static fmt::format_context copy (fmt::appender app,
898- const fmt::format_context& ctx) {
899- return fmt::format_context (std::move (app), ctx.args (), ctx.locale ());
900- }
899+ auto copy = [](fmt::appender app, const fmt::format_context& ctx) {
900+ return fmt::format_context (app, ctx.args (), ctx.locale ());
901901 };
902902}
0 commit comments