@@ -62,6 +62,30 @@ StringType reserved_codepoint()
62
62
return result;
63
63
}
64
64
65
+ enum class DefaultFormattedEnum
66
+ {
67
+ One = 1 ,
68
+ Two = 2 ,
69
+ };
70
+
71
+ enum class UserFormattedEnum
72
+ {
73
+ One = 1 ,
74
+ Two = 2 ,
75
+ };
76
+
77
+ [[maybe_unused]] std::ostream &operator <<(std::ostream &stream, const UserFormattedEnum &u)
78
+ {
79
+ stream << (u == UserFormattedEnum::One ? " One" : " Two" );
80
+ return stream;
81
+ }
82
+
83
+ [[maybe_unused]] std::wostream &operator <<(std::wostream &stream, const UserFormattedEnum &u)
84
+ {
85
+ stream << (u == UserFormattedEnum::One ? " One" : " Two" );
86
+ return stream;
87
+ }
88
+
65
89
} // namespace
66
90
67
91
CATCH_TEMPLATE_TEST_CASE (
@@ -445,6 +469,10 @@ CATCH_TEMPLATE_TEST_CASE(
445
469
test_format (FMT (" {:c}" ), FMT (" a" ), U' a' );
446
470
test_format (FMT (" {:c}" ), FMT (" \n " ), FLY_CHR (char_type, ' \n ' ));
447
471
test_format (FMT (" {:c}" ), FMT (" a" ), 0x61 );
472
+ test_format (
473
+ FMT (" {:c}" ),
474
+ StringType (1 , static_cast <char_type>(DefaultFormattedEnum::One)),
475
+ DefaultFormattedEnum::One);
448
476
test_format (FMT (" {:c}" ), StringType (1 , static_cast <char_type>(true )), true );
449
477
test_format (FMT (" {:c}" ), StringType (1 , static_cast <char_type>(false )), false );
450
478
}
@@ -487,6 +515,9 @@ CATCH_TEMPLATE_TEST_CASE(
487
515
488
516
test_format (FMT (" {:s}" ), FMT (" true" ), true );
489
517
test_format (FMT (" {:s}" ), FMT (" false" ), false );
518
+
519
+ test_format (FMT (" {:s}" ), FMT (" One" ), UserFormattedEnum::One);
520
+ test_format (FMT (" {:s}" ), FMT (" Two" ), UserFormattedEnum::Two);
490
521
}
491
522
492
523
CATCH_SECTION (" Presentation type may be set (pointer)" )
@@ -508,6 +539,8 @@ CATCH_TEMPLATE_TEST_CASE(
508
539
test_format (FMT (" {:b}" ), FMT (" 1000001" ), char8_t (0x41 ));
509
540
test_format (FMT (" {:b}" ), FMT (" 1000001" ), char16_t (0x41 ));
510
541
test_format (FMT (" {:b}" ), FMT (" 1000001" ), char32_t (0x41 ));
542
+ test_format (FMT (" {:b}" ), FMT (" 1" ), DefaultFormattedEnum::One);
543
+ test_format (FMT (" {:b}" ), FMT (" 10" ), DefaultFormattedEnum::Two);
511
544
512
545
test_format (FMT (" {:b}" ), FMT (" 11111111" ), std::numeric_limits<std::uint8_t >::max ());
513
546
test_format (FMT (" {:b}" ), FMT (" 0" ), std::numeric_limits<std::uint8_t >::min ());
@@ -539,6 +572,8 @@ CATCH_TEMPLATE_TEST_CASE(
539
572
test_format (FMT (" {:o}" ), FMT (" 101" ), char8_t (0x41 ));
540
573
test_format (FMT (" {:o}" ), FMT (" 101" ), char16_t (0x41 ));
541
574
test_format (FMT (" {:o}" ), FMT (" 101" ), char32_t (0x41 ));
575
+ test_format (FMT (" {:o}" ), FMT (" 1" ), DefaultFormattedEnum::One);
576
+ test_format (FMT (" {:o}" ), FMT (" 2" ), DefaultFormattedEnum::Two);
542
577
543
578
test_format (FMT (" {:o}" ), FMT (" 377" ), std::numeric_limits<std::uint8_t >::max ());
544
579
test_format (FMT (" {:o}" ), FMT (" 0" ), std::numeric_limits<std::uint8_t >::min ());
@@ -570,6 +605,8 @@ CATCH_TEMPLATE_TEST_CASE(
570
605
test_format (FMT (" {:d}" ), FMT (" 65" ), char8_t (0x41 ));
571
606
test_format (FMT (" {:d}" ), FMT (" 65" ), char16_t (0x41 ));
572
607
test_format (FMT (" {:d}" ), FMT (" 65" ), char32_t (0x41 ));
608
+ test_format (FMT (" {:d}" ), FMT (" 1" ), DefaultFormattedEnum::One);
609
+ test_format (FMT (" {:d}" ), FMT (" 2" ), DefaultFormattedEnum::Two);
573
610
574
611
test_format (FMT (" {:d}" ), FMT (" 255" ), std::numeric_limits<std::uint8_t >::max ());
575
612
test_format (FMT (" {:d}" ), FMT (" 0" ), std::numeric_limits<std::uint8_t >::min ());
@@ -601,6 +638,8 @@ CATCH_TEMPLATE_TEST_CASE(
601
638
test_format (FMT (" {:x}" ), FMT (" 41" ), char8_t (0x41 ));
602
639
test_format (FMT (" {:x}" ), FMT (" 41" ), char16_t (0x41 ));
603
640
test_format (FMT (" {:x}" ), FMT (" 41" ), char32_t (0x41 ));
641
+ test_format (FMT (" {:x}" ), FMT (" 1" ), DefaultFormattedEnum::One);
642
+ test_format (FMT (" {:x}" ), FMT (" 2" ), DefaultFormattedEnum::Two);
604
643
605
644
test_format (FMT (" {:X}" ), FMT (" BEEF" ), 0xbeef );
606
645
0 commit comments