| /*********************************************************************************** |
| 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 <stdio.h> |
| # endif |
| #include <algorithm> |
| # else |
| #include <algo.h> |
| # 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() ); |
| } |