]>
Commit | Line | Data |
---|---|---|
f1dd83b7 JW |
1 | // { dg-do compile { target c++23 } } |
2 | // { dg-require-effective-target stacktrace } | |
3 | ||
4 | #include <stacktrace> | |
5 | #include <sstream> | |
6 | #include <testsuite_hooks.h> | |
7 | ||
8 | #ifndef __cpp_lib_formatters | |
9 | # error "Feature-test macro for formatters missing in <stacktrace>" | |
10 | #elif __cpp_lib_formatters < 202302L | |
11 | # error "Feature-test macro for formatters has wrong value in <stacktrace>" | |
12 | #endif | |
13 | ||
14 | void | |
15 | test_to_string() | |
16 | { | |
17 | auto trace = std::stacktrace::current(); | |
18 | std::string s1 = std::to_string(trace.at(0)); | |
19 | VERIFY( s1.contains("test_to_string():15") ); | |
20 | std::string s2 = std::to_string(trace); | |
21 | VERIFY( s2.contains(s1) ); | |
22 | } | |
23 | ||
24 | void | |
25 | test_ostream() | |
26 | { | |
27 | std::ostringstream out; | |
28 | auto trace = std::stacktrace::current(); | |
29 | out << trace.at(0); | |
30 | VERIFY( out.str() == std::to_string(trace.at(0)) ); | |
31 | out.str(""); | |
32 | out << trace; | |
33 | VERIFY( out.str() == std::to_string(trace) ); | |
34 | } | |
35 | ||
36 | void | |
37 | test_format() | |
38 | { | |
39 | static_assert( std::is_default_constructible_v<std::formatter<std::stacktrace_entry, char>> ); | |
40 | static_assert( std::is_default_constructible_v<std::formatter<std::stacktrace, char>> ); | |
41 | static_assert( std::is_default_constructible_v<std::formatter<std::pmr::stacktrace, char>> ); | |
42 | ||
43 | auto trace = std::pmr::stacktrace::current(); | |
44 | VERIFY( std::format("{}", trace) == std::to_string(trace) ); | |
45 | ||
46 | std::stacktrace_entry entry = trace.at(0); | |
47 | std::string str = std::to_string(entry); | |
48 | VERIFY( std::format("{}", entry) == str ); | |
49 | VERIFY( std::format("{0:!<{1}}", entry, str.size() + 3) == (str + "!!!") ); | |
50 | } | |
51 | ||
52 | int main() | |
53 | { | |
54 | test_to_string(); | |
55 | test_ostream(); | |
56 | test_format(); | |
57 | } |