--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/genericopenlibs/cppstdlib/stl/test/unit/config_test.cpp Fri Jun 04 16:20:51 2010 +0100
@@ -0,0 +1,97 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#include <new>
+#include <vector>
+
+#include "cppunit/cppunit_proxy.h"
+
+#if defined (_STLP_USE_NAMESPACES)
+using namespace std;
+#endif
+
+//
+// TestCase class
+//
+class ConfigTest : public CPPUNIT_NS::TestCase
+{
+ CPPUNIT_TEST_SUITE(ConfigTest);
+#if !defined (STLPORT)
+ CPPUNIT_IGNORE;
+#endif
+ CPPUNIT_TEST(placement_new_bug);
+ CPPUNIT_TEST(endianess);
+ CPPUNIT_TEST(template_function_partial_ordering);
+ CPPUNIT_TEST_SUITE_END();
+
+ protected:
+ void placement_new_bug();
+ void endianess();
+ void template_function_partial_ordering();
+};
+
+CPPUNIT_TEST_SUITE_REGISTRATION(ConfigTest);
+
+void ConfigTest::placement_new_bug()
+{
+#if defined (STLPORT)
+ int int_val = 1;
+ int *pint;
+ pint = new(&int_val) int();
+ CPPUNIT_ASSERT( pint == &int_val );
+# if defined (_STLP_DEF_CONST_PLCT_NEW_BUG)
+ CPPUNIT_ASSERT( int_val != 0 );
+# else
+ CPPUNIT_ASSERT( int_val == 0 );
+# endif
+#endif
+}
+
+void ConfigTest::endianess()
+{
+#if defined (STLPORT)
+ int val = 0x01020304;
+ char *ptr = (char*)(&val);
+# if defined (_STLP_BIG_ENDIAN)
+ //This test only work if sizeof(int) == 4, this is a known limitation
+ //that will be handle the day we find a compiler for which it is false.
+ CPPUNIT_ASSERT( *ptr == 0x01 ||
+ sizeof(int) > 4 && *ptr == 0x00 );
+# elif defined (_STLP_LITTLE_ENDIAN)
+ CPPUNIT_ASSERT( *ptr == 0x04 );
+# endif
+#endif
+}
+
+void ConfigTest::template_function_partial_ordering()
+{
+#if defined (STLPORT)
+ vector<int> vect1(10, 0);
+ int* pvect1Front = &vect1.front();
+ vector<int> vect2(10, 0);
+ int* pvect2Front = &vect2.front();
+
+ swap(vect1, vect2);
+
+# if defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER) || defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND)
+ CPPUNIT_ASSERT( pvect1Front == &vect2.front() );
+ CPPUNIT_ASSERT( pvect2Front == &vect1.front() );
+# else
+ CPPUNIT_ASSERT( pvect1Front != &vect2.front() );
+ CPPUNIT_ASSERT( pvect2Front != &vect1.front() );
+# endif
+#endif
+}