/********************************************************************
* COPYRIGHT:
- * Copyright (c) 2004-2006, International Business Machines Corporation and
+ * Copyright (c) 2004-2011, International Business Machines Corporation and
* others. All Rights Reserved.
********************************************************************/
#include "intltest.h"
#include "uvectest.h"
-#include "uvector.h"
-#include "hash.h"
-
#include "cstring.h"
+#include "hash.h"
+#include "uelement.h"
+#include "uvector.h"
//---------------------------------------------------------------------------
//
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;
}
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
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);
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;
}