1 | // Copyright 2019 Peter Dimov |
2 | // Distributed under the Boost Software License, Version 1.0. |
3 | // http://www.boost.org/LICENSE_1_0.txt |
4 | |
5 | #include <boost/assert/source_location.hpp> |
6 | #include <boost/core/lightweight_test.hpp> |
7 | #include <cstring> |
8 | |
9 | static char const* adjust_filename( char const* file ) |
10 | { |
11 | #if defined(__INTEL_LLVM_COMPILER) && __INTEL_LLVM_COMPILER >= 20210300 |
12 | |
13 | char const* fn = std::strrchr( file, '/' ); |
14 | return fn? fn + 1: file; |
15 | |
16 | #else |
17 | |
18 | return file; |
19 | |
20 | #endif |
21 | } |
22 | |
23 | int main() |
24 | { |
25 | { |
26 | boost::source_location loc; |
27 | |
28 | BOOST_TEST_CSTR_EQ( loc.file_name(), "" ); |
29 | BOOST_TEST_CSTR_EQ( loc.function_name(), "" ); |
30 | BOOST_TEST_EQ( loc.line(), 0 ); |
31 | BOOST_TEST_EQ( loc.column(), 0 ); |
32 | } |
33 | |
34 | { |
35 | boost::source_location loc( __FILE__, __LINE__, "main()" ); |
36 | |
37 | BOOST_TEST_CSTR_EQ( loc.file_name(), __FILE__ ); |
38 | BOOST_TEST_EQ( loc.line(), 35 ); |
39 | BOOST_TEST_CSTR_EQ( loc.function_name(), "main()" ); |
40 | BOOST_TEST_EQ( loc.column(), 0 ); |
41 | } |
42 | |
43 | { |
44 | boost::source_location loc( "file" , 1, "main()" , 2 ); |
45 | |
46 | BOOST_TEST_CSTR_EQ( loc.file_name(), "file" ); |
47 | BOOST_TEST_EQ( loc.line(), 1 ); |
48 | BOOST_TEST_CSTR_EQ( loc.function_name(), "main()" ); |
49 | BOOST_TEST_EQ( loc.column(), 2 ); |
50 | } |
51 | |
52 | { |
53 | boost::source_location loc = BOOST_CURRENT_LOCATION; |
54 | |
55 | BOOST_TEST_CSTR_EQ( loc.file_name(), adjust_filename(__FILE__) ); |
56 | BOOST_TEST_EQ( loc.line(), 53 ); |
57 | } |
58 | |
59 | { |
60 | BOOST_STATIC_CONSTEXPR boost::source_location loc = BOOST_CURRENT_LOCATION; |
61 | |
62 | BOOST_TEST_CSTR_EQ( loc.file_name(), adjust_filename(__FILE__) ); |
63 | BOOST_TEST_EQ( loc.line(), 60 ); |
64 | } |
65 | |
66 | #if defined(__cpp_lib_source_location) && __cpp_lib_source_location >= 201907L |
67 | |
68 | { |
69 | std::source_location loc = std::source_location::current(); |
70 | boost::source_location loc2 = loc; |
71 | |
72 | BOOST_TEST_CSTR_EQ( loc2.file_name(), loc.file_name() ); |
73 | BOOST_TEST_CSTR_EQ( loc2.function_name(), loc.function_name() ); |
74 | BOOST_TEST_EQ( loc2.line(), loc.line() ); |
75 | BOOST_TEST_EQ( loc2.column(), loc.column() ); |
76 | } |
77 | |
78 | #endif |
79 | |
80 | return boost::report_errors(); |
81 | } |
82 | |