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