/********************************************************************
* COPYRIGHT:
- * Copyright (c) 1997-2005, International Business Machines Corporation and
+ * Copyright (c) 1997-2009, International Business Machines Corporation and
* others. All Rights Reserved.
********************************************************************/
#if !UCONFIG_NO_COLLATION
+#include "unicode/localpointer.h"
#include "unicode/uchar.h"
#include "unicode/ustring.h"
#include "normconf.h"
#include "thcoll.h"
#include "srchtest.h"
+#include "ssearch.h"
#include "cntabcol.h"
#include "lcukocol.h"
#include "ucaconf.h"
#include "svccoll.h"
#include "cmemory.h"
-#include "rndmcoll.h"
+//#include "rndmcoll.h"
+
+// Set to 1 to test offsets in backAndForth()
+#define TEST_OFFSETS 0
#define TESTCLASS(n,classname) \
case n: \
TESTCLASS(14, LotusCollationKoreanTest);
TESTCLASS(15, StringSearchTest);
TESTCLASS(16, ContractionTableTest);
+#if !UCONFIG_NO_FILE_IO && !UCONFIG_NO_LEGACY_CONVERSION
TESTCLASS(17, DataDrivenCollatorTest);
+#endif
TESTCLASS(18, UCAConformanceTest);
TESTCLASS(19, CollationServiceTest);
TESTCLASS(20, CollationFinnishTest); // removed by weiv - we have changed Finnish collation
- TESTCLASS(21, RandomCollatorTest);
+ //TESTCLASS(21, RandomCollatorTest); // See ticket 5747 about reenabling this test.
+ TESTCLASS(21, SSearchTest);
default: name = ""; break;
}
const UChar* trg = target.getBuffer();
UCollationResult compareResultIter = (UCollationResult)result;
- if(1) {
+ {
UCharIterator sIter, tIter;
uiter_setString(&sIter, src, sLen);
uiter_setString(&tIter, trg, tLen);
}
/* testing the partial sortkeys */
- if(1) { /*!QUICK*/
+ { /*!QUICK*/
int32_t partialSizes[] = { 3, 1, 2, 4, 8, 20, 80 }; /* just size 3 in the quick mode */
int32_t partialSizesSize = 1;
if(!quick) {
}
UErrorCode status = U_ZERO_ERROR;
- CollationElementIterator* c = ((RuleBasedCollator *)col)->createCollationElementIterator( source );
+ LocalPointer<CollationElementIterator> c(((RuleBasedCollator *)col)->createCollationElementIterator(source));
logln("Testing iterating source: "+source);
backAndForth(*c);
c->setText(target, status);
logln("Testing iterating target: "+target);
backAndForth(*c);
- delete c;
}
}
for (i = 0; i < byteCount; i += 1)
{
+ if (i != 0) {
+ target += " ";
+ }
appendHex(bytes[i], 2, target);
- target += " ";
}
target += "]";
{
// Run through the iterator forwards and stick it into an array
int32_t orderLength = 0;
- int32_t *orders = getOrders(iter, orderLength);
+ LocalArray<Order> orders(getOrders(iter, orderLength));
UErrorCode status = U_ZERO_ERROR;
// Now go through it backwards and make sure we get the same values
while ((o = iter.previous(status)) != CollationElementIterator::NULLORDER)
{
+ /*int32_t offset = */iter.getOffset();
+
if (index == 0) {
if(o == 0) {
continue;
// going backwards
errln("Backward iteration returned a non ignorable after orders are exhausted");
break;
+ }
}
- }
- if (o != orders[--index])
- {
+
+ index -= 1;
+ if (o != orders[index].order) {
if (o == 0)
- index ++;
- else
- {
- while (index > 0 && orders[--index] == 0)
- {
+ index += 1;
+ else {
+ while (index > 0 && orders[--index].order == 0) {
+ // nothing...
}
- if (o != orders[index])
- {
- errln("Mismatch at index %d: 0x%X vs 0x%X", index,
- orders[index], o);
- break;
+
+ if (o != orders[index].order) {
+ errln("Mismatched order at index %d: 0x%0:8X vs. 0x%0:8X", index,
+ orders[index].order, o);
+ //break;
+ return;
}
}
}
+
+#if TEST_OFFSETS
+ if (offset != orders[index].offset) {
+ errln("Mismatched offset at index %d: %d vs. %d", index,
+ orders[index].offset, offset);
+ //break;
+ return;
+ }
+#endif
+
}
- while (index != 0 && orders[index - 1] == 0)
+ while (index != 0 && orders[index - 1].order == 0)
{
index --;
}
}
errln("");
}
-
- delete[] orders;
}
* Return an integer array containing all of the collation orders
* returned by calls to next on the specified iterator
*/
-int32_t *IntlTestCollator::getOrders(CollationElementIterator &iter, int32_t &orderLength)
+IntlTestCollator::Order *IntlTestCollator::getOrders(CollationElementIterator &iter, int32_t &orderLength)
{
int32_t maxSize = 100;
int32_t size = 0;
- int32_t *orders = new int32_t[maxSize];
+ LocalArray<Order> orders(new Order[maxSize]);
UErrorCode status = U_ZERO_ERROR;
+ int32_t offset = iter.getOffset();
int32_t order;
while ((order = iter.next(status)) != CollationElementIterator::NULLORDER)
if (size == maxSize)
{
maxSize *= 2;
- int32_t *temp = new int32_t[maxSize];
+ Order *temp = new Order[maxSize];
- uprv_memcpy(temp, orders, size * sizeof(int32_t));
- delete[] orders;
- orders = temp;
+ uprv_memcpy(temp, orders.getAlias(), size * sizeof(Order));
+ orders.adoptInstead(temp);
}
- orders[size++] = order;
+ orders[size].order = order;
+ orders[size].offset = offset;
+
+ offset = iter.getOffset();
+ size += 1;
}
if (maxSize > size)
{
- int32_t *temp = new int32_t[size];
+ Order *temp = new Order[size];
- uprv_memcpy(temp, orders, size * sizeof(int32_t));
- delete[] orders;
- orders = temp;
+ uprv_memcpy(temp, orders.getAlias(), size * sizeof(Order));
+ orders.adoptInstead(temp);
}
orderLength = size;
- return orders;
+ return orders.orphan();
}
#endif /* #if !UCONFIG_NO_COLLATION */