File: memory_resource_test.cpp

package info (click to toggle)
boost1.74 1.74.0%2Bds1-21
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 463,588 kB
  • sloc: cpp: 3,338,117; xml: 131,293; python: 33,088; ansic: 14,292; asm: 4,038; sh: 3,353; makefile: 1,193; perl: 1,036; yacc: 478; php: 212; ruby: 102; lisp: 24; sql: 13; csh: 6
file content (135 lines) | stat: -rw-r--r-- 3,643 bytes parent folder | download | duplicates (10)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2015-2015. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#include <boost/container/pmr/memory_resource.hpp>
#include <boost/core/lightweight_test.hpp>
#include <boost/core/no_exceptions_support.hpp>
#include "derived_from_memory_resource.hpp"

#include <cstdlib>

using namespace boost::container;
using namespace boost::container::pmr;

void test_allocate()
{
   derived_from_memory_resource d;
   memory_resource &mr = d;

   d.reset();
   BOOST_TEST(d.do_allocate_called == false);
   BOOST_TEST(d.do_allocate_bytes == 0);
   BOOST_TEST(d.do_allocate_alignment == 0);

   mr.allocate(2, 4);
   BOOST_TEST(d.do_allocate_called == true);
   BOOST_TEST(d.do_allocate_bytes == 2);
   BOOST_TEST(d.do_allocate_alignment == 4);
}

void test_deallocate()
{
   derived_from_memory_resource d;
   memory_resource &mr = d;

   d.reset();
   BOOST_TEST(d.do_deallocate_called == false);
   BOOST_TEST(d.do_deallocate_p == 0);
   BOOST_TEST(d.do_allocate_bytes == 0);
   BOOST_TEST(d.do_allocate_alignment == 0);

   mr.deallocate(&d, 2, 4);
   BOOST_TEST(d.do_deallocate_called == true);
   BOOST_TEST(d.do_deallocate_p == &d);
   BOOST_TEST(d.do_deallocate_bytes == 2);
   BOOST_TEST(d.do_deallocate_alignment == 4);
}

void test_destructor()
{
   {
   derived_from_memory_resource d;
   d.reset();
   BOOST_TEST(derived_from_memory_resource::destructor_called == false);
   }
   BOOST_TEST(derived_from_memory_resource::destructor_called == true);
}

void test_is_equal()
{
   derived_from_memory_resource d;
   memory_resource &mr = d;

   d.reset();
   BOOST_TEST(d.do_is_equal_called == false);
   BOOST_TEST(d.do_is_equal_other == 0);

   mr.is_equal(d);
   BOOST_TEST(d.do_is_equal_called == true);
   BOOST_TEST(d.do_is_equal_other == &d);
}

void test_equality_operator()
{
   derived_from_memory_resource d;
   memory_resource &mr = d;

   d.reset();
   BOOST_TEST(d.do_is_equal_called == false);
   BOOST_TEST(d.do_is_equal_other == 0);

   //equal addresses are shorcircuited
   BOOST_TEST((mr == mr) == true);
   BOOST_TEST(d.do_is_equal_called == false);
   BOOST_TEST(d.do_is_equal_other == 0);

   //unequal addresses are dispatched to is_equal which in turn calls do_is_equal
   derived_from_memory_resource d2(1);
   d.reset();
   d2.reset();
   memory_resource &mr2 = d2;
   BOOST_TEST((mr == mr2) == false);
   BOOST_TEST(d.do_is_equal_called == true);
   BOOST_TEST(d.do_is_equal_other == &d2);
}

void test_inequality_operator()
{
   derived_from_memory_resource d;
   memory_resource &mr = d;

   d.reset();
   BOOST_TEST(d.do_is_equal_called == false);
   BOOST_TEST(d.do_is_equal_other == 0);

   //equal addresses are shorcircuited
   BOOST_TEST((mr != mr) == false);
   BOOST_TEST(d.do_is_equal_called == false);
   BOOST_TEST(d.do_is_equal_other == 0);

   //unequal addresses are dispatched to is_equal which in turn calls do_is_equal
   derived_from_memory_resource d2(1);
   d.reset();
   d2.reset();
   memory_resource &mr2 = d2;
   BOOST_TEST((mr != mr2) == true);
   BOOST_TEST(d.do_is_equal_called == true);
   BOOST_TEST(d.do_is_equal_other == &d2);
}

int main()
{
   test_destructor();
   test_allocate();
   test_deallocate();
   test_is_equal();
   test_equality_operator();
   test_inequality_operator();
   return ::boost::report_errors();
}