--- /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 <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() );
+}