Converted hash tests to CppUnit.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@27395 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
		@@ -63,7 +63,6 @@
 | 
			
		||||
    #define TEST_FILENAME
 | 
			
		||||
    #define TEST_FILETIME
 | 
			
		||||
 //   #define TEST_FTP  --FIXME! (RN)
 | 
			
		||||
    #define TEST_HASH
 | 
			
		||||
    #define TEST_HASHMAP
 | 
			
		||||
    #define TEST_HASHSET
 | 
			
		||||
    #define TEST_INFO_FUNCTIONS
 | 
			
		||||
@@ -1123,233 +1122,6 @@ static void TestFileSetTimes()
 | 
			
		||||
 | 
			
		||||
#endif // TEST_FILETIME
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// wxHashTable
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
#ifdef TEST_HASH
 | 
			
		||||
 | 
			
		||||
#include "wx/hash.h"
 | 
			
		||||
 | 
			
		||||
struct Foo
 | 
			
		||||
{
 | 
			
		||||
    Foo(int n_) { n = n_; count++; }
 | 
			
		||||
    ~Foo() { count--; }
 | 
			
		||||
 | 
			
		||||
    int n;
 | 
			
		||||
 | 
			
		||||
    static size_t count;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
size_t Foo::count = 0;
 | 
			
		||||
 | 
			
		||||
WX_DECLARE_LIST(Foo, wxListFoos);
 | 
			
		||||
WX_DECLARE_HASH(Foo, wxListFoos, wxHashFoos);
 | 
			
		||||
 | 
			
		||||
#include "wx/listimpl.cpp"
 | 
			
		||||
 | 
			
		||||
WX_DEFINE_LIST(wxListFoos);
 | 
			
		||||
 | 
			
		||||
#include "wx/timer.h"
 | 
			
		||||
 | 
			
		||||
static void TestHash()
 | 
			
		||||
{
 | 
			
		||||
    wxPuts(_T("*** Testing wxHashTable ***\n"));
 | 
			
		||||
    const int COUNT = 100;
 | 
			
		||||
 | 
			
		||||
    wxStopWatch sw;
 | 
			
		||||
 | 
			
		||||
    sw.Start();
 | 
			
		||||
 | 
			
		||||
    {
 | 
			
		||||
        wxHashTable hash(wxKEY_INTEGER, 10), hash2(wxKEY_STRING);
 | 
			
		||||
        wxObject o;
 | 
			
		||||
        int i;
 | 
			
		||||
 | 
			
		||||
        for ( i = 0; i < COUNT; ++i )
 | 
			
		||||
            hash.Put(i, &o + i);
 | 
			
		||||
 | 
			
		||||
        hash.BeginFind();
 | 
			
		||||
        wxHashTable::compatibility_iterator it = hash.Next();
 | 
			
		||||
        i = 0;
 | 
			
		||||
 | 
			
		||||
        while (it)
 | 
			
		||||
        {
 | 
			
		||||
            ++i;
 | 
			
		||||
            it = hash.Next();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (i != COUNT)
 | 
			
		||||
            wxPuts(_T("Error in wxHashTable::compatibility_iterator\n"));
 | 
			
		||||
 | 
			
		||||
        for ( i = 99; i >= 0; --i )
 | 
			
		||||
            if( hash.Get(i) != &o + i )
 | 
			
		||||
                wxPuts(_T("Error in wxHashTable::Get/Put\n"));
 | 
			
		||||
 | 
			
		||||
        for ( i = 0; i < COUNT; ++i )
 | 
			
		||||
            hash.Put(i, &o + i + 20);
 | 
			
		||||
 | 
			
		||||
        for ( i = 99; i >= 0; --i )
 | 
			
		||||
            if( hash.Get(i) != &o + i)
 | 
			
		||||
                wxPuts(_T("Error (2) in wxHashTable::Get/Put\n"));
 | 
			
		||||
 | 
			
		||||
        for ( i = 0; i < COUNT/2; ++i )
 | 
			
		||||
            if( hash.Delete(i) != &o + i)
 | 
			
		||||
                wxPuts(_T("Error in wxHashTable::Delete\n"));
 | 
			
		||||
 | 
			
		||||
        for ( i = COUNT/2; i < COUNT; ++i )
 | 
			
		||||
            if( hash.Get(i) != &o + i)
 | 
			
		||||
                wxPuts(_T("Error (3) in wxHashTable::Get/Put\n"));
 | 
			
		||||
 | 
			
		||||
        for ( i = 0; i < COUNT/2; ++i )
 | 
			
		||||
            if( hash.Get(i) != &o + i + 20)
 | 
			
		||||
                wxPuts(_T("Error (4) in wxHashTable::Put/Delete\n"));
 | 
			
		||||
 | 
			
		||||
        for ( i = 0; i < COUNT/2; ++i )
 | 
			
		||||
            if( hash.Delete(i) != &o + i + 20)
 | 
			
		||||
                wxPuts(_T("Error (2) in wxHashTable::Delete\n"));
 | 
			
		||||
 | 
			
		||||
        for ( i = 0; i < COUNT/2; ++i )
 | 
			
		||||
            if( hash.Get(i) != NULL)
 | 
			
		||||
                wxPuts(_T("Error (5) in wxHashTable::Put/Delete\n"));
 | 
			
		||||
 | 
			
		||||
        hash2.Put(_T("foo"), &o + 1);
 | 
			
		||||
        hash2.Put(_T("bar"), &o + 2);
 | 
			
		||||
        hash2.Put(_T("baz"), &o + 3);
 | 
			
		||||
 | 
			
		||||
        if (hash2.Get(_T("moo")) != NULL)
 | 
			
		||||
            wxPuts(_T("Error in wxHashTable::Get\n"));
 | 
			
		||||
 | 
			
		||||
        if (hash2.Get(_T("bar")) != &o + 2)
 | 
			
		||||
            wxPuts(_T("Error in wxHashTable::Get/Put\n"));
 | 
			
		||||
 | 
			
		||||
        hash2.Put(_T("bar"), &o + 0);
 | 
			
		||||
 | 
			
		||||
        if (hash2.Get(_T("bar")) != &o + 2)
 | 
			
		||||
            wxPuts(_T("Error (2) in wxHashTable::Get/Put\n"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // and now some corner-case testing; 3 and 13 hash to the same bucket
 | 
			
		||||
    {
 | 
			
		||||
        wxHashTable hash(wxKEY_INTEGER, 10);
 | 
			
		||||
        wxObject dummy;
 | 
			
		||||
 | 
			
		||||
        hash.Put(3, &dummy);
 | 
			
		||||
        hash.Delete(3);
 | 
			
		||||
 | 
			
		||||
        if (hash.Get(3) != NULL)
 | 
			
		||||
            wxPuts(_T("Corner case 1 failure\n"));
 | 
			
		||||
 | 
			
		||||
        hash.Put(3, &dummy);
 | 
			
		||||
        hash.Put(13, &dummy);
 | 
			
		||||
        hash.Delete(3);
 | 
			
		||||
 | 
			
		||||
        if (hash.Get(3) != NULL)
 | 
			
		||||
            wxPuts(_T("Corner case 2 failure\n"));
 | 
			
		||||
 | 
			
		||||
        hash.Delete(13);
 | 
			
		||||
 | 
			
		||||
        if (hash.Get(13) != NULL)
 | 
			
		||||
            wxPuts(_T("Corner case 3 failure\n"));
 | 
			
		||||
 | 
			
		||||
        hash.Put(3, &dummy);
 | 
			
		||||
        hash.Put(13, &dummy);
 | 
			
		||||
        hash.Delete(13);
 | 
			
		||||
 | 
			
		||||
        if (hash.Get(13) != NULL)
 | 
			
		||||
            wxPuts(_T("Corner case 4 failure\n"));
 | 
			
		||||
 | 
			
		||||
        hash.Delete(3);
 | 
			
		||||
 | 
			
		||||
        if (hash.Get(3) != NULL)
 | 
			
		||||
            wxPuts(_T("Corner case 5 failure\n"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    {
 | 
			
		||||
        wxHashTable hash(wxKEY_INTEGER, 10);
 | 
			
		||||
        wxObject dummy;
 | 
			
		||||
 | 
			
		||||
        hash.Put(3, 7, &dummy + 7);
 | 
			
		||||
        hash.Put(4, 8, &dummy + 8);
 | 
			
		||||
 | 
			
		||||
        if (hash.Get(7) != NULL) wxPuts(_T("Key/Hash 1 failure\n"));
 | 
			
		||||
        if (hash.Get(3, 7) != &dummy + 7) wxPuts(_T("Key/Hash 2 failure\n"));
 | 
			
		||||
        if (hash.Get(4) != NULL) wxPuts(_T("Key/Hash 3 failure\n"));
 | 
			
		||||
        if (hash.Get(3) != NULL) wxPuts(_T("Key/Hash 4 failure\n"));
 | 
			
		||||
        if (hash.Get(8) != NULL) wxPuts(_T("Key/Hash 5 failure\n"));
 | 
			
		||||
        if (hash.Get(8, 4) != NULL) wxPuts(_T("Key/Hash 6 failure\n"));
 | 
			
		||||
 | 
			
		||||
        if (hash.Delete(7) != NULL) wxPuts(_T("Key/Hash 7 failure\n"));
 | 
			
		||||
        if (hash.Delete(3) != NULL) wxPuts(_T("Key/Hash 8 failure\n"));
 | 
			
		||||
        if (hash.Delete(3, 7) != &dummy + 7) wxPuts(_T("Key/Hash 8 failure\n"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    {
 | 
			
		||||
        wxHashFoos hash;
 | 
			
		||||
        hash.DeleteContents(true);
 | 
			
		||||
 | 
			
		||||
        wxPrintf(_T("Hash created: %u foos in hash, %u foos totally\n"),
 | 
			
		||||
               hash.GetCount(), Foo::count);
 | 
			
		||||
 | 
			
		||||
        static const int hashTestData[] =
 | 
			
		||||
        {
 | 
			
		||||
            0, 1, 17, -2, 2, 4, -4, 345, 3, 3, 2, 1,
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        size_t n;
 | 
			
		||||
        for ( n = 0; n < WXSIZEOF(hashTestData); n++ )
 | 
			
		||||
        {
 | 
			
		||||
            hash.Put(hashTestData[n], n, new Foo(n));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        wxPrintf(_T("Hash filled: %u foos in hash, %u foos totally\n"),
 | 
			
		||||
               hash.GetCount(), Foo::count);
 | 
			
		||||
 | 
			
		||||
        wxPuts(_T("Hash access test:"));
 | 
			
		||||
        for ( n = 0; n < WXSIZEOF(hashTestData); n++ )
 | 
			
		||||
        {
 | 
			
		||||
            wxPrintf(_T("\tGetting element with key %d, value %d: "),
 | 
			
		||||
                   hashTestData[n], n);
 | 
			
		||||
            Foo *foo = hash.Get(hashTestData[n], n);
 | 
			
		||||
            if ( !foo )
 | 
			
		||||
            {
 | 
			
		||||
                wxPrintf(_T("ERROR, not found.\n"));
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                wxPrintf(_T("%d (%s)\n"), foo->n,
 | 
			
		||||
                       (size_t)foo->n == n ? "ok" : "ERROR");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        wxPrintf(_T("\nTrying to get an element not in hash: "));
 | 
			
		||||
 | 
			
		||||
        if ( hash.Get(1234) || hash.Get(1, 0) )
 | 
			
		||||
        {
 | 
			
		||||
            wxPuts(_T("ERROR: found!"));
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            wxPuts(_T("ok (not found)"));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Foo* foo = hash.Delete(0);
 | 
			
		||||
 | 
			
		||||
        wxPrintf(_T("Removed 1 foo: %u foos still there\n"), Foo::count);
 | 
			
		||||
 | 
			
		||||
        delete foo;
 | 
			
		||||
 | 
			
		||||
        wxPrintf(_T("Foo deleted: %u foos left\n"), Foo::count);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    wxPrintf(_T("Hash destroyed: %u foos left\n"), Foo::count);
 | 
			
		||||
    wxPuts(_T("*** Testing wxHashTable finished ***\n"));
 | 
			
		||||
 | 
			
		||||
    wxPrintf(_T("Time: %ld\n"), sw.Time());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif // TEST_HASH
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// wxHashMap
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
@@ -5723,10 +5495,6 @@ int main(int argc, char **argv)
 | 
			
		||||
    #endif
 | 
			
		||||
#endif // TEST_FTP
 | 
			
		||||
 | 
			
		||||
#ifdef TEST_HASH
 | 
			
		||||
    TestHash();
 | 
			
		||||
#endif // TEST_HASH
 | 
			
		||||
 | 
			
		||||
#ifdef TEST_HASHMAP
 | 
			
		||||
    TestHashMap();
 | 
			
		||||
#endif // TEST_HASHMAP
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user