1e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <list> /* required, to expose allocator */
2e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <stdexcept>
3e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <stdio.h>
4e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
5e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottusing namespace std;
6e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
7e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct BigStruct
8e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
9e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  char _data[4096];
10e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott};
11e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
12e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid bad_alloc_test()
13e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
14e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  typedef allocator<BigStruct> BigStructAllocType;
15e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  BigStructAllocType bigStructAlloc;
16e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
17e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  try {
18e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //Lets try to allocate almost 4096 Go (on most of the platforms) of memory:
19e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    BigStructAllocType::pointer pbigStruct = bigStructAlloc.allocate(1024 * 1024 * 1024);
20e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
21e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    // CPPUNIT_ASSERT( pbigStruct != 0 && "Allocation failed but no exception thrown" );
22e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
23e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch (bad_alloc const&) {
24e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    printf( "Ok\n" );
25e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
26e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch (...) {
27e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //We shouldn't be there:
28e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    // CPPUNIT_ASSERT( false && "Not bad_alloc exception thrown." );
29e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
30e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
31e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
32e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid bad_alloc_test1()
33e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
34e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  try {
35e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    allocator<BigStruct> all;
36e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    BigStruct *bs = all.allocate(1024*1024*1024);
37e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
38e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    // throw bad_alloc();
39e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
40e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch ( bad_alloc const & ) {
41e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    printf( "I am here\n" );
42e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
43e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch ( ... ) {
44e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
45e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
46e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
47e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint main()
48e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
49e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  bad_alloc_test();
50e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if 0
51e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  try {
52e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    throw bad_alloc();
53e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
54e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch ( bad_alloc& ) {
55e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
56e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  catch ( ... ) {
57e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
58e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
59e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return 0;
60e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
61