]> git.saurik.com Git - wxWidgets.git/commitdiff
moved arrays tests to testsuite (patch 927475)
authorVáclav Slavík <vslavik@fastmail.fm>
Thu, 1 Apr 2004 21:10:33 +0000 (21:10 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Thu, 1 Apr 2004 21:10:33 +0000 (21:10 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@26574 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

samples/console/console.cpp
tests/Makefile.in
tests/arrays/arrays.cpp [new file with mode: 0644]
tests/makefile.bcc
tests/makefile.gcc
tests/makefile.vc
tests/makefile.wat
tests/test.bkl
tests/test.dsp

index 668093ddbe9937e1fb593fabed3cbb64986f850f..01ce277708fbbeb3e9a4dfa3ea2ca96ae5a1a545 100644 (file)
@@ -51,7 +51,6 @@
 
 #if TEST_ALL
 
-    #define TEST_ARRAYS
     #define TEST_CHARSET
     #define TEST_CMDLINE
     #define TEST_DATETIME
 // test class for container objects
 // ----------------------------------------------------------------------------
 
-#if defined(TEST_ARRAYS) || defined(TEST_LIST)
+#if defined(TEST_LIST)
 
 class Bar // Foo is already taken in the hash test
 {
@@ -135,7 +134,7 @@ private:
 
 size_t Bar::ms_bars = 0;
 
-#endif // defined(TEST_ARRAYS) || defined(TEST_LIST)
+#endif // defined(TEST_LIST)
 
 // ============================================================================
 // implementation
@@ -6221,214 +6220,6 @@ static void TestSemaphore()
 
 #endif // TEST_THREADS
 
-// ----------------------------------------------------------------------------
-// arrays
-// ----------------------------------------------------------------------------
-
-#ifdef TEST_ARRAYS
-
-#include "wx/dynarray.h"
-
-typedef unsigned short ushort;
-
-#define DefineCompare(name, T)                                                \
-                                                                              \
-int wxCMPFUNC_CONV name ## CompareValues(T first, T second)                   \
-{                                                                             \
-    return first - second;                                                    \
-}                                                                             \
-                                                                              \
-int wxCMPFUNC_CONV name ## Compare(T* first, T* second)                       \
-{                                                                             \
-    return *first - *second;                                                  \
-}                                                                             \
-                                                                              \
-int wxCMPFUNC_CONV name ## RevCompare(T* first, T* second)                    \
-{                                                                             \
-    return *second - *first;                                                  \
-}                                                                             \
-
-DefineCompare(UShort, ushort);
-DefineCompare(Int, int);
-
-// test compilation of all macros
-WX_DEFINE_ARRAY_SHORT(ushort, wxArrayUShort);
-WX_DEFINE_SORTED_ARRAY_SHORT(ushort, wxSortedArrayUShortNoCmp);
-WX_DEFINE_SORTED_ARRAY_CMP_SHORT(ushort, UShortCompareValues, wxSortedArrayUShort);
-WX_DEFINE_SORTED_ARRAY_CMP_INT(int, IntCompareValues, wxSortedArrayInt);
-
-WX_DECLARE_OBJARRAY(Bar, ArrayBars);
-#include "wx/arrimpl.cpp"
-WX_DEFINE_OBJARRAY(ArrayBars);
-
-static void PrintArray(const wxChar* name, const wxArrayString& array)
-{
-    wxPrintf(_T("Dump of the array '%s'\n"), name);
-
-    size_t nCount = array.GetCount();
-    for ( size_t n = 0; n < nCount; n++ )
-    {
-        wxPrintf(_T("\t%s[%u] = '%s'\n"), name, n, array[n].c_str());
-    }
-}
-
-static void PrintArray(const wxChar* name, const wxSortedArrayString& array)
-{
-    wxPrintf(_T("Dump of the array '%s'\n"), name);
-
-    size_t nCount = array.GetCount();
-    for ( size_t n = 0; n < nCount; n++ )
-    {
-        wxPrintf(_T("\t%s[%u] = '%s'\n"), name, n, array[n].c_str());
-    }
-}
-
-int wxCMPFUNC_CONV StringLenCompare(const wxString& first,
-                                    const wxString& second)
-{
-    return first.length() - second.length();
-}
-
-#define TestArrayOf(name)                                                     \
-                                                                              \
-static void PrintArray(const wxChar* name, const wxSortedArray##name & array) \
-{                                                                             \
-    wxPrintf(_T("Dump of the array '%s'\n"), name);                           \
-                                                                              \
-    size_t nCount = array.GetCount();                                         \
-    for ( size_t n = 0; n < nCount; n++ )                                     \
-    {                                                                         \
-        wxPrintf(_T("\t%s[%u] = %d\n"), name, n, array[n]);                   \
-    }                                                                         \
-}                                                                             \
-                                                                              \
-static void PrintArray(const wxChar* name, const wxArray##name & array)       \
-{                                                                             \
-    wxPrintf(_T("Dump of the array '%s'\n"), name);                           \
-                                                                              \
-    size_t nCount = array.GetCount();                                         \
-    for ( size_t n = 0; n < nCount; n++ )                                     \
-    {                                                                         \
-        wxPrintf(_T("\t%s[%u] = %d\n"), name, n, array[n]);                   \
-    }                                                                         \
-}                                                                             \
-                                                                              \
-static void TestArrayOf ## name ## s()                                        \
-{                                                                             \
-    wxPrintf(_T("*** Testing wxArray%s ***\n"), #name);                       \
-                                                                              \
-    wxArray##name a;                                                          \
-    a.Add(1);                                                                 \
-    a.Add(17,2);                                                              \
-    a.Add(5,3);                                                               \
-    a.Add(3,4);                                                               \
-                                                                              \
-    wxPuts(_T("Initially:"));                                                 \
-    PrintArray(_T("a"), a);                                                   \
-                                                                              \
-    wxPuts(_T("After sort:"));                                                \
-    a.Sort(name ## Compare);                                                  \
-    PrintArray(_T("a"), a);                                                   \
-                                                                              \
-    wxPuts(_T("After reverse sort:"));                                        \
-    a.Sort(name ## RevCompare);                                               \
-    PrintArray(_T("a"), a);                                                   \
-                                                                              \
-    wxSortedArray##name b;                                                    \
-    b.Add(1);                                                                 \
-    b.Add(17);                                                                \
-    b.Add(5);                                                                 \
-    b.Add(3);                                                                 \
-                                                                              \
-    wxPuts(_T("Sorted array initially:"));                                    \
-    PrintArray(_T("b"), b);                                                       \
-}
-
-TestArrayOf(UShort);
-TestArrayOf(Int);
-
-static void TestStlArray()
-{
-    wxPuts(_T("*** Testing std::vector operations ***\n"));
-
-    {
-        wxArrayInt list1;
-        wxArrayInt::iterator it, en;
-        wxArrayInt::reverse_iterator rit, ren;
-        int i;
-        for ( i = 0; i < 5; ++i )
-            list1.push_back(i);
-
-        for ( it = list1.begin(), en = list1.end(), i = 0;
-              it != en; ++it, ++i )
-            if ( *it != i )
-                wxPuts(_T("Error in iterator\n"));
-
-        for ( rit = list1.rbegin(), ren = list1.rend(), i = 4;
-              rit != ren; ++rit, --i )
-            if ( *rit != i )
-                wxPuts(_T("Error in reverse_iterator\n"));
-
-        if ( *list1.rbegin() != *(list1.end()-1) ||
-             *list1.begin() != *(list1.rend()-1) )
-            wxPuts(_T("Error in iterator/reverse_iterator\n"));
-
-        it = list1.begin()+1;
-        rit = list1.rbegin()+1;
-        if ( *list1.begin() != *(it-1) ||
-             *list1.rbegin() != *(rit-1) )
-            wxPuts(_T("Error in iterator/reverse_iterator\n"));
-
-        if ( list1.front() != 0 || list1.back() != 4 )
-            wxPuts(_T("Error in front()/back()\n"));
-
-        list1.erase(list1.begin());
-        list1.erase(list1.end()-1);
-
-        for ( it = list1.begin(), en = list1.end(), i = 1;
-              it != en; ++it, ++i )
-            if ( *it != i )
-                wxPuts(_T("Error in erase()\n"));
-    }
-
-    wxPuts(_T("*** Testing std::vector operations finished ***\n"));
-}
-
-static void TestArrayOfObjects()
-{
-    wxPuts(_T("*** Testing wxObjArray ***\n"));
-
-    {
-        ArrayBars bars;
-        Bar bar(_T("second bar (two copies!)"));
-
-        wxPrintf(_T("Initially: %u objects in the array, %u objects total.\n"),
-               bars.GetCount(), Bar::GetNumber());
-
-        bars.Add(new Bar(_T("first bar")));
-        bars.Add(bar,2);
-
-        wxPrintf(_T("Now: %u objects in the array, %u objects total.\n"),
-               bars.GetCount(), Bar::GetNumber());
-
-        bars.RemoveAt(1, bars.GetCount() - 1);
-
-        wxPrintf(_T("After removing all but first element: %u objects in the ")
-                 _T("array, %u objects total.\n"),
-               bars.GetCount(), Bar::GetNumber());
-
-        bars.Empty();
-
-        wxPrintf(_T("After Empty(): %u objects in the array, %u objects total.\n"),
-               bars.GetCount(), Bar::GetNumber());
-    }
-
-    wxPrintf(_T("Finally: no more objects in the array, %u objects total.\n"),
-           Bar::GetNumber());
-}
-
-#endif // TEST_ARRAYS
-
 // ----------------------------------------------------------------------------
 // strings
 // ----------------------------------------------------------------------------
@@ -7276,69 +7067,6 @@ int main(int argc, char **argv)
     TestStdString();
 #endif // TEST_STRINGS
 
-#ifdef TEST_ARRAYS
-    #if TEST_ALL
-        wxArrayString a1;
-        a1.Add(_T("tiger"));
-        a1.Add(_T("cat"));
-        a1.Add(_T("lion"), 3);
-        a1.Add(_T("dog"));
-        a1.Add(_T("human"));
-        a1.Add(_T("ape"));
-
-        wxPuts(_T("*** Initially:"));
-
-        PrintArray(_T("a1"), a1);
-
-        wxArrayString a2(a1);
-        PrintArray(_T("a2"), a2);
-
-        #if !wxUSE_STL
-        wxSortedArrayString a3(a1);
-        #else
-        wxSortedArrayString a3;
-        for (wxArrayString::iterator it = a1.begin(), en = a1.end();
-             it != en; ++it)
-            a3.Add(*it);
-        #endif
-        PrintArray(_T("a3"), a3);
-
-        wxPuts(_T("*** After deleting three strings from a1"));
-        a1.RemoveAt(2,3);
-
-        PrintArray(_T("a1"), a1);
-        PrintArray(_T("a2"), a2);
-        PrintArray(_T("a3"), a3);
-
-        #if !wxUSE_STL
-        wxPuts(_T("*** After reassigning a1 to a2 and a3"));
-        a3 = a2 = a1;
-        PrintArray(_T("a2"), a2);
-        PrintArray(_T("a3"), a3);
-        #endif
-
-        wxPuts(_T("*** After sorting a1"));
-        a1.Sort(false);
-        PrintArray(_T("a1"), a1);
-
-        wxPuts(_T("*** After sorting a1 in reverse order"));
-        a1.Sort(true);
-        PrintArray(_T("a1"), a1);
-
-        #if !wxUSE_STL
-        wxPuts(_T("*** After sorting a1 by the string length"));
-        a1.Sort(&StringLenCompare);
-        PrintArray(_T("a1"), a1);
-        #endif
-
-        TestArrayOfObjects();
-        TestArrayOfUShorts();
-    #endif
-
-    TestArrayOfInts();
-    TestStlArray();
-#endif // TEST_ARRAYS
-
 #ifdef TEST_DIR
     #if TEST_ALL
         TestDirExists();
index 314755b0ec642815d9b6f6631d23daa8113f2db2..452964321478555a84d42b935129acc4ca67fb02 100644 (file)
@@ -40,7 +40,8 @@ TEST_OBJECTS =  \
        test_main.o \
        test_formatconverter.o \
        test_regex.o \
-       test_filesys.o
+       test_filesys.o \
+       test_arrays.o
 
 ### Conditionally set variables: ###
 
@@ -118,6 +119,9 @@ test_regex.o: $(srcdir)/regex/regex.cpp
 test_filesys.o: $(srcdir)/filesys/filesys.cpp
        $(CXXC) -c -o $@ $(TEST_CXXFLAGS) $<
 
+test_arrays.o: $(srcdir)/arrays/arrays.cpp
+       $(CXXC) -c -o $@ $(TEST_CXXFLAGS) $<
+
 
 # Include dependency info, if present:
 @IF_GNU_MAKE@-include .deps/*.d
diff --git a/tests/arrays/arrays.cpp b/tests/arrays/arrays.cpp
new file mode 100644 (file)
index 0000000..f9ef9df
--- /dev/null
@@ -0,0 +1,380 @@
+///////////////////////////////////////////////////////////////////////////////
+// Name:        tests/arrays/arrays.cpp
+// Purpose:     wxArray unit test
+// Author:      Wlodzimierz ABX Skiba
+// Created:     2004-04-01
+// RCS-ID:      $Id$
+// Copyright:   (c) 2004 Wlodzimierz Skiba
+///////////////////////////////////////////////////////////////////////////////
+
+// ----------------------------------------------------------------------------
+// headers
+// ----------------------------------------------------------------------------
+
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+    #pragma hdrstop
+#endif
+
+#ifndef WX_PRECOMP
+    #include "wx/wx.h"
+#endif // WX_PRECOMP
+
+#include "wx/dynarray.h"
+
+#include "wx/cppunit.h"
+
+// ----------------------------------------------------------------------------
+// helpers for testing values and sizes
+// ----------------------------------------------------------------------------
+
+#define COMPARE_VALUE( array , index , value ) ( array.Item( index ) == value )
+
+#define COMPARE_2_VALUES( array , p0 , p1 ) \
+    COMPARE_VALUE( array , 0 , p0 ) && \
+    COMPARE_VALUE( array , 1 , p1 )
+
+#define COMPARE_3_VALUES( array , p0 , p1 , p2 ) \
+    COMPARE_2_VALUES( array , p0 , p1 ) && \
+    COMPARE_VALUE( array , 2 , p2 )
+
+#define COMPARE_4_VALUES( array , p0 , p1 , p2 , p3 ) \
+    COMPARE_3_VALUES( array , p0 , p1 , p2 ) && \
+    COMPARE_VALUE( array , 3 , p3 )
+
+#define COMPARE_5_VALUES( array , p0 , p1 , p2 , p3 , p4 ) \
+    COMPARE_4_VALUES( array , p0 , p1 , p2 , p3 ) && \
+    COMPARE_VALUE( array , 4 , p4 )
+
+#define COMPARE_6_VALUES( array , p0 , p1 , p2 , p3 , p4 , p5 ) \
+    COMPARE_5_VALUES( array , p0 , p1 , p2 , p3 , p4 ) && \
+    COMPARE_VALUE( array , 5 , p5 )
+
+#define COMPARE_7_VALUES( array , p0 , p1 , p2 , p3 , p4 , p5 , p6 ) \
+    COMPARE_6_VALUES( array , p0 , p1 , p2 , p3 , p4 , p5 ) && \
+    COMPARE_VALUE( array , 6 , p6 )
+
+#define COMPARE_8_VALUES( array , p0 , p1 , p2 , p3 , p4 , p5 , p6 , p7 ) \
+    COMPARE_7_VALUES( array , p0 , p1 , p2 , p3 , p4 , p5 , p6 ) && \
+    COMPARE_VALUE( array , 7 , p7 )
+
+#define COMPARE_9_VALUES( array , p0 , p1 , p2 , p3 , p4 , p5 , p6 , p7 , p8 ) \
+    COMPARE_8_VALUES( array , p0 , p1 , p2 , p3 , p4 , p5 , p6 , p7 ) && \
+    COMPARE_VALUE( array , 8 , p8 )
+
+#define COMPARE_10_VALUES( array , p0 , p1 , p2 , p3 , p4 , p5 , p6 , p7 , p8 , p9 ) \
+    COMPARE_9_VALUES( array , p0 , p1 , p2 , p3 , p4 , p5 , p6 , p7 , p8 ) && \
+    COMPARE_VALUE( array , 9 , p9 )
+
+#define COMPARE_COUNT( array , n ) \
+    ( array.GetCount() == n ) && \
+    ( array.Last() == array.Item( n - 1 ) )
+
+// ----------------------------------------------------------------------------
+// helpers for testing wxObjArray
+// ----------------------------------------------------------------------------
+
+class Bar
+{
+public:
+    Bar(const wxString& name) : m_name(name) { ms_bars++; }
+    Bar(const Bar& bar) : m_name(bar.m_name) { ms_bars++; }
+   ~Bar() { ms_bars--; }
+
+   static size_t GetNumber() { return ms_bars; }
+
+   const wxChar *GetName() const { return m_name; }
+
+private:
+   wxString m_name;
+
+   static size_t ms_bars;
+};
+
+size_t Bar::ms_bars = 0;
+
+WX_DECLARE_OBJARRAY(Bar, ArrayBars);
+#include "wx/arrimpl.cpp"
+WX_DEFINE_OBJARRAY(ArrayBars);
+
+// ----------------------------------------------------------------------------
+// helpers for sorting arrays and comparing items
+// ----------------------------------------------------------------------------
+
+int wxCMPFUNC_CONV StringLenCompare(const wxString& first,
+                                    const wxString& second)
+{
+    return first.length() - second.length();
+}
+
+#define DEFINE_COMPARE(name, T)                                               \
+                                                                              \
+int wxCMPFUNC_CONV name ## CompareValues(T first, T second)                   \
+{                                                                             \
+    return first - second;                                                    \
+}                                                                             \
+                                                                              \
+int wxCMPFUNC_CONV name ## Compare(T* first, T* second)                       \
+{                                                                             \
+    return *first - *second;                                                  \
+}                                                                             \
+                                                                              \
+int wxCMPFUNC_CONV name ## RevCompare(T* first, T* second)                    \
+{                                                                             \
+    return *second - *first;                                                  \
+}                                                                             \
+
+typedef unsigned short ushort;
+
+DEFINE_COMPARE(UShort, ushort);
+DEFINE_COMPARE(Int, int);
+
+WX_DEFINE_ARRAY_SHORT(ushort, wxArrayUShort);
+WX_DEFINE_SORTED_ARRAY_SHORT(ushort, wxSortedArrayUShortNoCmp);
+WX_DEFINE_SORTED_ARRAY_CMP_SHORT(ushort, UShortCompareValues, wxSortedArrayUShort);
+WX_DEFINE_SORTED_ARRAY_CMP_INT(int, IntCompareValues, wxSortedArrayInt);
+
+// ----------------------------------------------------------------------------
+// test class
+// ----------------------------------------------------------------------------
+
+class ArraysTestCase : public CppUnit::TestCase
+{
+public:
+    ArraysTestCase() { }
+
+private:
+    CPPUNIT_TEST_SUITE( ArraysTestCase );
+        CPPUNIT_TEST( wxStringArrayTest );
+        CPPUNIT_TEST( wxObjArrayTest );
+        CPPUNIT_TEST( wxArrayUShortTest );
+        CPPUNIT_TEST( wxArrayIntTest );
+        CPPUNIT_TEST( TestSTL );
+    CPPUNIT_TEST_SUITE_END();
+
+    void wxStringArrayTest();
+    void wxObjArrayTest();
+    void wxArrayUShortTest();
+    void wxArrayIntTest();
+    void TestSTL();
+
+    DECLARE_NO_COPY_CLASS(ArraysTestCase)
+};
+
+// register in the unnamed registry so that these tests are run by default
+CPPUNIT_TEST_SUITE_REGISTRATION( ArraysTestCase );
+
+// also include in it's own registry so that these tests can be run alone
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( ArraysTestCase, "ArraysTestCase" );
+
+void ArraysTestCase::wxStringArrayTest()
+{
+    wxArrayString a1;
+    a1.Add(_T("thermit"));
+    a1.Add(_T("condor"));
+    a1.Add(_T("lion"), 3);
+    a1.Add(_T("dog"));
+    a1.Add(_T("human"));
+    a1.Add(_T("alligator"));
+
+    CPPUNIT_ASSERT( COMPARE_8_VALUES( a1 , _T("thermit") ,
+                                           _T("condor") ,
+                                           _T("lion") ,
+                                           _T("lion") ,
+                                           _T("lion") ,
+                                           _T("dog") ,
+                                           _T("human") ,
+                                           _T("alligator") ) );
+    CPPUNIT_ASSERT( COMPARE_COUNT( a1 , 8 ) );
+
+    wxArrayString a2(a1);
+
+    CPPUNIT_ASSERT( COMPARE_8_VALUES( a2 , _T("thermit") , 
+                                           _T("condor") ,
+                                           _T("lion") ,
+                                           _T("lion") ,
+                                           _T("lion") ,
+                                           _T("dog") ,
+                                           _T("human") ,
+                                           _T("alligator") ) );
+    CPPUNIT_ASSERT( COMPARE_COUNT( a2 , 8 ) );
+
+    wxSortedArrayString a3(a1);
+
+    CPPUNIT_ASSERT( COMPARE_8_VALUES( a3 , _T("alligator") , 
+                                           _T("condor") ,
+                                           _T("dog") ,
+                                           _T("human") ,
+                                           _T("lion") ,
+                                           _T("lion") ,
+                                           _T("lion") ,
+                                           _T("thermit") ) );
+    CPPUNIT_ASSERT( COMPARE_COUNT( a3 , 8 ) );
+
+    wxSortedArrayString a4;
+    for (wxArrayString::iterator it = a1.begin(), en = a1.end(); it != en; ++it)
+        a4.Add(*it);
+
+    CPPUNIT_ASSERT( COMPARE_8_VALUES( a4 , _T("alligator") , 
+                                           _T("condor") ,
+                                           _T("dog") ,
+                                           _T("human") ,
+                                           _T("lion") ,
+                                           _T("lion") ,
+                                           _T("lion") ,
+                                           _T("thermit") ) );
+    CPPUNIT_ASSERT( COMPARE_COUNT( a4 , 8 ) );
+
+    a1.RemoveAt(2,3);
+
+    CPPUNIT_ASSERT( COMPARE_5_VALUES( a1 , _T("thermit") ,
+                                           _T("condor") ,
+                                           _T("dog") ,
+                                           _T("human") ,
+                                           _T("alligator") ) );
+    CPPUNIT_ASSERT( COMPARE_COUNT( a1 , 5 ) );
+
+    a2 = a1;
+
+    CPPUNIT_ASSERT( COMPARE_5_VALUES( a2 , _T("thermit") ,
+                                           _T("condor") ,
+                                           _T("dog") ,
+                                           _T("human") ,
+                                           _T("alligator") ) );
+    CPPUNIT_ASSERT( COMPARE_COUNT( a2 , 5 ) );
+
+    a1.Sort(false);
+
+    CPPUNIT_ASSERT( COMPARE_5_VALUES( a1 , _T("alligator") ,
+                                           _T("condor") ,
+                                           _T("dog") ,
+                                           _T("human") ,
+                                           _T("thermit") ) );
+    CPPUNIT_ASSERT( COMPARE_COUNT( a1 , 5 ) );
+
+    a1.Sort(true);
+
+    CPPUNIT_ASSERT( COMPARE_5_VALUES( a1 , _T("thermit") ,
+                                           _T("human") ,
+                                           _T("dog") ,
+                                           _T("condor") ,
+                                           _T("alligator") ) );
+    CPPUNIT_ASSERT( COMPARE_COUNT( a1 , 5 ) );
+
+    a1.Sort(&StringLenCompare);
+
+    CPPUNIT_ASSERT( COMPARE_5_VALUES( a1 , _T("dog") ,
+                                           _T("human") ,
+                                           _T("condor") ,
+                                           _T("thermit") ,
+                                           _T("alligator") ) );
+    CPPUNIT_ASSERT( COMPARE_COUNT( a1 , 5 ) );
+}
+
+void ArraysTestCase::wxObjArrayTest()
+{
+    {
+        ArrayBars bars;
+        Bar bar(_T("first bar in general, second bar in array (two copies!)"));
+
+        CPPUNIT_ASSERT( bars.GetCount() == 0 );
+        CPPUNIT_ASSERT( Bar::GetNumber() == 1 );
+
+        bars.Add(new Bar(_T("first bar in array")));
+        bars.Add(bar,2);
+
+        CPPUNIT_ASSERT( bars.GetCount() == 3 );
+        CPPUNIT_ASSERT( Bar::GetNumber() == 4 );
+
+        bars.RemoveAt(1, bars.GetCount() - 1);
+
+        CPPUNIT_ASSERT( bars.GetCount() == 1 );
+        CPPUNIT_ASSERT( Bar::GetNumber() == 2 );
+
+        bars.Empty();
+
+        CPPUNIT_ASSERT( bars.GetCount() == 0 );
+        CPPUNIT_ASSERT( Bar::GetNumber() == 1 );
+    }
+    CPPUNIT_ASSERT( Bar::GetNumber() == 0 );
+}
+
+#define TestArrayOf(name)                                                     \
+                                                                              \
+void ArraysTestCase::wxArray ## name ## Test()                                \
+{                                                                             \
+    wxArray##name a;                                                          \
+    a.Add(1);                                                                 \
+    a.Add(17,2);                                                              \
+    a.Add(5,3);                                                               \
+    a.Add(3,4);                                                               \
+                                                                              \
+    CPPUNIT_ASSERT( COMPARE_10_VALUES(a,1,17,17,5,5,5,3,3,3,3) );             \
+    CPPUNIT_ASSERT( COMPARE_COUNT( a , 10 ) );                                \
+                                                                              \
+    a.Sort(name ## Compare);                                                  \
+                                                                              \
+    CPPUNIT_ASSERT( COMPARE_10_VALUES(a,1,3,3,3,3,5,5,5,17,17) );             \
+    CPPUNIT_ASSERT( COMPARE_COUNT( a , 10 ) );                                \
+                                                                              \
+    a.Sort(name ## RevCompare);                                               \
+                                                                              \
+    CPPUNIT_ASSERT( COMPARE_10_VALUES(a,17,17,5,5,5,3,3,3,3,1) );             \
+    CPPUNIT_ASSERT( COMPARE_COUNT( a , 10 ) );                                \
+                                                                              \
+    wxSortedArray##name b;                                                    \
+                                                                              \
+    b.Add(1);                                                                 \
+    b.Add(17);                                                                \
+    b.Add(5);                                                                 \
+    b.Add(3);                                                                 \
+                                                                              \
+    CPPUNIT_ASSERT( COMPARE_4_VALUES(b,1,3,5,17) );                           \
+    CPPUNIT_ASSERT( COMPARE_COUNT( b , 4 ) );                                 \
+}
+
+TestArrayOf(UShort);
+
+TestArrayOf(Int);
+
+void ArraysTestCase::TestSTL()
+{
+    wxArrayInt list1;
+    wxArrayInt::iterator it, en;
+    wxArrayInt::reverse_iterator rit, ren;
+    int i;
+    for ( i = 0; i < 5; ++i )
+        list1.push_back(i);
+
+    for ( it = list1.begin(), en = list1.end(), i = 0;
+          it != en; ++it, ++i )
+    {
+        CPPUNIT_ASSERT( *it == i );
+    }
+
+    for ( rit = list1.rbegin(), ren = list1.rend(), i = 4;
+          rit != ren; ++rit, --i )
+    {
+        CPPUNIT_ASSERT( *rit == i );
+    }
+
+    CPPUNIT_ASSERT( *list1.rbegin() == *(list1.end()-1) &&
+                    *list1.begin() == *(list1.rend()-1) );
+
+    it = list1.begin()+1;
+    rit = list1.rbegin()+1;
+    CPPUNIT_ASSERT( *list1.begin() == *(it-1) &&
+                    *list1.rbegin() == *(rit-1) );
+
+    CPPUNIT_ASSERT( ( list1.front() == 0 ) && ( list1.back() == 4 ) );
+
+    list1.erase(list1.begin());
+    list1.erase(list1.end()-1);
+
+    for ( it = list1.begin(), en = list1.end(), i = 1;
+          it != en; ++it, ++i )
+    {
+        CPPUNIT_ASSERT( *it == i );
+    }
+}
index 21ff5824cd466ddab1eabda05fca74943d7d246b..af3d8502574eb6b1acbc9f20c9880462c1c96688 100644 (file)
@@ -34,7 +34,8 @@ TEST_OBJECTS =  \
        $(OBJS)\test_main.obj \
        $(OBJS)\test_formatconverter.obj \
        $(OBJS)\test_regex.obj \
-       $(OBJS)\test_filesys.obj
+       $(OBJS)\test_filesys.obj \
+       $(OBJS)\test_arrays.obj
 
 ### Conditionally set variables: ###
 
@@ -168,3 +169,6 @@ $(OBJS)\test_regex.obj: .\regex\regex.cpp
 
 $(OBJS)\test_filesys.obj: .\filesys\filesys.cpp
        $(CXX) -q -c -P -o$@ $(TEST_CXXFLAGS) $**
+
+$(OBJS)\test_arrays.obj: .\arrays\arrays.cpp
+       $(CXX) -q -c -P -o$@ $(TEST_CXXFLAGS) $**
index 15d4f09c9278e74455e4d96ab076f42bca426cda..042414e2bd6dfccfacf3bcaccfeff8b0dd9184a1 100644 (file)
@@ -25,7 +25,8 @@ TEST_OBJECTS =  \
        $(OBJS)\test_main.o \
        $(OBJS)\test_formatconverter.o \
        $(OBJS)\test_regex.o \
-       $(OBJS)\test_filesys.o
+       $(OBJS)\test_filesys.o \
+       $(OBJS)\test_arrays.o
 
 ### Conditionally set variables: ###
 
@@ -163,4 +164,7 @@ $(OBJS)\test_regex.o: ./regex/regex.cpp
 $(OBJS)\test_filesys.o: ./filesys/filesys.cpp
        $(CXX) -c -o $@ $(TEST_CXXFLAGS) $<
 
+$(OBJS)\test_arrays.o: ./arrays/arrays.cpp
+       $(CXX) -c -o $@ $(TEST_CXXFLAGS) $<
+
 .PHONY: all clean
index 7da294623b2bf6a6a6d7232eafc260eae78c4b8f..e3a9cad7e8101358613a517cc4d29f6c906609c8 100644 (file)
@@ -27,7 +27,8 @@ TEST_OBJECTS =  \
        $(OBJS)\test_main.obj \
        $(OBJS)\test_formatconverter.obj \
        $(OBJS)\test_regex.obj \
-       $(OBJS)\test_filesys.obj
+       $(OBJS)\test_filesys.obj \
+       $(OBJS)\test_arrays.obj
 
 ### Conditionally set variables: ###
 
@@ -224,3 +225,6 @@ $(OBJS)\test_regex.obj: .\regex\regex.cpp
 
 $(OBJS)\test_filesys.obj: .\filesys\filesys.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(TEST_CXXFLAGS) $**
+
+$(OBJS)\test_arrays.obj: .\arrays\arrays.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(TEST_CXXFLAGS) $**
index 4d92c5ce5c690954987db1e7d3a24eb61a2b90c6..099040ca4093bd2f3cb874f10874027d62b6532d 100644 (file)
@@ -175,7 +175,8 @@ TEST_OBJECTS =  &
        $(OBJS)\test_main.obj &
        $(OBJS)\test_formatconverter.obj &
        $(OBJS)\test_regex.obj &
-       $(OBJS)\test_filesys.obj
+       $(OBJS)\test_filesys.obj &
+       $(OBJS)\test_arrays.obj
 
 
 all : $(OBJS)
@@ -218,3 +219,6 @@ $(OBJS)\test_regex.obj :  .AUTODEPEND .\regex\regex.cpp
 
 $(OBJS)\test_filesys.obj :  .AUTODEPEND .\filesys\filesys.cpp
        $(CXX) -zq -fo=$^@ $(TEST_CXXFLAGS) $<
+
+$(OBJS)\test_arrays.obj :  .AUTODEPEND .\arrays\arrays.cpp
+       $(CXX) -zq -fo=$^@ $(TEST_CXXFLAGS) $<
index 6fa02eaa0cf5dcfb2f92db02198d26e04c4c71e9..c369af456194d56fd0a8058fdc81aee7b34cb05b 100644 (file)
@@ -13,6 +13,7 @@
             formatconverter/formatconverter.cpp
             regex/regex.cpp
             filesys/filesys.cpp
+            arrays/arrays.cpp
         </sources>
         <wx-lib>base</wx-lib>
     </exe>
index ec16fc8b2e734d641dd39bfb4eb60075f7edcf0d..838cb7b0243bceb610b1a3217c38fba6656a13f4 100644 (file)
@@ -435,6 +435,10 @@ LINK32=link.exe
 # PROP Default_Filter ""
 # Begin Source File
 
+SOURCE=.\arrays\arrays.cpp
+# End Source File
+# Begin Source File
+
 SOURCE=.\filesys\filesys.cpp
 # End Source File
 # Begin Source File