1 2 /*============================================================================= 3 Copyright (c) 2017 Daniel James 4 5 Use, modification and distribution is subject to the Boost Software 6 License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at 7 http://www.boost.org/LICENSE_1_0.txt) 8 =============================================================================*/ 9 10 #include <vector> 11 #include <boost/core/lightweight_test.hpp> 12 #include "cleanup.hpp" 13 14 struct counted 15 { 16 static int count; 17 static std::vector<int> destroyed; resetcounted18 static void reset() 19 { 20 count = 0; 21 destroyed.clear(); 22 } 23 24 int value; 25 countedcounted26 counted(int v) : value(v) 27 { 28 BOOST_TEST(value != -1); 29 ++count; 30 } 31 countedcounted32 counted(counted const& x) : value(x.value) 33 { 34 BOOST_TEST(value != -1); 35 ++count; 36 } 37 ~countedcounted38 ~counted() 39 { 40 BOOST_TEST(value != -1); 41 destroyed.push_back(value); 42 value = -1; 43 BOOST_TEST(count > 0); 44 --count; 45 } 46 }; 47 48 int counted::count = 0; 49 std::vector<int> counted::destroyed; 50 main()51int main() 52 { 53 counted::reset(); 54 { 55 quickbook::cleanup c; 56 } 57 BOOST_TEST(counted::count == 0); 58 59 counted::reset(); 60 { 61 quickbook::cleanup c; 62 counted& v1 = c.add(new counted(1)); 63 counted& v2 = c.add(new counted(2)); 64 BOOST_TEST(v1.value == 1); 65 BOOST_TEST(v2.value == 2); 66 } 67 BOOST_TEST(counted::count == 0); 68 BOOST_TEST(counted::destroyed.size() == 2); 69 BOOST_TEST(counted::destroyed[0] == 2); 70 BOOST_TEST(counted::destroyed[1] == 1); 71 72 counted::reset(); 73 { 74 quickbook::cleanup c; 75 int& x = c.add(new int(10)); 76 BOOST_TEST(x == 10); 77 } 78 79 return boost::report_errors(); 80 } 81