1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/******************************************************************** 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * COPYRIGHT: 350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Copyright (c) 2004-2010, International Business Machines Corporation and 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * others. All Rights Reserved. 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ********************************************************************/ 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Test parts of UVector and UStack 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "intltest.h" 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "uvectest.h" 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "uvector.h" 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "hash.h" 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cstring.h" 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//--------------------------------------------------------------------------- 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Test class boilerplate 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//--------------------------------------------------------------------------- 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUVectorTest::UVectorTest() 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUVectorTest::~UVectorTest() 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid UVectorTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) logln("TestSuite UVectorTest: "); 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (index) { 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 0: name = "UVector_API"; 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) UVector_API(); 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 1: name = "UStack_API"; 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) UStack_API(); 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 2: name = "Hashtable_API"; 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) Hashtable_API(); 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: name = ""; 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; //needed to end loop 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//--------------------------------------------------------------------------- 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Error Checking / Reporting macros used in all of the tests. 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//--------------------------------------------------------------------------- 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define TEST_CHECK_STATUS(status) \ 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) {\ 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("UVectorTest failure at line %d. status=%s\n", __LINE__, u_errorName(status));\ 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return;\ 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define TEST_ASSERT(expr) \ 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ((expr)==FALSE) {\ 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("UVectorTest failure at line %d.\n", __LINE__);\ 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 6950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehostatic int8_t U_CALLCONV 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUVectorTest_compareInt32(UHashTok key1, UHashTok key2) { 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (key1.integer > key2.integer) { 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return 1; 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else if (key1.integer < key2.integer) { 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return -1; 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return 0; 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CDECL_BEGIN 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic int8_t U_CALLCONV 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUVectorTest_compareCstrings(const UHashTok key1, const UHashTok key2) { 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return !strcmp((const char *)key1.pointer, (const char *)key2.pointer); 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CDECL_END 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//--------------------------------------------------------------------------- 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// UVector_API Check for basic functionality of UVector. 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//--------------------------------------------------------------------------- 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid UVectorTest::UVector_API() { 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UVector *a; 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru a = new UVector(status); 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_CHECK_STATUS(status); 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete a; 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru a = new UVector(2000, status); 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_CHECK_STATUS(status); 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete a; 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru a = new UVector(status); 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru a->sortedInsert((int32_t)10, UVectorTest_compareInt32, status); 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru a->sortedInsert((int32_t)20, UVectorTest_compareInt32, status); 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru a->sortedInsert((int32_t)30, UVectorTest_compareInt32, status); 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru a->sortedInsert((int32_t)15, UVectorTest_compareInt32, status); 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_CHECK_STATUS(status); 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(a->elementAti(0) == 10); 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(a->elementAti(1) == 15); 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(a->elementAti(2) == 20); 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(a->elementAti(3) == 30); 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(a->indexOf((int32_t)3) == -1); 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(a->indexOf((int32_t)15) == 1); 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(a->indexOf((int32_t)15, 2) == -1); 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(a->contains((int32_t)15)); 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(!a->contains((int32_t)5)); 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete a; 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid UVectorTest::UStack_API() { 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UStack *a; 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru a = new UStack(status); 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_CHECK_STATUS(status); 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete a; 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru a = new UStack(2000, status); 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_CHECK_STATUS(status); 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete a; 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru a = new UStack(NULL, NULL, 2000, status); 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_CHECK_STATUS(status); 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete a; 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru a = new UStack(NULL, UVectorTest_compareCstrings, status); 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(a->empty()); 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru a->push((void*)"abc", status); 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(!a->empty()); 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru a->push((void*)"bcde", status); 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru a->push((void*)"cde", status); 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_CHECK_STATUS(status); 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(strcmp("cde", (const char *)a->peek()) == 0); 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(a->search((void*)"cde") == 1); 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(a->search((void*)"bcde") == 2); 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(a->search((void*)"abc") == 3); 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(strcmp("abc", (const char *)a->firstElement()) == 0); 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(strcmp("cde", (const char *)a->lastElement()) == 0); 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(strcmp("cde", (const char *)a->pop()) == 0); 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(strcmp("bcde", (const char *)a->pop()) == 0); 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(strcmp("abc", (const char *)a->pop()) == 0); 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete a; 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CDECL_BEGIN 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UBool U_CALLCONV neverTRUE(const UHashTok /*key1*/, const UHashTok /*key2*/) { 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CDECL_END 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid UVectorTest::Hashtable_API() { 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Hashtable *a = new Hashtable(status); 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT((a->puti("a", 1, status) == 0)); 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT((a->find("a") != NULL)); 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT((a->find("b") == NULL)); 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT((a->puti("b", 2, status) == 0)); 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT((a->find("b") != NULL)); 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT((a->removei("a") == 1)); 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT((a->find("a") == NULL)); 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 18150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /* verify that setValueComparator works */ 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Hashtable b(status); 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT((!a->equals(b))); 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT((b.puti("b", 2, status) == 0)); 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT((!a->equals(b))); // Without a value comparator, this will be FALSE by default. 18650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho b.setValueComparator(uhash_compareLong); 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT((!a->equals(b))); 18850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho a->setValueComparator(uhash_compareLong); 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT((a->equals(b))); 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT((a->equals(*a))); // This better be reflexive. 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 19250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /* verify that setKeyComparator works */ 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT((a->puti("a", 1, status) == 0)); 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT((a->find("a") != NULL)); 19550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho a->setKeyComparator(neverTRUE); 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT((a->find("a") == NULL)); 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete a; 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 201