1// 2001-06-14  Benjamin Kosnik  <bkoz@redhat.com>
2
3// Copyright (C) 2001-2015 Free Software Foundation, Inc.
4//
5// This file is part of the GNU ISO C++ Library.  This library is free
6// software; you can redistribute it and/or modify it under the
7// terms of the GNU General Public License as published by the
8// Free Software Foundation; either version 3, or (at your option)
9// any later version.
10
11// This library is distributed in the hope that it will be useful,
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14// GNU General Public License for more details.
15
16// You should have received a copy of the GNU General Public License along
17// with this library; see the file COPYING3.  If not see
18// <http://www.gnu.org/licenses/>.
19
20// 20.4.1.1 allocator members
21
22#include <memory>
23#include <stdexcept>
24#include <cstdlib>
25#include <testsuite_hooks.h>
26
27struct gnu { };
28
29bool check_new = false;
30bool check_delete = false;
31
32void*
33operator new(std::size_t n) throw(std::bad_alloc)
34{
35  check_new = true;
36  return std::malloc(n);
37}
38
39void operator delete(void *v) throw()
40{
41  check_delete = true;
42  return std::free(v);
43}
44
45void test01()
46{
47  bool test __attribute__((unused)) = true;
48  std::allocator<gnu> obj;
49
50  // NB: These should work for various size allocation and
51  // deallocations.  Currently, they only work as expected for sizes >
52  // _MAX_BYTES as defined in stl_alloc.h, which happes to be 128.
53  gnu* pobj = obj.allocate(256);
54  VERIFY( check_new );
55
56  obj.deallocate(pobj, 256);
57  VERIFY( check_delete );
58}
59
60int main()
61{
62  test01();
63  return 0;
64}
65
66