genericopenlibs/cppstdlib/stl/test/eh/test_algobase.cpp
changeset 0 e4d67989cc36
--- /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() );
+}