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