1 ////////////////////////////////////////////////////////////////////////////// 2 // 3 // (C) Copyright Ion Gaztanaga 2015-2015. Distributed under the Boost 4 // Software License, Version 1.0. (See accompanying file 5 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 6 // 7 // See http://www.boost.org/libs/container for documentation. 8 // 9 ////////////////////////////////////////////////////////////////////////////// 10 #include <boost/container/pmr/memory_resource.hpp> 11 #include <boost/core/lightweight_test.hpp> 12 #include <boost/core/no_exceptions_support.hpp> 13 #include "derived_from_memory_resource.hpp" 14 15 #include <cstdlib> 16 17 using namespace boost::container; 18 using namespace boost::container::pmr; 19 test_allocate()20void test_allocate() 21 { 22 derived_from_memory_resource d; 23 memory_resource &mr = d; 24 25 d.reset(); 26 BOOST_TEST(d.do_allocate_called == false); 27 BOOST_TEST(d.do_allocate_bytes == 0); 28 BOOST_TEST(d.do_allocate_alignment == 0); 29 30 mr.allocate(2, 4); 31 BOOST_TEST(d.do_allocate_called == true); 32 BOOST_TEST(d.do_allocate_bytes == 2); 33 BOOST_TEST(d.do_allocate_alignment == 4); 34 } 35 test_deallocate()36void test_deallocate() 37 { 38 derived_from_memory_resource d; 39 memory_resource &mr = d; 40 41 d.reset(); 42 BOOST_TEST(d.do_deallocate_called == false); 43 BOOST_TEST(d.do_deallocate_p == 0); 44 BOOST_TEST(d.do_allocate_bytes == 0); 45 BOOST_TEST(d.do_allocate_alignment == 0); 46 47 mr.deallocate(&d, 2, 4); 48 BOOST_TEST(d.do_deallocate_called == true); 49 BOOST_TEST(d.do_deallocate_p == &d); 50 BOOST_TEST(d.do_deallocate_bytes == 2); 51 BOOST_TEST(d.do_deallocate_alignment == 4); 52 } 53 test_destructor()54void test_destructor() 55 { 56 { 57 derived_from_memory_resource d; 58 d.reset(); 59 BOOST_TEST(derived_from_memory_resource::destructor_called == false); 60 } 61 BOOST_TEST(derived_from_memory_resource::destructor_called == true); 62 } 63 test_is_equal()64void test_is_equal() 65 { 66 derived_from_memory_resource d; 67 memory_resource &mr = d; 68 69 d.reset(); 70 BOOST_TEST(d.do_is_equal_called == false); 71 BOOST_TEST(d.do_is_equal_other == 0); 72 73 mr.is_equal(d); 74 BOOST_TEST(d.do_is_equal_called == true); 75 BOOST_TEST(d.do_is_equal_other == &d); 76 } 77 test_equality_operator()78void test_equality_operator() 79 { 80 derived_from_memory_resource d; 81 memory_resource &mr = d; 82 83 d.reset(); 84 BOOST_TEST(d.do_is_equal_called == false); 85 BOOST_TEST(d.do_is_equal_other == 0); 86 87 //equal addresses are shorcircuited 88 BOOST_TEST((mr == mr) == true); 89 BOOST_TEST(d.do_is_equal_called == false); 90 BOOST_TEST(d.do_is_equal_other == 0); 91 92 //unequal addresses are dispatched to is_equal which in turn calls do_is_equal 93 derived_from_memory_resource d2(1); 94 d.reset(); 95 d2.reset(); 96 memory_resource &mr2 = d2; 97 BOOST_TEST((mr == mr2) == false); 98 BOOST_TEST(d.do_is_equal_called == true); 99 BOOST_TEST(d.do_is_equal_other == &d2); 100 } 101 test_inequality_operator()102void test_inequality_operator() 103 { 104 derived_from_memory_resource d; 105 memory_resource &mr = d; 106 107 d.reset(); 108 BOOST_TEST(d.do_is_equal_called == false); 109 BOOST_TEST(d.do_is_equal_other == 0); 110 111 //equal addresses are shorcircuited 112 BOOST_TEST((mr != mr) == false); 113 BOOST_TEST(d.do_is_equal_called == false); 114 BOOST_TEST(d.do_is_equal_other == 0); 115 116 //unequal addresses are dispatched to is_equal which in turn calls do_is_equal 117 derived_from_memory_resource d2(1); 118 d.reset(); 119 d2.reset(); 120 memory_resource &mr2 = d2; 121 BOOST_TEST((mr != mr2) == true); 122 BOOST_TEST(d.do_is_equal_called == true); 123 BOOST_TEST(d.do_is_equal_other == &d2); 124 } 125 main()126int main() 127 { 128 test_destructor(); 129 test_allocate(); 130 test_deallocate(); 131 test_is_equal(); 132 test_equality_operator(); 133 test_inequality_operator(); 134 return ::boost::report_errors(); 135 } 136