1 // Copyright Antony Polukhin, 2016-2019.
3 // Distributed under the Boost Software License, Version 1.0. (See
4 // accompanying file LICENSE_1_0.txt or copy at
5 // http://www.boost.org/LICENSE_1_0.txt)
7 #include "test_impl.hpp"
8 #include <boost/stacktrace/stacktrace_fwd.hpp>
12 #include <boost/stacktrace.hpp>
13 #include <boost/thread.hpp>
14 #include <boost/optional.hpp>
15 #include <boost/core/lightweight_test.hpp>
17 #include <boost/timer/timer.hpp>
19 using boost::stacktrace::stacktrace
;
22 void main_test_loop() {
23 std::size_t loops
= 100;
26 boost::optional
<std::pair
<stacktrace
, stacktrace
> > ethalon
;
27 std::stringstream ss_ethalon
;
30 std::pair
<stacktrace
, stacktrace
> res
= function_from_library(Depth
, function_from_main_translation_unit
);
32 BOOST_TEST(res
== *ethalon
);
36 BOOST_TEST(ss
.str() == ss_ethalon
.str());
39 ss_ethalon
<< ethalon
->first
;
44 #if defined(BOOST_STACKTRACE_TEST_COM_PREINIT_MT) || defined(BOOST_STACKTRACE_TEST_COM_PREINIT_ST)
50 #if defined(BOOST_STACKTRACE_TEST_COM_PREINIT_MT)
51 ::CoInitializeEx(0, COINIT_MULTITHREADED
);
52 #elif defined(BOOST_STACKTRACE_TEST_COM_PREINIT_ST)
53 ::CoInitializeEx(0, COINIT_APARTMENTTHREADED
);
56 boost::timer::auto_cpu_timer t
;
58 boost::thread
t1(main_test_loop
);
59 boost::thread
t2(main_test_loop
);
60 boost::thread
t3(main_test_loop
);
67 #if defined(BOOST_STACKTRACE_TEST_COM_PREINIT_MT) || defined(BOOST_STACKTRACE_TEST_COM_PREINIT_ST)
71 return boost::report_errors();