1//////////////////////////////////////////////////////////////////////////////
2//
3// (C) Copyright Ion Gaztanaga 2007-2013. 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
11#include <boost/container/detail/dlmalloc.hpp>
12#include <boost/container/allocator.hpp>
13#include <boost/container/vector.hpp>
14#include <boost/container/list.hpp>
15
16using namespace boost::container;
17
18bool basic_test()
19{
20 size_t received = 0;
21 if(!dlmalloc_all_deallocated())
22 return false;
23 void *ptr = dlmalloc_alloc(minbytes: 50, preferred_bytes: 98, received_bytes: &received);
24 if(dlmalloc_size(p: ptr) != received)
25 return false;
26 if(dlmalloc_allocated_memory() != dlmalloc_chunksize(p: ptr))
27 return false;
28
29 if(dlmalloc_all_deallocated())
30 return false;
31
32 dlmalloc_grow(oldmem: ptr, minbytes: received + 20, maxbytes: received + 30, received: &received);
33
34 if(dlmalloc_allocated_memory() != dlmalloc_chunksize(p: ptr))
35 return false;
36
37 if(dlmalloc_size(p: ptr) != received)
38 return false;
39
40 if(!dlmalloc_shrink(oldmem: ptr, minbytes: 100, maxbytes: 140, received: &received, do_commit: 1))
41 return false;
42
43 if(dlmalloc_allocated_memory() != dlmalloc_chunksize(p: ptr))
44 return false;
45
46 if(!dlmalloc_shrink(oldmem: ptr, minbytes: 0, maxbytes: 140, received: &received, do_commit: 1))
47 return false;
48
49 if(dlmalloc_allocated_memory() != dlmalloc_chunksize(p: ptr))
50 return false;
51
52 if(dlmalloc_shrink(oldmem: ptr, minbytes: 0, maxbytes: received/2, received: &received, do_commit: 1))
53 return false;
54
55 if(dlmalloc_allocated_memory() != dlmalloc_chunksize(p: ptr))
56 return false;
57
58 if(dlmalloc_size(p: ptr) != received)
59 return false;
60
61 dlmalloc_free(mem: ptr);
62
63 dlmalloc_malloc_check();
64 if(!dlmalloc_all_deallocated())
65 return false;
66 return true;
67}
68
69bool vector_test()
70{
71 typedef boost::container::vector<int, allocator<int> > Vector;
72 if(!dlmalloc_all_deallocated())
73 return false;
74 {
75 const int NumElem = 1000;
76 Vector v;
77 v.resize(new_size: NumElem);
78 int *orig_buf = &v[0];
79 int *new_buf = &v[0];
80 while(orig_buf == new_buf){
81 Vector::size_type cl = v.capacity() - v.size();
82 while(cl--){
83 v.push_back(x: 0);
84 }
85 v.push_back(x: 0);
86 new_buf = &v[0];
87 }
88 }
89 if(!dlmalloc_all_deallocated())
90 return false;
91 return true;
92}
93
94bool list_test()
95{
96 typedef boost::container::list<int, allocator<int> > List;
97 if(!dlmalloc_all_deallocated())
98 return false;
99 {
100 const int NumElem = 1000;
101 List l;
102 int values[NumElem];
103 l.insert(position: l.end(), first: &values[0], last: &values[NumElem]);
104 }
105 if(!dlmalloc_all_deallocated())
106 return false;
107 return true;
108}
109
110int main()
111{
112 if(!basic_test())
113 return 1;
114 if(!vector_test())
115 return 1;
116 if(!list_test())
117 return 1;
118 return 0;
119}
120

source code of boost/libs/container/test/alloc_basic_test.cpp