| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
1 |
// Formatting library for C++ - formatting library tests |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
2 |
// |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
3 |
// Copyright (c) 2012 - present, Victor Zverovich |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
4 |
// All rights reserved. |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
5 |
// |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
6 |
// For the license information refer to format.h. |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
7 |
|
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
8 |
#include "fmt/compile.h" |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
9 |
#include "gmock/gmock.h" |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
10 |
|
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
11 |
#if defined(__cpp_lib_bit_cast) && __cpp_lib_bit_cast >= 201806 && \ |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
12 |
defined(__cpp_constexpr) && __cpp_constexpr >= 201907 && \ |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
13 |
defined(__cpp_constexpr_dynamic_alloc) && \ |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
14 |
__cpp_constexpr_dynamic_alloc >= 201907 && __cplusplus >= 202002L |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
15 |
template <size_t max_string_length, typename Char = char> struct test_string { |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
16 |
template <typename T> constexpr bool operator==(const T& rhs) const noexcept { |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
17 |
return fmt::basic_string_view<Char>(rhs).compare(buffer) == 0; |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
18 |
} |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
19 |
Char buffer[max_string_length]{}; |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
20 |
}; |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
21 |
|
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
22 |
template <size_t max_string_length, typename Char = char, typename... Args> |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
23 |
consteval auto test_format(auto format, const Args&... args) { |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
24 |
test_string<max_string_length, Char> string{}; |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
25 |
fmt::format_to(string.buffer, format, args...); |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
26 |
return string; |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
27 |
} |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
28 |
|
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
29 |
TEST(compile_time_formatting_test, floating_point) { |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
30 |
EXPECT_EQ("0", test_format<2>(FMT_COMPILE("{}"), 0.0f)); |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
31 |
EXPECT_EQ("392.500000", test_format<11>(FMT_COMPILE("{0:f}"), 392.5f)); |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
32 |
|
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
33 |
EXPECT_EQ("0", test_format<2>(FMT_COMPILE("{:}"), 0.0)); |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
34 |
EXPECT_EQ("0.000000", test_format<9>(FMT_COMPILE("{:f}"), 0.0)); |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
35 |
EXPECT_EQ("0", test_format<2>(FMT_COMPILE("{:g}"), 0.0)); |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
36 |
EXPECT_EQ("392.65", test_format<7>(FMT_COMPILE("{:}"), 392.65)); |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
37 |
EXPECT_EQ("392.65", test_format<7>(FMT_COMPILE("{:g}"), 392.65)); |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
38 |
EXPECT_EQ("392.65", test_format<7>(FMT_COMPILE("{:G}"), 392.65)); |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
39 |
EXPECT_EQ("4.9014e+06", test_format<11>(FMT_COMPILE("{:g}"), 4.9014e6)); |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
40 |
EXPECT_EQ("-392.650000", test_format<12>(FMT_COMPILE("{:f}"), -392.65)); |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
41 |
EXPECT_EQ("-392.650000", test_format<12>(FMT_COMPILE("{:F}"), -392.65)); |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
42 |
|
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
43 |
EXPECT_EQ("3.926500e+02", test_format<13>(FMT_COMPILE("{0:e}"), 392.65)); |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
44 |
EXPECT_EQ("3.926500E+02", test_format<13>(FMT_COMPILE("{0:E}"), 392.65)); |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
45 |
EXPECT_EQ("+0000392.6", test_format<11>(FMT_COMPILE("{0:+010.4g}"), 392.65)); |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
46 |
EXPECT_EQ("9223372036854775808.000000", |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
47 |
test_format<27>(FMT_COMPILE("{:f}"), 9223372036854775807.0)); |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
48 |
|
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
49 |
constexpr double nan = std::numeric_limits<double>::quiet_NaN(); |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
50 |
EXPECT_EQ("nan", test_format<4>(FMT_COMPILE("{}"), nan)); |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
51 |
EXPECT_EQ("+nan", test_format<5>(FMT_COMPILE("{:+}"), nan)); |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
52 |
if (std::signbit(-nan)) |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
53 |
EXPECT_EQ("-nan", test_format<5>(FMT_COMPILE("{}"), -nan)); |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
54 |
else |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
55 |
fmt::print("Warning: compiler doesn't handle negative NaN correctly"); |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
56 |
|
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
57 |
constexpr double inf = std::numeric_limits<double>::infinity(); |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
58 |
EXPECT_EQ("inf", test_format<4>(FMT_COMPILE("{}"), inf)); |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
59 |
EXPECT_EQ("+inf", test_format<5>(FMT_COMPILE("{:+}"), inf)); |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
60 |
EXPECT_EQ("-inf", test_format<5>(FMT_COMPILE("{}"), -inf)); |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
61 |
} |
| f8deb5b9 |
Poul Sander |
2022-01-15 13:55 |
62 |
#endif |
|
|
1970-01-01 00:00 |
63 |
|