1e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/*********************************************************************************** 2e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott test_algobase.cpp 3e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 4e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Copyright (c) 1997 5e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Mark of the Unicorn, Inc. 6e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * 7e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Permission to use, copy, modify, distribute and sell this software 8e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * and its documentation for any purpose is hereby granted without fee, 9e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * provided that the above copyright notice appear in all copies and 10e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * that both that copyright notice and this permission notice appear 11e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * in supporting documentation. Mark of the Unicorn makes no 12e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * representations about the suitability of this software for any 13e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * purpose. It is provided "as is" without express or implied warranty. 14e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 15e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott***********************************************************************************/ 16e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 17e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include "Prefix.h" 18e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (EH_NEW_HEADERS) 19e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# ifdef __SUNPRO_CC 20e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include <stdio.h> 21e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 22e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <algorithm> 23e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# else 24e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <algo.h> 25e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 26e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "Tests.h" 27e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "LeakCheck.h" 28e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "TestClass.h" 29e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 30e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// EH_USE_STD 31e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 32e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottenum { kBufferSize = 100 }; 33e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 34e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct test_uninitialized_copy 35e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 36e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott test_uninitialized_copy() 37e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott : stuff( new TestClass[kBufferSize] ), end_of_stuff(stuff + kBufferSize) { 38e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott gTestController.SetCurrentTestName("uninitialized_copy()"); 39e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 40e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 41e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ~test_uninitialized_copy() { delete[] stuff; } 42e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 43e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void operator()( TestClass* buffer ) const 44e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 45e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott EH_STD::uninitialized_copy((TestClass*)stuff, (TestClass*)end_of_stuff, buffer ); 46e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott EH_ASSERT( EH_STD::equal( (TestClass*)stuff, (TestClass*)end_of_stuff, buffer ) ); 47e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott stl_destroy( buffer, buffer+kBufferSize ); 48e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 49e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 50e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottprivate: 51e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott TestClass * stuff; 52e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott TestClass * end_of_stuff; 53e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}; 54e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 55e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct test_uninitialized_fill 56e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 57e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott test_uninitialized_fill() { 58e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott gTestController.SetCurrentTestName("uninitialized_fill()"); 59e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 60e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 61e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void operator()( TestClass* buffer ) const 62e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 63e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott TestClass* buf_end = buffer + kBufferSize; 64e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott EH_STD::uninitialized_fill( buffer, buf_end, testValue ); 65e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott for ( EH_CSTD::size_t i = 0; i < kBufferSize; i++ ) 66e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott EH_ASSERT( buffer[i] == testValue ); 67e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott stl_destroy( buffer, buf_end ); 68e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 69e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottprivate: 70e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott TestClass testValue; 71e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}; 72e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 73e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct test_uninitialized_fill_n 74e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 75e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott test_uninitialized_fill_n() { 76e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott gTestController.SetCurrentTestName("uninitialized_fill_n()"); 77e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 78e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void operator()( TestClass* buffer ) const 79e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 80e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott TestClass* end = buffer + kBufferSize; 81e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott EH_STD::uninitialized_fill_n( buffer, (EH_CSTD::size_t)kBufferSize, testValue ); 82e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott for ( EH_CSTD::size_t i = 0; i < kBufferSize; i++ ) 83e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott EH_ASSERT( buffer[i] == testValue ); 84e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott stl_destroy( buffer, end ); 85e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 86e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottprivate: 87e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott TestClass testValue; 88e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}; 89e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 90e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid test_algobase() 91e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 92e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // force alignment 93e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott double arr[ sizeof(TestClass) * kBufferSize ]; 94e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott TestClass* c = (TestClass*)arr; 95e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott WeakCheck( c, test_uninitialized_copy() ); 96e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott WeakCheck( c, test_uninitialized_fill() ); 97e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott WeakCheck( c, test_uninitialized_fill_n() ); 98e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 99