]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/testsuite/19_diagnostics/stacktrace/output.cc
libstdc++: Remove dg-options "-std=gnu++20" from remaining tests
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / 19_diagnostics / stacktrace / output.cc
CommitLineData
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
14void
15test_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
24void
25test_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
36void
37test_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
52int main()
53{
54 test_to_string();
55 test_ostream();
56 test_format();
57}