diff -r 000000000000 -r e4d67989cc36 genericopenlibs/cppstdlib/stl/test/eh/test_algobase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/genericopenlibs/cppstdlib/stl/test/eh/test_algobase.cpp Tue Feb 02 02:01:42 2010 +0200 @@ -0,0 +1,98 @@ +/*********************************************************************************** + test_algobase.cpp + + * Copyright (c) 1997 + * Mark of the Unicorn, Inc. + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Mark of the Unicorn makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + +***********************************************************************************/ + +# include "Prefix.h" +# if defined (EH_NEW_HEADERS) +# ifdef __SUNPRO_CC +# include +# endif +#include +# else +#include +# endif +#include "Tests.h" +#include "LeakCheck.h" +#include "TestClass.h" + +// EH_USE_STD + +enum { kBufferSize = 100 }; + +struct test_uninitialized_copy +{ + test_uninitialized_copy() + : stuff( new TestClass[kBufferSize] ), end_of_stuff(stuff + kBufferSize) { + gTestController.SetCurrentTestName("uninitialized_copy()"); + } + + ~test_uninitialized_copy() { delete[] stuff; } + + void operator()( TestClass* buffer ) const + { + EH_STD::uninitialized_copy((TestClass*)stuff, (TestClass*)end_of_stuff, buffer ); + EH_ASSERT( EH_STD::equal( (TestClass*)stuff, (TestClass*)end_of_stuff, buffer ) ); + stl_destroy( buffer, buffer+kBufferSize ); + } + +private: + TestClass * stuff; + TestClass * end_of_stuff; +}; + +struct test_uninitialized_fill +{ + test_uninitialized_fill() { + gTestController.SetCurrentTestName("uninitialized_fill()"); + } + + void operator()( TestClass* buffer ) const + { + TestClass* buf_end = buffer + kBufferSize; + EH_STD::uninitialized_fill( buffer, buf_end, testValue ); + for ( EH_CSTD::size_t i = 0; i < kBufferSize; i++ ) + EH_ASSERT( buffer[i] == testValue ); + stl_destroy( buffer, buf_end ); + } +private: + TestClass testValue; +}; + +struct test_uninitialized_fill_n +{ + test_uninitialized_fill_n() { + gTestController.SetCurrentTestName("uninitialized_fill_n()"); + } + void operator()( TestClass* buffer ) const + { + TestClass* end = buffer + kBufferSize; + EH_STD::uninitialized_fill_n( buffer, (EH_CSTD::size_t)kBufferSize, testValue ); + for ( EH_CSTD::size_t i = 0; i < kBufferSize; i++ ) + EH_ASSERT( buffer[i] == testValue ); + stl_destroy( buffer, end ); + } +private: + TestClass testValue; +}; + +void test_algobase() +{ + // force alignment + double arr[ sizeof(TestClass) * kBufferSize ]; + TestClass* c = (TestClass*)arr; + WeakCheck( c, test_uninitialized_copy() ); + WeakCheck( c, test_uninitialized_fill() ); + WeakCheck( c, test_uninitialized_fill_n() ); +}