]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/test/intltest/uvectest.cpp
ICU-511.25.tar.gz
[apple/icu.git] / icuSources / test / intltest / uvectest.cpp
index e73cb8fcaa0a2de32b8eacb6982d778da7aec65a..43841e958ce18ff5885c49be1cbdf0ed68dd53d9 100644 (file)
@@ -1,6 +1,6 @@
 /********************************************************************
  * COPYRIGHT:
- * Copyright (c) 2004-2006, International Business Machines Corporation and
+ * Copyright (c) 2004-2011, International Business Machines Corporation and
  * others. All Rights Reserved.
  ********************************************************************/
 
@@ -9,10 +9,10 @@
 #include "intltest.h"
 
 #include "uvectest.h"
-#include "uvector.h"
-#include "hash.h"
-
 #include "cstring.h"
+#include "hash.h"
+#include "uelement.h"
+#include "uvector.h"
 
 //---------------------------------------------------------------------------
 //
@@ -66,8 +66,8 @@ void UVectorTest::runIndexedTest( int32_t index, UBool exec, const char* &name,
         errln("UVectorTest failure at line %d.\n", __LINE__);\
     }
 
-static int8_t
-UVectorTest_compareInt32(UHashTok key1, UHashTok key2) {
+static int8_t U_CALLCONV
+UVectorTest_compareInt32(UElement key1, UElement key2) {
     if (key1.integer > key2.integer) {
         return 1;
     }
@@ -79,7 +79,7 @@ UVectorTest_compareInt32(UHashTok key1, UHashTok key2) {
 
 U_CDECL_BEGIN
 static int8_t U_CALLCONV
-UVectorTest_compareCstrings(const UHashTok key1, const UHashTok key2) {
+UVectorTest_compareCstrings(const UElement key1, const UElement key2) {
     return !strcmp((const char *)key1.pointer, (const char *)key2.pointer);
 }
 U_CDECL_END
@@ -160,6 +160,13 @@ void UVectorTest::UStack_API() {
     delete a;
 }
 
+U_CDECL_BEGIN
+static UBool U_CALLCONV neverTRUE(const UElement /*key1*/, const UElement /*key2*/) {
+    return FALSE;
+}
+
+U_CDECL_END
+
 void UVectorTest::Hashtable_API() {
     UErrorCode status = U_ZERO_ERROR;
     Hashtable *a = new Hashtable(status);
@@ -170,6 +177,24 @@ void UVectorTest::Hashtable_API() {
     TEST_ASSERT((a->find("b") != NULL));
     TEST_ASSERT((a->removei("a") == 1));
     TEST_ASSERT((a->find("a") == NULL));
+
+    /* verify that setValueComparator works */
+    Hashtable b(status);
+    TEST_ASSERT((!a->equals(b)));
+    TEST_ASSERT((b.puti("b", 2, status) == 0));
+    TEST_ASSERT((!a->equals(b))); // Without a value comparator, this will be FALSE by default.
+    b.setValueComparator(uhash_compareLong);
+    TEST_ASSERT((!a->equals(b)));
+    a->setValueComparator(uhash_compareLong);
+    TEST_ASSERT((a->equals(b)));
+    TEST_ASSERT((a->equals(*a))); // This better be reflexive.
+
+    /* verify that setKeyComparator works */
+    TEST_ASSERT((a->puti("a", 1, status) == 0));
+    TEST_ASSERT((a->find("a") != NULL));
+    a->setKeyComparator(neverTRUE);
+    TEST_ASSERT((a->find("a") == NULL));
+
     delete a;
 }