1c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant//===----------------------------------------------------------------------===//
2c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant//
3c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant//                     The LLVM Compiler Infrastructure
4c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant//
5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open
6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details.
7c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant//
8c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant//===----------------------------------------------------------------------===//
9c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant
10c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// <memory>
11c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant
12c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// allocator:
13c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// pointer allocate(size_type n, allocator<void>::const_pointer hint=0);
14c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant
15c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant#include <memory>
16c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant#include <cassert>
17c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant
1806086258d3d8c48a916ec51c33e1ad8f46821b81Dan Albert#include "count_new.hpp"
19c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant
20c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnantint A_constructed = 0;
21c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant
22c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnantstruct A
23c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant{
24c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant    int data;
25c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant    A() {++A_constructed;}
26c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant    A(const A&) {++A_constructed;}
27c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant    ~A() {--A_constructed;}
28c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant};
29c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant
30c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnantint main()
31c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant{
32c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant    std::allocator<A> a;
3306086258d3d8c48a916ec51c33e1ad8f46821b81Dan Albert    assert(globalMemCounter.checkOutstandingNewEq(0));
34c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant    assert(A_constructed == 0);
3506086258d3d8c48a916ec51c33e1ad8f46821b81Dan Albert    globalMemCounter.last_new_size = 0;
36c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant    A* ap = a.allocate(3);
3706086258d3d8c48a916ec51c33e1ad8f46821b81Dan Albert    assert(globalMemCounter.checkOutstandingNewEq(1));
3806086258d3d8c48a916ec51c33e1ad8f46821b81Dan Albert    assert(globalMemCounter.checkLastNewSizeEq(3 * sizeof(int)));
39c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant    assert(A_constructed == 0);
40c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant    a.deallocate(ap, 3);
4106086258d3d8c48a916ec51c33e1ad8f46821b81Dan Albert    assert(globalMemCounter.checkOutstandingNewEq(0));
42c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant    assert(A_constructed == 0);
43c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant
4406086258d3d8c48a916ec51c33e1ad8f46821b81Dan Albert    globalMemCounter.last_new_size = 0;
45c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant    A* ap2 = a.allocate(3, (const void*)5);
4606086258d3d8c48a916ec51c33e1ad8f46821b81Dan Albert    assert(globalMemCounter.checkOutstandingNewEq(1));
4706086258d3d8c48a916ec51c33e1ad8f46821b81Dan Albert    assert(globalMemCounter.checkLastNewSizeEq(3 * sizeof(int)));
48c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant    assert(A_constructed == 0);
49c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant    a.deallocate(ap2, 3);
5006086258d3d8c48a916ec51c33e1ad8f46821b81Dan Albert    assert(globalMemCounter.checkOutstandingNewEq(0));
51c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant    assert(A_constructed == 0);
52c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant}
53