16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/******************************************************************** 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copyright (c) 2001-2011 International Business Machines 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Corporation and others. All Rights Reserved. 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ******************************************************************** 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * File usrchtst.c 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Modification History: 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Name Date Description 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * synwee July 19 2001 creation 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ********************************************************************/ 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h" 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_COLLATION && !UCONFIG_NO_BREAK_ITERATION && !UCONFIG_NO_FILE_IO 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/usearch.h" 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/ustring.h" 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "ccolltst.h" 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "cmemory.h" 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <stdio.h> 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "usrchdat.c" 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/ubrk.h" 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <assert.h> 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic UBool TOCLOSE_ = TRUE; 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic UCollator *EN_US_; 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic UCollator *FR_FR_; 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic UCollator *DE_; 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic UCollator *ES_; 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * CHECK_BREAK(char *brk) 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Test if a break iterator is passed in AND break iteration is disabled. 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Skip the test if so. 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * CHECK_BREAK_BOOL(char *brk) 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Same as above, but returns 'TRUE' as a passing result 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_BREAK_ITERATION 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic UBreakIterator *EN_WORDBREAKER_; 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic UBreakIterator *EN_CHARACTERBREAKER_; 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define CHECK_BREAK(x) 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define CHECK_BREAK_BOOL(x) 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#else 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define CHECK_BREAK(x) if(x) { log_info("Skipping test on %s:%d because UCONFIG_NO_BREAK_ITERATION is on\n", __FILE__, __LINE__); return; } 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define CHECK_BREAK_BOOL(x) if(x) { log_info("Skipping test on %s:%d because UCONFIG_NO_BREAK_ITERATION is on\n", __FILE__, __LINE__); return TRUE; } 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Opening all static collators and break iterators 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/ 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void open(UErrorCode* status) 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (TOCLOSE_) { 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar rules[1024]; 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t rulelength = 0; 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *status = U_ZERO_ERROR; 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org EN_US_ = ucol_open("en_US", status); 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(*status)) { 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(*status, "Error opening collator\n"); 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FR_FR_ = ucol_open("fr_FR", status); 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DE_ = ucol_open("de_DE", status); 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ES_ = ucol_open("es_ES", status); 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strcpy(rules, ucol_getRules(DE_, &rulelength)); 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(EXTRACOLLATIONRULE, rules + rulelength, 1024 - rulelength); 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_close(DE_); 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DE_ = ucol_openRules(rules, u_strlen(rules), UCOL_ON, UCOL_TERTIARY, 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (UParseError *)NULL, status); 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strcpy(rules, ucol_getRules(ES_, &rulelength)); 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(EXTRACOLLATIONRULE, rules + rulelength, 1024 - rulelength); 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_close(ES_); 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ES_ = ucol_openRules(rules, u_strlen(rules), UCOL_ON, UCOL_TERTIARY, 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org NULL, status); 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_BREAK_ITERATION 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org EN_WORDBREAKER_ = ubrk_open(UBRK_WORD, "en_US", NULL, 0, status); 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org EN_CHARACTERBREAKER_ = ubrk_open(UBRK_CHARACTER, "en_US", NULL, 0, 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status); 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TOCLOSE_ = TRUE; 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Start opening all static collators and break iterators 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/ 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestStart(void) 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org open(&status); 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TOCLOSE_ = FALSE; 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Closing all static collators and break iterators 1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/ 1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void close(void) 1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (TOCLOSE_) { 1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_close(EN_US_); 1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_close(FR_FR_); 1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_close(DE_); 1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_close(ES_); 1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_BREAK_ITERATION 1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ubrk_close(EN_WORDBREAKER_); 1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ubrk_close(EN_CHARACTERBREAKER_); 1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TOCLOSE_ = FALSE; 1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* End closing all static collators and break iterators 1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/ 1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestEnd(void) 1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TOCLOSE_ = TRUE; 1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org close(); 1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TOCLOSE_ = TRUE; 1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* output UChar strings for printing. 1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/ 1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic char *toCharString(const UChar* unichars) 1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static char result[1024]; 1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char *temp = result; 1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int count = 0; 1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int length = u_strlen(unichars); 1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (; count < length; count ++) { 1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar ch = unichars[count]; 1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (ch >= 0x20 && ch <= 0x7e) { 1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *temp ++ = (char)ch; 1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else { 1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sprintf(temp, "\\u%04x", ch); 1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org temp += 6; /* \uxxxx */ 1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *temp = 0; 1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return result; 1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Getting the collator 1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/ 1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic UCollator *getCollator(const char *collator) 1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (collator == NULL) { 1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return EN_US_; 1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (strcmp(collator, "fr") == 0) { 1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return FR_FR_; 1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else if (strcmp(collator, "de") == 0) { 1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return DE_; 1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else if (strcmp(collator, "es") == 0) { 1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return ES_; 1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else { 1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return EN_US_; 1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Getting the breakiterator 1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/ 1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic UBreakIterator *getBreakIterator(const char *breaker) 1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (breaker == NULL) { 1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return NULL; 1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_BREAK_ITERATION 1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (strcmp(breaker, "wordbreaker") == 0) { 1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return EN_WORDBREAKER_; 1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else { 1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return EN_CHARACTERBREAKER_; 1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#else 1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return NULL; 1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestOpenClose(void) 1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UStringSearch *result; 2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar pattern[] = {0x61, 0x62, 0x63, 0x64, 0x65, 0x66}; 2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar text[] = {0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67}; 2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_BREAK_ITERATION 2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBreakIterator *breakiter = ubrk_open(UBRK_WORD, "en_US", 2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org text, 6, &status); 2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* testing null arguments */ 2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = usearch_open(NULL, 0, NULL, 0, NULL, NULL, &status); 2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_SUCCESS(status) || result != NULL) { 2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error: NULL arguments should produce an error and a NULL result\n"); 2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = usearch_openFromCollator(NULL, 0, NULL, 0, NULL, NULL, &status); 2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_SUCCESS(status) || result != NULL) { 2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error: NULL arguments should produce an error and a NULL result\n"); 2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = usearch_open(pattern, 3, NULL, 0, NULL, NULL, &status); 2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_SUCCESS(status) || result != NULL) { 2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error: NULL arguments should produce an error and a NULL result\n"); 2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 2256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = usearch_openFromCollator(pattern, 3, NULL, 0, NULL, NULL, 2266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &status); 2276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_SUCCESS(status) || result != NULL) { 2286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error: NULL arguments should produce an error and a NULL result\n"); 2296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 2326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = usearch_open(pattern, 3, text, 6, NULL, NULL, &status); 2336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_SUCCESS(status) || result != NULL) { 2346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error: NULL arguments should produce an error and a NULL result\n"); 2356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 2376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = usearch_openFromCollator(pattern, 3, text, 6, NULL, NULL, 2386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &status); 2396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_SUCCESS(status) || result != NULL) { 2406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error: NULL arguments should produce an error and a NULL result\n"); 2416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 2446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = usearch_open(pattern, 3, text, 6, "en_US", NULL, &status); 2456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status) || result == NULL) { 2466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "Error: NULL break iterator is valid for opening search\n"); 2476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else { 2496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(result); 2506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org open(&status); 2526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 2536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 2546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 2556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 2576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = usearch_openFromCollator(pattern, 3, text, 6, EN_US_, NULL, 2586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &status); 2596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status) || result == NULL) { 2606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (EN_US_ == NULL) { 2616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("Opening collator failed.\n"); 2626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 2636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error: NULL break iterator is valid for opening search\n"); 2646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else { 2676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(result); 2686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 2726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_BREAK_ITERATION 2736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = usearch_open(pattern, 3, text, 6, "en_US", breakiter, &status); 2756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status) || result == NULL) { 2766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "Error: Break iterator is valid for opening search\n"); 2776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else { 2796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(result); 2806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 2826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = usearch_openFromCollator(pattern, 3, text, 6, EN_US_, breakiter, 2836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &status); 2846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status) || result == NULL) { 2856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (EN_US_ == NULL) { 2866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("Opening collator failed.\n"); 2876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 2886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error: Break iterator is valid for opening search\n"); 2896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else { 2926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(result); 2936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ubrk_close(breakiter); 2956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 2966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org close(); 2976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 2986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestInitialization(void) 3006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 3016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 3026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar pattern[512]; 3036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar text[] = {0x61, 0x62, 0x63, 0x64, 0x65, 0x66}; 3046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t i = 0; 3056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UStringSearch *result; 3066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* simple test on the pattern ce construction */ 3086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pattern[0] = 0x41; 3096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pattern[1] = 0x42; 3106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org open(&status); 3116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 3126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 3136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 3146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = usearch_openFromCollator(pattern, 2, text, 3, EN_US_, NULL, 3166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &status); 3176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 3186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error opening search %s\n", u_errorName(status)); 3196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(result); 3216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* testing if an extremely large pattern will fail the initialization */ 3236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i = 0; i < 512; i++) { 3246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pattern[i] = 0x41; 3256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*uprv_memset(pattern, 0x41, 512);*/ 3276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = usearch_openFromCollator(pattern, 512, text, 3, EN_US_, NULL, 3286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &status); 3296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 3306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error opening search %s\n", u_errorName(status)); 3316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(result); 3336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org close(); 3346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic UBool assertEqualWithUStringSearch( UStringSearch *strsrch, 3376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const SearchData search) 3386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 3396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int count = 0; 3406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 3416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t matchindex = search.offset[count]; 3426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t textlength; 3436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar matchtext[128]; 3446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t matchlength; 3456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t nextStart; 3466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool isOverlap; 3476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setAttribute(strsrch, USEARCH_ELEMENT_COMPARISON, search.elemCompare, &status); 3496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 3506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting USEARCH_ELEMENT_COMPARISON attribute %s\n", u_errorName(status)); 3516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return FALSE; 3526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (usearch_getMatchedStart(strsrch) != USEARCH_DONE || 3556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getMatchedLength(strsrch) != 0) { 3566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error with the initialization of match start and length\n"); 3576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* start of next matches */ 3596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (U_SUCCESS(status) && matchindex >= 0) { 3606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org matchlength = search.size[count]; 3616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_next(strsrch, &status); 3626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (matchindex != usearch_getMatchedStart(strsrch) || 3636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org matchlength != (uint32_t)usearch_getMatchedLength(strsrch)) { 3646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char *str = toCharString(usearch_getText(strsrch, &textlength)); 3656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Text: %s\n", str); 3666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str = toCharString(usearch_getPattern(strsrch, &textlength)); 3676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Pattern: %s\n", str); 3686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error next match found at idx %d (len:%d); expected %d (len:%d)\n", 3696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getMatchedStart(strsrch), usearch_getMatchedLength(strsrch), 3706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org matchindex, matchlength); 3716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return FALSE; 3726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count ++; 3746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (usearch_getMatchedText(strsrch, matchtext, 128, &status) != 3766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (int32_t) matchlength || U_FAILURE(status) || 3776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memcmp(matchtext, 3786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getText(strsrch, &textlength) + matchindex, 3796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org matchlength * sizeof(UChar)) != 0) { 3806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error getting next matched text\n"); 3816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org matchindex = search.offset[count]; 3846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_next(strsrch, &status); 3866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (usearch_getMatchedStart(strsrch) != USEARCH_DONE || 3876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getMatchedLength(strsrch) != 0) { 3886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char *str = toCharString(usearch_getText(strsrch, &textlength)); 3896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Text: %s\n", str); 3906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str = toCharString(usearch_getPattern(strsrch, &textlength)); 3916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Pattern: %s\n", str); 3926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error next match found at %d (len:%d); expected <NO MATCH>\n", 3936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getMatchedStart(strsrch), 3946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getMatchedLength(strsrch)); 3956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return FALSE; 3966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* start of previous matches */ 3986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count = count == 0 ? 0 : count - 1; 3996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org matchindex = search.offset[count]; 4006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (U_SUCCESS(status) && matchindex >= 0) { 4026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org matchlength = search.size[count]; 4036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_previous(strsrch, &status); 4046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (matchindex != usearch_getMatchedStart(strsrch) || 4056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org matchlength != (uint32_t)usearch_getMatchedLength(strsrch)) { 4066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char *str = toCharString(usearch_getText(strsrch, &textlength)); 4076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Text: %s\n", str); 4086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str = toCharString(usearch_getPattern(strsrch, &textlength)); 4096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Pattern: %s\n", str); 4106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error previous match found at %d (len:%d); expected %d (len:%d)\n", 4116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getMatchedStart(strsrch), usearch_getMatchedLength(strsrch), 4126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org matchindex, matchlength); 4136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return FALSE; 4146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (usearch_getMatchedText(strsrch, matchtext, 128, &status) != 4176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (int32_t) matchlength || U_FAILURE(status) || 4186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memcmp(matchtext, 4196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getText(strsrch, &textlength) + matchindex, 4206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org matchlength * sizeof(UChar)) != 0) { 4216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error getting previous matched text\n"); 4226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org matchindex = count > 0 ? search.offset[count - 1] : -1; 4256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count --; 4266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_previous(strsrch, &status); 4286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (usearch_getMatchedStart(strsrch) != USEARCH_DONE || 4296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getMatchedLength(strsrch) != 0) { 4306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char *str = toCharString(usearch_getText(strsrch, &textlength)); 4316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Text: %s\n", str); 4326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str = toCharString(usearch_getPattern(strsrch, &textlength)); 4336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Pattern: %s\n", str); 4346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error previous match found at %d (len:%d); expected <NO MATCH>\n", 4356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getMatchedStart(strsrch), 4366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getMatchedLength(strsrch)); 4376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return FALSE; 4386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org isOverlap = (usearch_getAttribute(strsrch, USEARCH_OVERLAP) == USEARCH_ON); 4426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* start of following matches */ 4446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count = 0; 4456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org matchindex = search.offset[count]; 4466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org nextStart = 0; 4476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (TRUE) { 4496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_following(strsrch, nextStart, &status); 4506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (matchindex < 0) { 4526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (usearch_getMatchedStart(strsrch) != USEARCH_DONE || usearch_getMatchedLength(strsrch) != 0) { 4536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char *str = toCharString(usearch_getText(strsrch, &textlength)); 4546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Text: %s\n", str); 4556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str = toCharString(usearch_getPattern(strsrch, &textlength)); 4566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Pattern: %s\n", str); 4576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error following match starting at %d (overlap:%d) found at %d (len:%d); expected <NO MATCH>\n", 4586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org nextStart, isOverlap, 4596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getMatchedStart(strsrch), 4606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getMatchedLength(strsrch)); 4616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return FALSE; 4626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* no more matches */ 4646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 4656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org matchlength = search.size[count]; 4686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (usearch_getMatchedStart(strsrch) != matchindex 4696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org || usearch_getMatchedLength(strsrch) != matchlength 4706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org || U_FAILURE(status)) { 4716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char *str = toCharString(usearch_getText(strsrch, &textlength)); 4726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Text: %s\n", str); 4736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str = toCharString(usearch_getPattern(strsrch, &textlength)); 4746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Pattern: %s\n", str); 4756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error following match starting at %d (overlap: %d) found at %d (len:%d); expected %d (len:%d)\n", 4766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org nextStart, isOverlap, 4776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getMatchedStart(strsrch), usearch_getMatchedLength(strsrch), 4786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org matchindex, matchlength); 4796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return FALSE; 4806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (isOverlap || usearch_getMatchedLength(strsrch) == 0) { 4836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org nextStart = usearch_getMatchedStart(strsrch) + 1; 4846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 4856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org nextStart = usearch_getMatchedStart(strsrch) + usearch_getMatchedLength(strsrch); 4866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count++; 4896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org matchindex = search.offset[count]; 4906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* start of preceding matches */ 4936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count = -1; /* last non-negative offset index, could be -1 if no match */ 4946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (search.offset[count + 1] >= 0) { 4956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count++; 4966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getText(strsrch, &nextStart); 4986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (TRUE) { 5006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_preceding(strsrch, nextStart, &status); 5016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (count < 0) { 5036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (usearch_getMatchedStart(strsrch) != USEARCH_DONE || usearch_getMatchedLength(strsrch) != 0) { 5046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char *str = toCharString(usearch_getText(strsrch, &textlength)); 5056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Text: %s\n", str); 5066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str = toCharString(usearch_getPattern(strsrch, &textlength)); 5076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Pattern: %s\n", str); 5086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error preceding match starting at %d (overlap: %d) found at %d (len:%d); expected <NO MATCH>\n", 5096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org nextStart, isOverlap, 5106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getMatchedStart(strsrch), 5116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getMatchedLength(strsrch)); 5126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return FALSE; 5136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* no more matches */ 5156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 5166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org matchindex = search.offset[count]; 5196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org matchlength = search.size[count]; 5206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (usearch_getMatchedStart(strsrch) != matchindex 5216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org || usearch_getMatchedLength(strsrch) != matchlength 5226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org || U_FAILURE(status)) { 5236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char *str = toCharString(usearch_getText(strsrch, &textlength)); 5246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Text: %s\n", str); 5256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str = toCharString(usearch_getPattern(strsrch, &textlength)); 5266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Pattern: %s\n", str); 5276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error preceding match starting at %d (overlap: %d) found at %d (len:%d); expected %d (len:%d)\n", 5286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org nextStart, isOverlap, 5296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getMatchedStart(strsrch), usearch_getMatchedLength(strsrch), 5306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org matchindex, matchlength); 5316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return FALSE; 5326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org nextStart = matchindex; 5356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count--; 5366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setAttribute(strsrch, USEARCH_ELEMENT_COMPARISON, USEARCH_STANDARD_ELEMENT_COMPARISON, &status); 5396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return TRUE; 5406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 5416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic UBool assertEqual(const SearchData search) 5436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 5446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 5456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar pattern[32]; 5466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text[128]; 5476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCollator *collator = getCollator(search.collator); 5486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBreakIterator *breaker = getBreakIterator(search.breaker); 5496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UStringSearch *strsrch; 5506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CHECK_BREAK_BOOL(search.breaker); 5526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(search.text, text, 128); 5546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(search.pattern, pattern, 32); 5556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_setStrength(collator, search.strength); 5566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org strsrch = usearch_openFromCollator(pattern, -1, text, -1, collator, 5576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org breaker, &status); 5586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 5596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error opening string search %s\n", u_errorName(status)); 5606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return FALSE; 5616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqualWithUStringSearch(strsrch, search)) { 5646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_setStrength(collator, UCOL_TERTIARY); 5656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 5666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return FALSE; 5676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_setStrength(collator, UCOL_TERTIARY); 5696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 5706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return TRUE; 5716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 5726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic UBool assertCanonicalEqual(const SearchData search) 5746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 5756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 5766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar pattern[32]; 5776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text[128]; 5786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCollator *collator = getCollator(search.collator); 5796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBreakIterator *breaker = getBreakIterator(search.breaker); 5806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UStringSearch *strsrch; 5816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool result = TRUE; 5826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CHECK_BREAK_BOOL(search.breaker); 5846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(search.text, text, 128); 5856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(search.pattern, pattern, 32); 5866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_setStrength(collator, search.strength); 5876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_setAttribute(collator, UCOL_NORMALIZATION_MODE, UCOL_ON, &status); 5886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org strsrch = usearch_openFromCollator(pattern, -1, text, -1, collator, 5896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org breaker, &status); 5906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON, 5916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &status); 5926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 5936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error opening string search %s\n", u_errorName(status)); 5946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = FALSE; 5956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto bail; 5966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqualWithUStringSearch(strsrch, search)) { 5996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_setStrength(collator, UCOL_TERTIARY); 6006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 6016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = FALSE; 6026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto bail; 6036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgbail: 6066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_setAttribute(collator, UCOL_NORMALIZATION_MODE, UCOL_OFF, &status); 6076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_setStrength(collator, UCOL_TERTIARY); 6086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 6096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return result; 6106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 6116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic UBool assertEqualWithAttribute(const SearchData search, 6136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org USearchAttributeValue canonical, 6146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org USearchAttributeValue overlap) 6156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 6166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 6176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar pattern[32]; 6186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text[128]; 6196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCollator *collator = getCollator(search.collator); 6206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBreakIterator *breaker = getBreakIterator(search.breaker); 6216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UStringSearch *strsrch; 6226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CHECK_BREAK_BOOL(search.breaker); 6246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(search.text, text, 128); 6256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(search.pattern, pattern, 32); 6266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_setStrength(collator, search.strength); 6276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org strsrch = usearch_openFromCollator(pattern, -1, text, -1, collator, 6286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org breaker, &status); 6296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, canonical, 6306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &status); 6316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setAttribute(strsrch, USEARCH_OVERLAP, overlap, &status); 6326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 6346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error opening string search %s\n", u_errorName(status)); 6356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return FALSE; 6366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqualWithUStringSearch(strsrch, search)) { 6396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_setStrength(collator, UCOL_TERTIARY); 6406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 6416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return FALSE; 6426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_setStrength(collator, UCOL_TERTIARY); 6446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 6456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return TRUE; 6466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 6476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestBasic(void) 6496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 6506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int count = 0; 6516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 6526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org open(&status); 6536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 6546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 6556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 6566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (BASIC[count].text != NULL) { 6586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqual(BASIC[count])) { 6596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error at test number %d\n", count); 6606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count ++; 6626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org close(); 6646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 6656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestNormExact(void) 6676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 6686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int count = 0; 6696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 6706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org open(&status); 6716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 6726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 6736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 6746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_setAttribute(EN_US_, UCOL_NORMALIZATION_MODE, UCOL_ON, &status); 6766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 6776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting collation normalization %s\n", 6786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_errorName(status)); 6796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (BASIC[count].text != NULL) { 6816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqual(BASIC[count])) { 6826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error at test number %d\n", count); 6836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count ++; 6856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count = 0; 6876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (NORMEXACT[count].text != NULL) { 6886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqual(NORMEXACT[count])) { 6896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error at test number %d\n", count); 6906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count ++; 6926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_setAttribute(EN_US_, UCOL_NORMALIZATION_MODE, UCOL_OFF, &status); 6946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count = 0; 6956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (NONNORMEXACT[count].text != NULL) { 6966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqual(NONNORMEXACT[count])) { 6976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error at test number %d\n", count); 6986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count ++; 7006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org close(); 7026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 7036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestStrength(void) 7056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 7066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int count = 0; 7076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 7086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org open(&status); 7096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 7106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 7116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 7126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (STRENGTH[count].text != NULL) { 7146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqual(STRENGTH[count])) { 7156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error at test number %d\n", count); 7166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count ++; 7186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org close(); 7206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 7216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestBreakIterator(void) { 7236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 7246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UStringSearch *strsrch; 7256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text[128]; 7266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar pattern[32]; 7276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int count = 0; 7286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CHECK_BREAK("x"); 7306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_BREAK_ITERATION 7326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org open(&status); 7336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 7346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 7356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 7366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (usearch_getBreakIterator(NULL) != NULL) { 7386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Expected NULL breakiterator from NULL string search\n"); 7396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(BREAKITERATOREXACT[0].text, text, 128); 7416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(BREAKITERATOREXACT[0].pattern, pattern, 32); 7426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org strsrch = usearch_openFromCollator(pattern, -1, text, -1, EN_US_, NULL, 7436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &status); 7446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 7456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error opening string search %s\n", u_errorName(status)); 7466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTBREAKITERATOR; 7476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setBreakIterator(strsrch, NULL, &status); 7506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status) || usearch_getBreakIterator(strsrch) != NULL) { 7516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error usearch_getBreakIterator returned wrong object"); 7526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTBREAKITERATOR; 7536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setBreakIterator(strsrch, EN_CHARACTERBREAKER_, &status); 7566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status) || 7576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getBreakIterator(strsrch) != EN_CHARACTERBREAKER_) { 7586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error usearch_getBreakIterator returned wrong object"); 7596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTBREAKITERATOR; 7606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setBreakIterator(strsrch, EN_WORDBREAKER_, &status); 7636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status) || 7646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getBreakIterator(strsrch) != EN_WORDBREAKER_) { 7656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error usearch_getBreakIterator returned wrong object"); 7666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTBREAKITERATOR; 7676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 7706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count = 0; 7726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (count < 4) { 7736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 0-3 test are fixed */ 7746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const SearchData *search = &(BREAKITERATOREXACT[count]); 7756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCollator *collator = getCollator(search->collator); 7766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBreakIterator *breaker = getBreakIterator(search->breaker); 7776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(search->text, text, 128); 7796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(search->pattern, pattern, 32); 7806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_setStrength(collator, search->strength); 7816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org strsrch = usearch_openFromCollator(pattern, -1, text, -1, collator, 7836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org breaker, &status); 7846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status) || 7856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getBreakIterator(strsrch) != breaker) { 7866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting break iterator\n"); 7876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (strsrch != NULL) { 7886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 7896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqualWithUStringSearch(strsrch, *search)) { 7926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_setStrength(collator, UCOL_TERTIARY); 7936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 7946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTBREAKITERATOR; 7956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org search = &(BREAKITERATOREXACT[count + 1]); 7976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org breaker = getBreakIterator(search->breaker); 7986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setBreakIterator(strsrch, breaker, &status); 7996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status) || usearch_getBreakIterator(strsrch) != breaker) { 8006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting break iterator\n"); 8016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 8026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTBREAKITERATOR; 8036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_reset(strsrch); 8056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqualWithUStringSearch(strsrch, *search)) { 8066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error at test number %d\n", count); 8076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 8086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTBREAKITERATOR; 8096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 8116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count += 2; 8126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count = 0; 8146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (BREAKITERATOREXACT[count].text != NULL) { 8156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqual(BREAKITERATOREXACT[count])) { 8166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error at test number %d\n", count); 8176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTBREAKITERATOR; 8186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count ++; 8206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgENDTESTBREAKITERATOR: 8236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org close(); 8246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 8256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 8266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestVariable(void) 8286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 8296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int count = 0; 8306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 8316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org open(&status); 8326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 8336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 8346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 8356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_setAttribute(EN_US_, UCOL_ALTERNATE_HANDLING, UCOL_SHIFTED, &status); 8376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 8386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting collation alternate attribute %s\n", 8396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_errorName(status)); 8406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (VARIABLE[count].text != NULL) { 8426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("variable %d\n", count); 8436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqual(VARIABLE[count])) { 8446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error at test number %d\n", count); 8456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count ++; 8476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_setAttribute(EN_US_, UCOL_ALTERNATE_HANDLING, 8496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCOL_NON_IGNORABLE, &status); 8506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org close(); 8516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 8526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestOverlap(void) 8546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 8556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int count = 0; 8566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 8576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org open(&status); 8586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 8596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 8606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 8616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (OVERLAP[count].text != NULL) { 8636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqualWithAttribute(OVERLAP[count], USEARCH_OFF, 8646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org USEARCH_ON)) { 8656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error at overlap test number %d\n", count); 8666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count ++; 8686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count = 0; 8706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (NONOVERLAP[count].text != NULL) { 8716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqual(NONOVERLAP[count])) { 8726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error at non overlap test number %d\n", count); 8736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count ++; 8756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count = 0; 8786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (count < 1) { 8796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar pattern[32]; 8806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text[128]; 8816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const SearchData *search = &(OVERLAP[count]); 8826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCollator *collator = getCollator(search->collator); 8836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UStringSearch *strsrch; 8846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 8856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(search->text, text, 128); 8876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(search->pattern, pattern, 32); 8886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org strsrch = usearch_openFromCollator(pattern, -1, text, -1, collator, 8896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org NULL, &status); 8906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status == U_FILE_ACCESS_ERROR) { 8916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("Is your data around?\n"); 8926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 8936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if(U_FAILURE(status)) { 8946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error opening searcher\n"); 8956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 8966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setAttribute(strsrch, USEARCH_OVERLAP, USEARCH_ON, &status); 8986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status) || 8996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getAttribute(strsrch, USEARCH_OVERLAP) != USEARCH_ON) { 9006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting overlap option\n"); 9016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqualWithUStringSearch(strsrch, *search)) { 9036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 9046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 9056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org search = &(NONOVERLAP[count]); 9076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setAttribute(strsrch, USEARCH_OVERLAP, USEARCH_OFF, &status); 9086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status) || 9096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getAttribute(strsrch, USEARCH_OVERLAP) != USEARCH_OFF) { 9106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting overlap option\n"); 9116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_reset(strsrch); 9136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqualWithUStringSearch(strsrch, *search)) { 9146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 9156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error at test number %d\n", count); 9166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count ++; 9196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 9206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org close(); 9226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 9236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestCollator(void) 9256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 9266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* test collator that thinks "o" and "p" are the same thing */ 9276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar rules[32]; 9286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCollator *tailored = NULL; 9296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 9306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar pattern[32]; 9316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text[128]; 9326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UStringSearch *strsrch; 9336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org text[0] = 0x41; 9356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org text[1] = 0x42; 9366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org text[2] = 0x43; 9376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org text[3] = 0x44; 9386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org text[4] = 0x45; 9396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pattern[0] = 0x62; 9406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pattern[1] = 0x63; 9416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org strsrch = usearch_open(pattern, 2, text, 5, "en_US", NULL, &status); 9426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status == U_FILE_ACCESS_ERROR) { 9436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("Is your data around?\n"); 9446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 9456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if(U_FAILURE(status)) { 9466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error opening searcher\n"); 9476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 9486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org tailored = usearch_getCollator(strsrch); 9506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (usearch_next(strsrch, &status) != -1) { 9516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error: Found case insensitive match, when we shouldn't\n"); 9526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_setStrength(tailored, UCOL_PRIMARY); 9546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_reset(strsrch); 9556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (usearch_next(strsrch, &status) != 1) { 9566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error: Found case insensitive match not found\n"); 9576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 9596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org open(&status); 9616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (usearch_getCollator(NULL) != NULL) { 9636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Expected NULL collator from NULL string search\n"); 9646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(COLLATOR[0].text, text, 128); 9666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(COLLATOR[0].pattern, pattern, 32); 9676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org strsrch = usearch_openFromCollator(pattern, -1, text, -1, EN_US_, 9696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org NULL, &status); 9706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 9716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error opening string search %s\n", u_errorName(status)); 9726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqualWithUStringSearch(strsrch, COLLATOR[0])) { 9746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTCOLLATOR; 9756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(TESTCOLLATORRULE, rules, 32); 9786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org tailored = ucol_openRules(rules, -1, UCOL_ON, COLLATOR[1].strength, 9796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org NULL, &status); 9806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 9816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error opening rule based collator %s\n", u_errorName(status)); 9826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setCollator(strsrch, tailored, &status); 9856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status) || usearch_getCollator(strsrch) != tailored) { 9866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting rule based collator\n"); 9876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_reset(strsrch); 9896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqualWithUStringSearch(strsrch, COLLATOR[1])) { 9906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTCOLLATOR; 9916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setCollator(strsrch, EN_US_, &status); 9946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_reset(strsrch); 9956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status) || usearch_getCollator(strsrch) != EN_US_) { 9966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting rule based collator\n"); 9976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqualWithUStringSearch(strsrch, COLLATOR[0])) { 9996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTCOLLATOR; 10006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgENDTESTCOLLATOR: 10036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 10046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (tailored != NULL) { 10056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_close(tailored); 10066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org close(); 10086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 10096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestPattern(void) 10116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 10126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UStringSearch *strsrch; 10136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar pattern[32]; 10146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar bigpattern[512]; 10156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text[128]; 10166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *temp; 10176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t templength; 10186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 10196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org open(&status); 10216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 10226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 10236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 10246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (usearch_getPattern(NULL, &templength) != NULL) { 10266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error NULL string search expected returning NULL pattern\n"); 10276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setPattern(NULL, pattern, 3, &status); 10296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_SUCCESS(status)) { 10306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error expected setting pattern in NULL strings search\n"); 10316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 10336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(PATTERN[0].text, text, 128); 10346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(PATTERN[0].pattern, pattern, 32); 10356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_setStrength(EN_US_, PATTERN[0].strength); 10376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org strsrch = usearch_openFromCollator(pattern, -1, text, -1, EN_US_, 10386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org NULL, &status); 10396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status == U_FILE_ACCESS_ERROR) { 10406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("Is your data around?\n"); 10416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 10426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if(U_FAILURE(status)) { 10436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error opening searcher\n"); 10446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 10456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 10486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setPattern(strsrch, NULL, 3, &status); 10496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_SUCCESS(status)) { 10506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error expected setting NULL pattern in strings search\n"); 10516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 10536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setPattern(strsrch, pattern, 0, &status); 10546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_SUCCESS(status)) { 10556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error expected setting pattern with length 0 in strings search\n"); 10566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 10586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 10596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error opening string search %s\n", u_errorName(status)); 10606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTPATTERN; 10616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org temp = usearch_getPattern(strsrch, &templength); 10636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (u_strcmp(pattern, temp) != 0) { 10646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting pattern\n"); 10656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqualWithUStringSearch(strsrch, PATTERN[0])) { 10676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTPATTERN; 10686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(PATTERN[1].pattern, pattern, 32); 10716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setPattern(strsrch, pattern, -1, &status); 10726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org temp = usearch_getPattern(strsrch, &templength); 10736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (u_strcmp(pattern, temp) != 0) { 10746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting pattern\n"); 10756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTPATTERN; 10766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_reset(strsrch); 10786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 10796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting pattern %s\n", u_errorName(status)); 10806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqualWithUStringSearch(strsrch, PATTERN[1])) { 10826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTPATTERN; 10836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(PATTERN[0].pattern, pattern, 32); 10866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setPattern(strsrch, pattern, -1, &status); 10876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org temp = usearch_getPattern(strsrch, &templength); 10886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (u_strcmp(pattern, temp) != 0) { 10896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting pattern\n"); 10906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTPATTERN; 10916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_reset(strsrch); 10936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 10946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting pattern %s\n", u_errorName(status)); 10956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqualWithUStringSearch(strsrch, PATTERN[0])) { 10976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTPATTERN; 10986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* enormous pattern size to see if this crashes */ 11006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (templength = 0; templength != 512; templength ++) { 11016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bigpattern[templength] = 0x61; 11026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bigpattern[511] = 0; 11046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setPattern(strsrch, bigpattern, -1, &status); 11056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 11066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting pattern with size 512, %s \n", 11076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_errorName(status)); 11086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgENDTESTPATTERN: 11106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_setStrength(EN_US_, UCOL_TERTIARY); 11116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (strsrch != NULL) { 11126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 11136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org close(); 11156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 11166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestText(void) 11186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 11196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UStringSearch *strsrch; 11206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar pattern[32]; 11216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text[128]; 11226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *temp; 11236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t templength; 11246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 11256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(TEXT[0].text, text, 128); 11276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(TEXT[0].pattern, pattern, 32); 11286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org open(&status); 11306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 11316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 11326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 11336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (usearch_getText(NULL, &templength) != NULL) { 11366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error NULL string search should return NULL text\n"); 11376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setText(NULL, text, 10, &status); 11406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_SUCCESS(status)) { 11416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error NULL string search should have an error when setting text\n"); 11426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 11456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org strsrch = usearch_openFromCollator(pattern, -1, text, -1, EN_US_, 11466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org NULL, &status); 11476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 11496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error opening string search %s\n", u_errorName(status)); 11506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTPATTERN; 11516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org temp = usearch_getText(strsrch, &templength); 11536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (u_strcmp(text, temp) != 0) { 11546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting text\n"); 11556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqualWithUStringSearch(strsrch, TEXT[0])) { 11576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTPATTERN; 11586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(TEXT[1].text, text, 32); 11616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setText(strsrch, text, -1, &status); 11626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org temp = usearch_getText(strsrch, &templength); 11636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (u_strcmp(text, temp) != 0) { 11646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting text\n"); 11656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTPATTERN; 11666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 11686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting text %s\n", u_errorName(status)); 11696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqualWithUStringSearch(strsrch, TEXT[1])) { 11716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTPATTERN; 11726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(TEXT[0].text, text, 32); 11756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setText(strsrch, text, -1, &status); 11766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org temp = usearch_getText(strsrch, &templength); 11776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (u_strcmp(text, temp) != 0) { 11786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting text\n"); 11796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTPATTERN; 11806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 11826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting pattern %s\n", u_errorName(status)); 11836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqualWithUStringSearch(strsrch, TEXT[0])) { 11856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTPATTERN; 11866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgENDTESTPATTERN: 11886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (strsrch != NULL) { 11896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 11906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org close(); 11926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 11936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestCompositeBoundaries(void) 11956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 11966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int count = 0; 11976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 11986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org open(&status); 11996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 12006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 12016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 12026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (COMPOSITEBOUNDARIES[count].text != NULL) { 12046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("composite %d\n", count); 12056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqual(COMPOSITEBOUNDARIES[count])) { 12066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error at test number %d\n", count); 12076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count ++; 12096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org close(); 12116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 12126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestGetSetOffset(void) 12146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 12156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int searchDataIndex = 0; 12166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar pattern[32]; 12176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text[128]; 12186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 12196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UStringSearch *strsrch; 12206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(pattern, 0, 32*sizeof(UChar)); 12216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(text, 0, 128*sizeof(UChar)); 12226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org open(&status); 12246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 12256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 12266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 12276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (usearch_getOffset(NULL) != USEARCH_DONE) { 12296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("usearch_getOffset(NULL) expected USEARCH_DONE\n"); 12306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org strsrch = usearch_openFromCollator(pattern, 16, text, 32, EN_US_, NULL, 12326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &status); 12336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* testing out of bounds error */ 12346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setOffset(strsrch, -1, &status); 12356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_SUCCESS(status)) { 12366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error expecting set offset error\n"); 12376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setOffset(strsrch, 128, &status); 12396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_SUCCESS(status)) { 12406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error expecting set offset error\n"); 12416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (BASIC[searchDataIndex].text != NULL) { 12436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int count = 0; 12446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org SearchData search = BASIC[searchDataIndex ++]; 12456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t matchindex = search.offset[count]; 12466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t textlength; 12476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(search.text, text, 128); 12496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(search.pattern, pattern, 32); 12506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 12516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setText(strsrch, text, -1, &status); 12526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setPattern(strsrch, pattern, -1, &status); 12536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_setStrength(usearch_getCollator(strsrch), search.strength); 12546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_reset(strsrch); 12556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (U_SUCCESS(status) && matchindex >= 0) { 12566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t matchlength = search.size[count]; 12576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_next(strsrch, &status); 12586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (matchindex != usearch_getMatchedStart(strsrch) || 12596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org matchlength != (uint32_t)usearch_getMatchedLength(strsrch)) { 12606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char *str = toCharString(usearch_getText(strsrch, 12616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &textlength)); 12626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Text: %s\n", str); 12636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str = toCharString(usearch_getPattern(strsrch, &textlength)); 12646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Pattern: %s\n", str); 12656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error match found at %d %d\n", 12666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getMatchedStart(strsrch), 12676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getMatchedLength(strsrch)); 12686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 12696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setOffset(strsrch, matchindex + matchlength, &status); 12716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_previous(strsrch, &status); 12726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (matchindex != usearch_getMatchedStart(strsrch) || 12736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org matchlength != (uint32_t)usearch_getMatchedLength(strsrch)) { 12746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char *str = toCharString(usearch_getText(strsrch, 12756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &textlength)); 12766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Text: %s\n", str); 12776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str = toCharString(usearch_getPattern(strsrch, &textlength)); 12786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Pattern: %s\n", str); 12796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error match found at %d %d\n", 12806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getMatchedStart(strsrch), 12816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getMatchedLength(strsrch)); 12826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 12836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setOffset(strsrch, matchindex + matchlength, &status); 12856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org matchindex = search.offset[count + 1] == -1 ? -1 : 12866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org search.offset[count + 2]; 12876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (search.offset[count + 1] != -1) { 12886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setOffset(strsrch, search.offset[count + 1] + 1, 12896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &status); 12906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (usearch_getOffset(strsrch) != search.offset[count + 1] + 1) { 12916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting offset\n"); 12926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 12936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count += 2; 12976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_next(strsrch, &status); 12996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (usearch_getMatchedStart(strsrch) != USEARCH_DONE) { 13006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char *str = toCharString(usearch_getText(strsrch, &textlength)); 13016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Text: %s\n", str); 13026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str = toCharString(usearch_getPattern(strsrch, &textlength)); 13036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Pattern: %s\n", str); 13046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error match found at %d %d\n", 13056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getMatchedStart(strsrch), 13066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getMatchedLength(strsrch)); 13076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 13086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_setStrength(usearch_getCollator(strsrch), UCOL_TERTIARY); 13116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 13126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org close(); 13136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 13146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestGetSetAttribute(void) 13166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 13176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 13186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar pattern[32]; 13196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text[128]; 13206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UStringSearch *strsrch; 13216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(pattern, 0, 32*sizeof(UChar)); 13236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(text, 0, 128*sizeof(UChar)); 13246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org open(&status); 13266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 13276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 13286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 13296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (usearch_getAttribute(NULL, USEARCH_OVERLAP) != USEARCH_DEFAULT || 13316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getAttribute(NULL, USEARCH_CANONICAL_MATCH) != 13326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org USEARCH_DEFAULT) { 13336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err( 13346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "Attributes for NULL string search should be USEARCH_DEFAULT\n"); 13356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org strsrch = usearch_openFromCollator(pattern, 16, text, 32, EN_US_, NULL, 13376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &status); 13386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 13396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error opening search %s\n", u_errorName(status)); 13406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 13416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setAttribute(strsrch, USEARCH_OVERLAP, USEARCH_DEFAULT, &status); 13446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status) || 13456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getAttribute(strsrch, USEARCH_OVERLAP) != USEARCH_OFF) { 13466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting overlap to the default\n"); 13476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setAttribute(strsrch, USEARCH_OVERLAP, USEARCH_ON, &status); 13496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status) || 13506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getAttribute(strsrch, USEARCH_OVERLAP) != USEARCH_ON) { 13516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting overlap true\n"); 13526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setAttribute(strsrch, USEARCH_OVERLAP, USEARCH_OFF, &status); 13546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status) || 13556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getAttribute(strsrch, USEARCH_OVERLAP) != USEARCH_OFF) { 13566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting overlap false\n"); 13576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setAttribute(strsrch, USEARCH_OVERLAP, 13596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org USEARCH_ATTRIBUTE_VALUE_COUNT, &status); 13606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_SUCCESS(status)) { 13616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting overlap to illegal value\n"); 13626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 13646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_DEFAULT, 13656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &status); 13666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status) || 13676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getAttribute(strsrch, USEARCH_CANONICAL_MATCH) != 13686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org USEARCH_OFF) { 13696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting canonical match to the default\n"); 13706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON, 13726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &status); 13736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status) || 13746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getAttribute(strsrch, USEARCH_CANONICAL_MATCH) != 13756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org USEARCH_ON) { 13766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting canonical match true\n"); 13776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_OFF, 13796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &status); 13806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status) || 13816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getAttribute(strsrch, USEARCH_CANONICAL_MATCH) != 13826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org USEARCH_OFF) { 13836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting canonical match false\n"); 13846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, 13866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org USEARCH_ATTRIBUTE_VALUE_COUNT, &status); 13876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_SUCCESS(status)) { 13886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting canonical match to illegal value\n"); 13896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 13916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setAttribute(strsrch, USEARCH_ATTRIBUTE_COUNT, USEARCH_DEFAULT, 13926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &status); 13936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_SUCCESS(status)) { 13946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting illegal attribute success\n"); 13956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 13986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org close(); 13996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 14006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestGetMatch(void) 14026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 14036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int count = 0; 14046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 14056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text[128]; 14066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar pattern[32]; 14076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org SearchData search = MATCH[0]; 14086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t matchindex = search.offset[count]; 14096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UStringSearch *strsrch; 14106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t textlength; 14116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar matchtext[128]; 14126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org open(&status); 14146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 14156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 14166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 14176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (usearch_getMatchedStart(NULL) != USEARCH_DONE || 14206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getMatchedLength(NULL) != USEARCH_DONE) { 14216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err( 14226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "Expected start and length of NULL string search should be USEARCH_DONE\n"); 14236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(search.text, text, 128); 14266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(search.pattern, pattern, 32); 14276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org strsrch = usearch_openFromCollator(pattern, -1, text, -1, EN_US_, 14286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org NULL, &status); 14296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 14306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error opening string search %s\n", u_errorName(status)); 14316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (strsrch != NULL) { 14326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 14336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 14356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (U_SUCCESS(status) && matchindex >= 0) { 14386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t matchlength = search.size[count]; 14396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_next(strsrch, &status); 14406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (matchindex != usearch_getMatchedStart(strsrch) || 14416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org matchlength != usearch_getMatchedLength(strsrch)) { 14426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char *str = toCharString(usearch_getText(strsrch, &textlength)); 14436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Text: %s\n", str); 14446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str = toCharString(usearch_getPattern(strsrch, &textlength)); 14456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Pattern: %s\n", str); 14466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error match found at %d %d\n", 14476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getMatchedStart(strsrch), 14486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getMatchedLength(strsrch)); 14496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 14506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count ++; 14526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 14546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (usearch_getMatchedText(NULL, matchtext, 128, &status) != 14556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org USEARCH_DONE || U_SUCCESS(status)){ 14566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error expecting errors with NULL string search\n"); 14576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 14596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (usearch_getMatchedText(strsrch, NULL, 0, &status) != 14606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (int32_t)matchlength || U_SUCCESS(status)){ 14616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error pre-flighting match length\n"); 14626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 14646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (usearch_getMatchedText(strsrch, matchtext, 0, &status) != 14656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (int32_t)matchlength || U_SUCCESS(status)){ 14666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error getting match text with buffer size 0\n"); 14676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 14696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (usearch_getMatchedText(strsrch, matchtext, matchlength, &status) 14706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org != (int32_t)matchlength || matchtext[matchlength - 1] == 0 || 14716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_FAILURE(status)){ 14726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error getting match text with exact size\n"); 14736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 14756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (usearch_getMatchedText(strsrch, matchtext, 128, &status) != 14766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (int32_t) matchlength || U_FAILURE(status) || 14776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memcmp(matchtext, 14786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getText(strsrch, &textlength) + matchindex, 14796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org matchlength * sizeof(UChar)) != 0 || 14806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org matchtext[matchlength] != 0) { 14816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error getting matched text\n"); 14826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org matchindex = search.offset[count]; 14856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 14876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_next(strsrch, &status); 14886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (usearch_getMatchedStart(strsrch) != USEARCH_DONE || 14896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getMatchedLength(strsrch) != 0) { 14906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error end of match not found\n"); 14916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 14936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (usearch_getMatchedText(strsrch, matchtext, 128, &status) != 14946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org USEARCH_DONE) { 14956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error getting null matches\n"); 14966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 14986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org close(); 14996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 15006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestSetMatch(void) 15026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 15036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int count = 0; 15046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 15056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org open(&status); 15066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 15076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 15086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 15096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (MATCH[count].text != NULL) { 15116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org SearchData search = MATCH[count]; 15126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int size = 0; 15136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int offsetIndex = 0; 15146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text[128]; 15156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar pattern[32]; 15166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UStringSearch *strsrch; 15176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 15186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (usearch_first(NULL, &status) != USEARCH_DONE || 15206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_last(NULL, &status) != USEARCH_DONE) { 15216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error getting the first and last match of a NULL string search\n"); 15226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(search.text, text, 128); 15246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(search.pattern, pattern, 32); 15256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org strsrch = usearch_openFromCollator(pattern, -1, text, -1, EN_US_, 15266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org NULL, &status); 15276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 15286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error opening string search %s\n", u_errorName(status)); 15296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (strsrch != NULL) { 15306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 15316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 15336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org size = 0; 15366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (search.offset[size] != -1) { 15376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org size ++; 15386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (usearch_first(strsrch, &status) != search.offset[0] || 15416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_FAILURE(status)) { 15426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error getting first match\n"); 15436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (usearch_last(strsrch, &status) != search.offset[size -1] || 15456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_FAILURE(status)) { 15466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error getting last match\n"); 15476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (offsetIndex < size) { 15506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (offsetIndex + 2 < size) { 15516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (usearch_following(strsrch, search.offset[offsetIndex + 2] - 1, 15526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &status) != search.offset[offsetIndex + 2] || 15536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_FAILURE(status)) { 15546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error getting following match at index %d\n", 15556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org search.offset[offsetIndex + 2] - 1); 15566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (offsetIndex + 1 < size) { 15596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (usearch_preceding(strsrch, search.offset[offsetIndex + 1] + 15606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org search.size[offsetIndex + 1] + 1, 15616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &status) != search.offset[offsetIndex + 1] || 15626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_FAILURE(status)) { 15636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error getting preceeding match at index %d\n", 15646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org search.offset[offsetIndex + 1] + 1); 15656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org offsetIndex += 2; 15686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 15706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (usearch_following(strsrch, u_strlen(text), &status) != 15716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org USEARCH_DONE) { 15726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error expecting out of bounds match\n"); 15736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (usearch_preceding(strsrch, 0, &status) != USEARCH_DONE) { 15756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error expecting out of bounds match\n"); 15766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count ++; 15786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 15796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org close(); 15816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 15826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestReset(void) 15846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 15856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 15866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text[] = {0x66, 0x69, 0x73, 0x68, 0x20, 15876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x66, 0x69, 0x73, 0x68}; 15886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar pattern[] = {0x73}; 15896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UStringSearch *strsrch; 15906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org open(&status); 15926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 15936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 15946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 15956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org strsrch = usearch_openFromCollator(pattern, 1, text, 9, 15976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org EN_US_, NULL, &status); 15986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 15996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error opening string search %s\n", u_errorName(status)); 16006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (strsrch != NULL) { 16016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 16026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 16046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setAttribute(strsrch, USEARCH_OVERLAP, USEARCH_ON, &status); 16066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON, 16076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &status); 16086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setOffset(strsrch, 9, &status); 16096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 16106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting attributes and offsets\n"); 16116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else { 16136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_reset(strsrch); 16146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (usearch_getAttribute(strsrch, USEARCH_OVERLAP) != USEARCH_OFF || 16156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getAttribute(strsrch, USEARCH_CANONICAL_MATCH) != 16166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org USEARCH_OFF || 16176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getOffset(strsrch) != 0 || 16186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getMatchedLength(strsrch) != 0 || 16196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getMatchedStart(strsrch) != USEARCH_DONE) { 16206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error resetting string search\n"); 16216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_previous(strsrch, &status); 16236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (usearch_getMatchedStart(strsrch) != 7 || 16246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getMatchedLength(strsrch) != 1) { 16256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error resetting string search\n"); 16266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 16296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org close(); 16306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 16316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestSupplementary(void) 16336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 16346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int count = 0; 16356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 16366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org open(&status); 16376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 16386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 16396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 16406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (SUPPLEMENTARY[count].text != NULL) { 16426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqual(SUPPLEMENTARY[count])) { 16436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error at test number %d\n", count); 16446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count ++; 16466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org close(); 16486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 16496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestContraction(void) 16516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 16526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar rules[128]; 16536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar pattern[128]; 16546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text[128]; 16556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCollator *collator; 16566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 16576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int count = 0; 16586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UStringSearch *strsrch; 16596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(rules, 0, 128*sizeof(UChar)); 16606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(pattern, 0, 128*sizeof(UChar)); 16616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(text, 0, 128*sizeof(UChar)); 16626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(CONTRACTIONRULE, rules, 128); 16646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org collator = ucol_openRules(rules, u_strlen(rules), UCOL_ON, 16656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCOL_TERTIARY, NULL, &status); 16666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status == U_FILE_ACCESS_ERROR) { 16676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("Is your data around?\n"); 16686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 16696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if(U_FAILURE(status)) { 16706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error opening collator %s\n", u_errorName(status)); 16716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 16726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org strsrch = usearch_openFromCollator(pattern, 1, text, 1, collator, NULL, 16746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &status); 16756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 16766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error opening string search %s\n", u_errorName(status)); 16776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (CONTRACTION[count].text != NULL) { 16806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(CONTRACTION[count].text, text, 128); 16816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(CONTRACTION[count].pattern, pattern, 128); 16826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setText(strsrch, text, -1, &status); 16836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setPattern(strsrch, pattern, -1, &status); 16846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqualWithUStringSearch(strsrch, CONTRACTION[count])) { 16856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error at test number %d\n", count); 16866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count ++; 16886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 16906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_close(collator); 16916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 16926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestIgnorable(void) 16946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 16956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar rules[128]; 16966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar pattern[128]; 16976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text[128]; 16986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCollator *collator; 16996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 17006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UStringSearch *strsrch; 17016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t count = 0; 17026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(rules, 0, 128*sizeof(UChar)); 17046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(pattern, 0, 128*sizeof(UChar)); 17056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(text, 0, 128*sizeof(UChar)); 17066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(IGNORABLERULE, rules, 128); 17086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org collator = ucol_openRules(rules, u_strlen(rules), UCOL_ON, 17096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org IGNORABLE[count].strength, NULL, &status); 17106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status == U_FILE_ACCESS_ERROR) { 17116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("Is your data around?\n"); 17126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 17136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if(U_FAILURE(status)) { 17146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error opening collator %s\n", u_errorName(status)); 17156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 17166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 17176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org strsrch = usearch_openFromCollator(pattern, 1, text, 1, collator, NULL, 17186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &status); 17196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 17206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error opening string search %s\n", u_errorName(status)); 17216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 17226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (IGNORABLE[count].text != NULL) { 17246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(IGNORABLE[count].text, text, 128); 17256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(IGNORABLE[count].pattern, pattern, 128); 17266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setText(strsrch, text, -1, &status); 17276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setPattern(strsrch, pattern, -1, &status); 17286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqualWithUStringSearch(strsrch, IGNORABLE[count])) { 17296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error at test number %d\n", count); 17306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 17316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count ++; 17326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 17336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 17346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_close(collator); 17356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 17366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestDiacriticMatch(void) 17386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 17396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar pattern[128]; 17406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text[128]; 17416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 17426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UStringSearch *strsrch = NULL; 17436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCollator *coll = NULL; 17446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t count = 0; 17456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org SearchData search; 17466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(pattern, 0, 128*sizeof(UChar)); 17486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(text, 0, 128*sizeof(UChar)); 17496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org strsrch = usearch_open(pattern, 1, text, 1, uloc_getDefault(), NULL, &status); 17516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 17526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "Error opening string search %s\n", u_errorName(status)); 17536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 17546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 17556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org search = DIACRITICMATCH[count]; 17576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (search.text != NULL) { 17586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (search.collator != NULL) { 17596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org coll = ucol_openFromShortString(search.collator, FALSE, NULL, &status); 17606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 17616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Always use "en_US" because some of these tests fail in Danish locales. */ 17626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org coll = ucol_open("en_US"/*uloc_getDefault()*/, &status); 17636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_setStrength(coll, search.strength); 17646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 17656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 17666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error opening string search collator(\"%s\") %s\n", search.collator, u_errorName(status)); 17676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 17686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 17696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setCollator(strsrch, coll, &status); 17716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 17726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting string search collator %s\n", u_errorName(status)); 17736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 17746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 17756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(search.text, text, 128); 17776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(search.pattern, pattern, 128); 17786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setText(strsrch, text, -1, &status); 17796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setPattern(strsrch, pattern, -1, &status); 17806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqualWithUStringSearch(strsrch, search)) { 17816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error at test number %d\n", count); 17826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 17836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_close(coll); 17846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org search = DIACRITICMATCH[++count]; 17866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 17876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 17886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 17896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestCanonical(void) 17916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 17926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int count = 0; 17936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 17946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org open(&status); 17956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 17966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 17976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 17986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 17996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (BASICCANONICAL[count].text != NULL) { 18006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertCanonicalEqual(BASICCANONICAL[count])) { 18016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error at test number %d\n", count); 18026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count ++; 18046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org close(); 18066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 18076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestNormCanonical(void) 18096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 18106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int count = 0; 18116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 18126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org open(&status); 18136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 18146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 18156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 18166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_setAttribute(EN_US_, UCOL_NORMALIZATION_MODE, UCOL_ON, &status); 18186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count = 0; 18196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (NORMCANONICAL[count].text != NULL) { 18206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertCanonicalEqual(NORMCANONICAL[count])) { 18216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error at test number %d\n", count); 18226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count ++; 18246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_setAttribute(EN_US_, UCOL_NORMALIZATION_MODE, UCOL_OFF, &status); 18266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org close(); 18276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 18286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestStrengthCanonical(void) 18306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 18316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int count = 0; 18326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 18336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org open(&status); 18346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 18356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 18366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 18376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (STRENGTHCANONICAL[count].text != NULL) { 18396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertCanonicalEqual(STRENGTHCANONICAL[count])) { 18406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error at test number %d\n", count); 18416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count ++; 18436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org close(); 18456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 18466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestBreakIteratorCanonical(void) { 18486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 18496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int count = 0; 18506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CHECK_BREAK("x"); 18526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_BREAK_ITERATION 18546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org open(&status); 18566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 18576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 18586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 18596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (count < 4) { 18616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 0-3 test are fixed */ 18626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar pattern[32]; 18636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text[128]; 18646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const SearchData *search = &(BREAKITERATORCANONICAL[count]); 18656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCollator *collator = getCollator(search->collator); 18666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBreakIterator *breaker = getBreakIterator(search->breaker); 18676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UStringSearch *strsrch; 18686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(search->text, text, 128); 18706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(search->pattern, pattern, 32); 18716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_setStrength(collator, search->strength); 18726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org strsrch = usearch_openFromCollator(pattern, -1, text, -1, collator, 18746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org breaker, &status); 18756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status == U_FILE_ACCESS_ERROR) { 18766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("Is your data around?\n"); 18776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTBREAKITERATOR; 18786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if(U_FAILURE(status)) { 18796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error opening searcher\n"); 18806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTBREAKITERATOR; 18816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON, 18836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &status); 18846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status) || 18856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getBreakIterator(strsrch) != breaker) { 18866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting break iterator\n"); 18876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 18886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTBREAKITERATOR; 18896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqualWithUStringSearch(strsrch, *search)) { 18916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_setStrength(collator, UCOL_TERTIARY); 18926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 18936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTBREAKITERATOR; 18946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org search = &(BREAKITERATOREXACT[count + 1]); 18966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org breaker = getBreakIterator(search->breaker); 18976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setBreakIterator(strsrch, breaker, &status); 18986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status) || usearch_getBreakIterator(strsrch) != breaker) { 18996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting break iterator\n"); 19006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 19016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTBREAKITERATOR; 19026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_reset(strsrch); 19046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON, 19056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &status); 19066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqualWithUStringSearch(strsrch, *search)) { 19076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error at test number %d\n", count); 19086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 19096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTBREAKITERATOR; 19106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 19126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count += 2; 19136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count = 0; 19156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (BREAKITERATORCANONICAL[count].text != NULL) { 19166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqual(BREAKITERATORCANONICAL[count])) { 19176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error at test number %d\n", count); 19186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTBREAKITERATOR; 19196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count ++; 19216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgENDTESTBREAKITERATOR: 19246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org close(); 19256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 19266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 19276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestVariableCanonical(void) 19296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 19306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int count = 0; 19316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 19326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org open(&status); 19336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 19346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 19356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 19366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_setAttribute(EN_US_, UCOL_ALTERNATE_HANDLING, UCOL_SHIFTED, &status); 19386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 19396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting collation alternate attribute %s\n", 19406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_errorName(status)); 19416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (VARIABLE[count].text != NULL) { 19436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("variable %d\n", count); 19446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertCanonicalEqual(VARIABLE[count])) { 19456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error at test number %d\n", count); 19466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count ++; 19486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_setAttribute(EN_US_, UCOL_ALTERNATE_HANDLING, 19506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCOL_NON_IGNORABLE, &status); 19516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org close(); 19526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 19536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestOverlapCanonical(void) 19556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 19566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int count = 0; 19576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 19586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org open(&status); 19596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 19606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 19616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 19626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (OVERLAPCANONICAL[count].text != NULL) { 19646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqualWithAttribute(OVERLAPCANONICAL[count], USEARCH_ON, 19656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org USEARCH_ON)) { 19666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error at overlap test number %d\n", count); 19676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count ++; 19696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count = 0; 19716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (NONOVERLAP[count].text != NULL) { 19726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertCanonicalEqual(NONOVERLAPCANONICAL[count])) { 19736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error at non overlap test number %d\n", count); 19746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count ++; 19766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count = 0; 19796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (count < 1) { 19806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar pattern[32]; 19816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text[128]; 19826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const SearchData *search = &(OVERLAPCANONICAL[count]); 19836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCollator *collator = getCollator(search->collator); 19846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UStringSearch *strsrch; 19856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 19866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(search->text, text, 128); 19886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(search->pattern, pattern, 32); 19896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org strsrch = usearch_openFromCollator(pattern, -1, text, -1, collator, 19906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org NULL, &status); 19916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status == U_FILE_ACCESS_ERROR) { 19926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("Is your data around?\n"); 19936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 19946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if(U_FAILURE(status)) { 19956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error opening searcher\n"); 19966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 19976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON, 19996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &status); 20006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setAttribute(strsrch, USEARCH_OVERLAP, USEARCH_ON, &status); 20016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status) || 20026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getAttribute(strsrch, USEARCH_OVERLAP) != USEARCH_ON) { 20036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting overlap option\n"); 20046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqualWithUStringSearch(strsrch, *search)) { 20066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 20076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 20086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org search = &(NONOVERLAPCANONICAL[count]); 20106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setAttribute(strsrch, USEARCH_OVERLAP, USEARCH_OFF, &status); 20116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status) || 20126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getAttribute(strsrch, USEARCH_OVERLAP) != USEARCH_OFF) { 20136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting overlap option\n"); 20146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_reset(strsrch); 20166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqualWithUStringSearch(strsrch, *search)) { 20176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 20186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error at test number %d\n", count); 20196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count ++; 20226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 20236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org close(); 20256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 20266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestCollatorCanonical(void) 20286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 20296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* test collator that thinks "o" and "p" are the same thing */ 20306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar rules[32]; 20316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCollator *tailored = NULL; 20326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 20336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar pattern[32]; 20346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text[128]; 20356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UStringSearch *strsrch; 20366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org open(&status); 20386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 20396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 20406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 20416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(COLLATORCANONICAL[0].text, text, 128); 20436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(COLLATORCANONICAL[0].pattern, pattern, 32); 20446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org strsrch = usearch_openFromCollator(pattern, -1, text, -1, EN_US_, 20466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org NULL, &status); 20476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status == U_FILE_ACCESS_ERROR) { 20486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("Is your data around?\n"); 20496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 20506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if(U_FAILURE(status)) { 20516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error opening searcher\n"); 20526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 20536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON, 20556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &status); 20566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 20576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error opening string search %s\n", u_errorName(status)); 20586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqualWithUStringSearch(strsrch, COLLATORCANONICAL[0])) { 20606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTCOLLATOR; 20616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(TESTCOLLATORRULE, rules, 32); 20646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org tailored = ucol_openRules(rules, -1, UCOL_ON, 20656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org COLLATORCANONICAL[1].strength, NULL, &status); 20666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 20676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error opening rule based collator %s\n", u_errorName(status)); 20686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setCollator(strsrch, tailored, &status); 20716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status) || usearch_getCollator(strsrch) != tailored) { 20726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting rule based collator\n"); 20736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_reset(strsrch); 20756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON, 20766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &status); 20776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqualWithUStringSearch(strsrch, COLLATORCANONICAL[1])) { 20786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTCOLLATOR; 20796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setCollator(strsrch, EN_US_, &status); 20826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_reset(strsrch); 20836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON, 20846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &status); 20856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status) || usearch_getCollator(strsrch) != EN_US_) { 20866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting rule based collator\n"); 20876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqualWithUStringSearch(strsrch, COLLATORCANONICAL[0])) { 20896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTCOLLATOR; 20906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgENDTESTCOLLATOR: 20936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 20946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (tailored != NULL) { 20956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_close(tailored); 20966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org close(); 20986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 20996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestPatternCanonical(void) 21016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 21026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UStringSearch *strsrch; 21036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar pattern[32]; 21046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text[128]; 21056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *temp; 21066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t templength; 21076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 21086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org open(&status); 21106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 21116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 21126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 21136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 21146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(PATTERNCANONICAL[0].text, text, 128); 21156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(PATTERNCANONICAL[0].pattern, pattern, 32); 21166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_setStrength(EN_US_, PATTERNCANONICAL[0].strength); 21186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org strsrch = usearch_openFromCollator(pattern, -1, text, -1, EN_US_, 21196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org NULL, &status); 21206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON, 21216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &status); 21226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 21236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error opening string search %s\n", u_errorName(status)); 21246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTPATTERN; 21256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 21266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org temp = usearch_getPattern(strsrch, &templength); 21276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (u_strcmp(pattern, temp) != 0) { 21286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting pattern\n"); 21296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 21306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqualWithUStringSearch(strsrch, PATTERNCANONICAL[0])) { 21316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTPATTERN; 21326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 21336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(PATTERNCANONICAL[1].pattern, pattern, 32); 21356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setPattern(strsrch, pattern, -1, &status); 21366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org temp = usearch_getPattern(strsrch, &templength); 21376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (u_strcmp(pattern, temp) != 0) { 21386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting pattern\n"); 21396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTPATTERN; 21406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 21416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_reset(strsrch); 21426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON, 21436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &status); 21446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 21456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting pattern %s\n", u_errorName(status)); 21466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 21476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqualWithUStringSearch(strsrch, PATTERNCANONICAL[1])) { 21486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTPATTERN; 21496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 21506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(PATTERNCANONICAL[0].pattern, pattern, 32); 21526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setPattern(strsrch, pattern, -1, &status); 21536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org temp = usearch_getPattern(strsrch, &templength); 21546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (u_strcmp(pattern, temp) != 0) { 21556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting pattern\n"); 21566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTPATTERN; 21576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 21586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_reset(strsrch); 21596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON, 21606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &status); 21616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 21626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting pattern %s\n", u_errorName(status)); 21636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 21646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqualWithUStringSearch(strsrch, PATTERNCANONICAL[0])) { 21656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTPATTERN; 21666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 21676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgENDTESTPATTERN: 21686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_setStrength(EN_US_, UCOL_TERTIARY); 21696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (strsrch != NULL) { 21706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 21716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 21726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org close(); 21736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 21746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestTextCanonical(void) 21766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 21776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UStringSearch *strsrch; 21786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar pattern[32]; 21796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text[128]; 21806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *temp; 21816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t templength; 21826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 21836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(TEXTCANONICAL[0].text, text, 128); 21856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(TEXTCANONICAL[0].pattern, pattern, 32); 21866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org open(&status); 21886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 21896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 21906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 21916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 21926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org strsrch = usearch_openFromCollator(pattern, -1, text, -1, EN_US_, 21936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org NULL, &status); 21946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON, 21956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &status); 21966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 21986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error opening string search %s\n", u_errorName(status)); 21996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTPATTERN; 22006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 22016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org temp = usearch_getText(strsrch, &templength); 22026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (u_strcmp(text, temp) != 0) { 22036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting text\n"); 22046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 22056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqualWithUStringSearch(strsrch, TEXTCANONICAL[0])) { 22066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTPATTERN; 22076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 22086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(TEXTCANONICAL[1].text, text, 32); 22106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setText(strsrch, text, -1, &status); 22116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org temp = usearch_getText(strsrch, &templength); 22126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (u_strcmp(text, temp) != 0) { 22136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting text\n"); 22146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTPATTERN; 22156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 22166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 22176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting text %s\n", u_errorName(status)); 22186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 22196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqualWithUStringSearch(strsrch, TEXTCANONICAL[1])) { 22206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTPATTERN; 22216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 22226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(TEXTCANONICAL[0].text, text, 32); 22246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setText(strsrch, text, -1, &status); 22256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org temp = usearch_getText(strsrch, &templength); 22266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (u_strcmp(text, temp) != 0) { 22276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting text\n"); 22286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTPATTERN; 22296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 22306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 22316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting pattern %s\n", u_errorName(status)); 22326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 22336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqualWithUStringSearch(strsrch, TEXTCANONICAL[0])) { 22346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto ENDTESTPATTERN; 22356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 22366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgENDTESTPATTERN: 22376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (strsrch != NULL) { 22386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 22396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 22406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org close(); 22416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 22426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestCompositeBoundariesCanonical(void) 22446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 22456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int count = 0; 22466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 22476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org open(&status); 22486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 22496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 22506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 22516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 22526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (COMPOSITEBOUNDARIESCANONICAL[count].text != NULL) { 22536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("composite %d\n", count); 22546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertCanonicalEqual(COMPOSITEBOUNDARIESCANONICAL[count])) { 22556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error at test number %d\n", count); 22566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 22576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count ++; 22586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 22596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org close(); 22606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 22616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestGetSetOffsetCanonical(void) 22636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 22646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int searchDataIndex = 0; 22656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar pattern[32]; 22666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text[128]; 22676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 22686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UStringSearch *strsrch; 22696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCollator *collator; 22706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(pattern, 0, 32*sizeof(UChar)); 22726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(text, 0, 128*sizeof(UChar)); 22736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org open(&status); 22756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 22766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 22776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 22786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 22796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org strsrch = usearch_openFromCollator(pattern, 16, text, 32, EN_US_, NULL, 22806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &status); 22816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org collator = usearch_getCollator(strsrch); 22836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_setAttribute(collator, UCOL_NORMALIZATION_MODE, UCOL_ON, &status); 22846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON, 22866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &status); 22876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* testing out of bounds error */ 22896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setOffset(strsrch, -1, &status); 22906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_SUCCESS(status)) { 22916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error expecting set offset error\n"); 22926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 22936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setOffset(strsrch, 128, &status); 22946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_SUCCESS(status)) { 22956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error expecting set offset error\n"); 22966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 22976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (BASICCANONICAL[searchDataIndex].text != NULL) { 22986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int count = 0; 22996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org SearchData search = BASICCANONICAL[searchDataIndex ++]; 23006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t matchindex = search.offset[count]; 23016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t textlength; 23026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (BASICCANONICAL[searchDataIndex].text == NULL) { 23046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* skip the last one */ 23056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 23066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 23076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(search.text, text, 128); 23096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(search.pattern, pattern, 32); 23106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 23116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setText(strsrch, text, -1, &status); 23126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setPattern(strsrch, pattern, -1, &status); 23136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (U_SUCCESS(status) && matchindex >= 0) { 23146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t matchlength = search.size[count]; 23156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_next(strsrch, &status); 23166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (matchindex != usearch_getMatchedStart(strsrch) || 23176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org matchlength != (uint32_t)usearch_getMatchedLength(strsrch)) { 23186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char *str = toCharString(usearch_getText(strsrch, 23196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &textlength)); 23206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Text: %s\n", str); 23216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str = toCharString(usearch_getPattern(strsrch, &textlength)); 23226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Pattern: %s\n", str); 23236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error match found at %d %d\n", 23246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getMatchedStart(strsrch), 23256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getMatchedLength(strsrch)); 23266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto bail; 23276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 23286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org matchindex = search.offset[count + 1] == -1 ? -1 : 23296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org search.offset[count + 2]; 23306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (search.offset[count + 1] != -1) { 23316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setOffset(strsrch, search.offset[count + 1] + 1, 23326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &status); 23336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (usearch_getOffset(strsrch) != search.offset[count + 1] + 1) { 23346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error setting offset\n"); 23356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto bail; 23366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 23376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 23386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count += 2; 23406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 23416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_next(strsrch, &status); 23426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (usearch_getMatchedStart(strsrch) != USEARCH_DONE) { 23436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char *str = toCharString(usearch_getText(strsrch, &textlength)); 23446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Text: %s\n", str); 23456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str = toCharString(usearch_getPattern(strsrch, &textlength)); 23466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Pattern: %s\n", str); 23476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error match found at %d %d\n", 23486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getMatchedStart(strsrch), 23496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_getMatchedLength(strsrch)); 23506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto bail; 23516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 23526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 23536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgbail: 23556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_setAttribute(collator, UCOL_NORMALIZATION_MODE, UCOL_OFF, &status); 23566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 23576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org close(); 23586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 23596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestSupplementaryCanonical(void) 23616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 23626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int count = 0; 23636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 23646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org open(&status); 23656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 23666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 23676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 23686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 23696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (SUPPLEMENTARYCANONICAL[count].text != NULL) { 23706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertCanonicalEqual(SUPPLEMENTARYCANONICAL[count])) { 23716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error at test number %d\n", count); 23726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 23736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count ++; 23746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 23756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org close(); 23766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 23776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestContractionCanonical(void) 23796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 23806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar rules[128]; 23816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar pattern[128]; 23826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text[128]; 23836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCollator *collator = NULL; 23846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 23856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int count = 0; 23866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UStringSearch *strsrch = NULL; 23876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(rules, 0, 128*sizeof(UChar)); 23886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(pattern, 0, 128*sizeof(UChar)); 23896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(text, 0, 128*sizeof(UChar)); 23906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(CONTRACTIONRULE, rules, 128); 23926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org collator = ucol_openRules(rules, u_strlen(rules), UCOL_ON, 23936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCOL_TERTIARY, NULL, &status); 23946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status == U_FILE_ACCESS_ERROR) { 23956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("Is your data around?\n"); 23966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 23976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if(U_FAILURE(status)) { 23986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error opening collator %s\n", u_errorName(status)); 23996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 24006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 24016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org strsrch = usearch_openFromCollator(pattern, 1, text, 1, collator, NULL, 24026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &status); 24036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON, 24046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &status); 24056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 24066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error opening string search %s\n", u_errorName(status)); 24076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 24086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (CONTRACTIONCANONICAL[count].text != NULL) { 24106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(CONTRACTIONCANONICAL[count].text, text, 128); 24116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(CONTRACTIONCANONICAL[count].pattern, pattern, 128); 24126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setText(strsrch, text, -1, &status); 24136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setPattern(strsrch, pattern, -1, &status); 24146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertEqualWithUStringSearch(strsrch, 24156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CONTRACTIONCANONICAL[count])) { 24166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error at test number %d\n", count); 24176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 24186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count ++; 24196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 24206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 24216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_close(collator); 24226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 24236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestNumeric(void) { 24256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCollator *coll = NULL; 24266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UStringSearch *strsrch = NULL; 24276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 24286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar pattern[128]; 24306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text[128]; 24316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(pattern, 0, 128*sizeof(UChar)); 24326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(text, 0, 128*sizeof(UChar)); 24336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org coll = ucol_open("", &status); 24356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) { 24366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("Could not open UCA. Is your data around?\n"); 24376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 24386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 24396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_setAttribute(coll, UCOL_NUMERIC_COLLATION, UCOL_ON, &status); 24416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org strsrch = usearch_openFromCollator(pattern, 1, text, 1, coll, NULL, &status); 24436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status != U_UNSUPPORTED_ERROR || U_SUCCESS(status)) { 24456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Expected U_UNSUPPORTED_ERROR when trying to instantiate a search object from a CODAN collator, got %s instead\n", u_errorName(status)); 24466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(strsrch) { 24476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(strsrch); 24486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 24496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 24506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_close(coll); 24526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 24546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* This test is for ticket 4038 due to incorrect backward searching when certain patterns have a length > 1 */ 24566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestForwardBackward(void) { 24576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 24586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCollator *coll = NULL; 24596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UStringSearch *search = NULL; 24606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar usrcstr[32], value[4]; 24616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t pos= -1; 24626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t expectedPos = 9; 24636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org coll = ucol_open("en_GB", &status); 24656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 24666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "ucol_open failed: %s\n", u_errorName(status)); 24676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto exitTestForwardBackward; 24686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 24696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_setAttribute(coll, UCOL_STRENGTH, UCOL_PRIMARY, &status); 24706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_setAttribute(coll, UCOL_CASE_LEVEL, UCOL_ON, &status); 24716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_setAttribute(coll, UCOL_ALTERNATE_HANDLING, UCOL_NON_IGNORABLE, &status); 24726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrcpy(usrcstr, "QBitArray::bitarr_data"); /* text */ 24746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrcpy(value, "::"); /* pattern */ 24756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org search = usearch_openFromCollator(value, 2, usrcstr, 22, coll, NULL, &status); 24776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 24786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("usearch_openFromCollator failed: %s\n", u_errorName(status)); 24796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto exitTestForwardBackward; 24806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 24816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_reset(search); 24836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* forward search */ 24846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = usearch_first(search, &status); 24856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (pos != expectedPos) { 24866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Expected search result: %d; Got instead: %d\n", expectedPos, pos); 24876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto exitTestForwardBackward; 24886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 24896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = -1; 24916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_reset(search); 24926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* backward search */ 24936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = usearch_last(search, &status); 24946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (pos != expectedPos) { 24956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Expected search result: %d; Got instead: %d\n", expectedPos, pos); 24966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 24976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgexitTestForwardBackward : 24996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (coll != NULL) { 25006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_close(coll); 25016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 25026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (search != NULL) { 25036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(search); 25046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 25056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 25066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define TEST_ASSERT(x) \ 25086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {if (U_FAILURE(x)) {log_err_status(x, "%s:%d: FAIL: test assertion failure \n", __FILE__, __LINE__);\ 25096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }} 25106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestSearchForNull(void) { 25126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCollator *coll; 25136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode ec; 25146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UStringSearch *search; 25156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int pos; 25166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int len; 25176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int expectedPos; 25186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int expectedLen; 25196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int expectedNum; 25206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int count = 0; 25216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar zerodigit = 0x0030; /* 0 */ 25226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar nulldigit = 0x0000; /* null */ 25236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* static const UChar var[(length)+1]=U_DECLARE_UTF16(cs) */ 25256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define PATTERN_LEN 4 25266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define TEXT_LEN 10 25276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_STRING_DECL(_pattern, "IS 0", PATTERN_LEN); 25296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_STRING_DECL(_text, "_0IS 0 OK?", TEXT_LEN); 25306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar pattern[PATTERN_LEN + 1], text[TEXT_LEN + 1]; 25316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_STRING_INIT(_pattern, "IS 0", PATTERN_LEN); 25336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_STRING_INIT(_text, "_0IS 0 OK?", TEXT_LEN); 25346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org expectedPos = 2; 25356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org expectedLen = 4; 25366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org expectedNum = 1; 25376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (pos = 0; pos < PATTERN_LEN; pos++) { 25396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (_pattern[pos] == zerodigit) { 25406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pattern[pos] = nulldigit; 25416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 25426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pattern[pos] = _pattern[pos]; 25436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 25446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 25456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pattern[PATTERN_LEN] = 0x0000; 25466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (pos = 0; pos < TEXT_LEN; pos++) { 25486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (_text[pos] == zerodigit) { 25496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org text[pos] = nulldigit; 25506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 25516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org text[pos] = _text[pos]; 25526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 25536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 25546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org text[TEXT_LEN] = 0x0000; 25556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ec = U_ZERO_ERROR; 25576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* create a US-English collator */ 25596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org coll = ucol_open("en_US", &ec); 25606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* make sure we didn't fail. */ 25626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT (ec); 25636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_setStrength(coll, UCOL_IDENTICAL); 25656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* open a search looking for 0 */ 25676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org search = usearch_openFromCollator(pattern, PATTERN_LEN, text, 25686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEXT_LEN, coll, NULL, &ec); 25696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT (ec); 25706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (coll != NULL && search != NULL) { 25726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = usearch_first(search, &ec); 25736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org len = usearch_getMatchedLength(search); 25746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (pos != expectedPos) { 25756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Expected search result: %d; Got instead: %d\n", expectedPos, 25766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos); 25776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 25786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (len != expectedLen) { 25806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Expected search result length: %d; Got instead: %d\n", 25816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org expectedLen, len); 25826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 25836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (pos = usearch_first(search, &ec); pos != USEARCH_DONE; pos 25856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org = usearch_next(search, &ec)) { 25866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Match at %d\n", pos); 25876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count += 1; 25886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 25896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (count != expectedNum) { 25916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Expected %d search hits, found %d\n", expectedNum, count); 25926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 25936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 25946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_close(coll); 25966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(search); 25976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 25986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestStrengthIdentical(void) 26006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 26016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCollator *coll; 26026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode ec = U_ZERO_ERROR; 26036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UStringSearch *search; 26046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar pattern[] = {0x05E9, 0x0591, 0x05E9}; 26066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text[] = {0x05E9, 0x0592, 0x05E9}; 26076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t pLen = sizeof (pattern) / sizeof(pattern[0]); 26086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t tLen = sizeof(text) / sizeof (text[0]); 26096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t expectedPos = 0; 26106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t expectedLen = 3; 26116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t pos; 26136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t len; 26146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* create a US-English collator */ 26166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org coll = ucol_open ("en_US", &ec); 26176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* make sure we didn't fail. */ 26196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT (ec); 26206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_setStrength( coll, UCOL_TERTIARY); 26226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* open a search looking for 0 */ 26246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org search = usearch_openFromCollator (pattern, pLen, text, tLen, coll, NULL, &ec); 26256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT (ec); 26266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (coll != NULL && search != NULL) { 26286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = usearch_first(search, &ec); 26296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org len = usearch_getMatchedLength(search); 26306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(pos != expectedPos) { 26326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Expected search result: %d; Got instead: %d\n", expectedPos, pos); 26336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 26346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(len != expectedLen) { 26366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Expected search result length: %d; Got instead: %d\n", expectedLen, len); 26376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 26386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Now try it at strength == UCOL_IDENTICAL */ 26406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_setStrength(coll, UCOL_IDENTICAL); 26416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_reset(search); 26426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = usearch_first(search, &ec); 26446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org len = usearch_getMatchedLength(search); 26456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(pos != -1) { 26476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Expected failure for strentgh = UCOL_IDENTICAL: got %d instead.\n", pos); 26486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 26496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 26506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(search); 26526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_close(coll); 26536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 26546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 26566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* TestUsingSearchCollator 26576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/ 26586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define ARRAY_LENGTH(array) (sizeof(array)/sizeof(array[0])) 26606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef struct { 26626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar * pattern; 26636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const int32_t * offsets; 26646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t offsetsLen; 26656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} PatternAndOffsets; 26666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UChar scKoText[] = { 26686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x0020, 26696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*01*/ 0xAC00, 0x0020, /* simple LV Hangul */ 26706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*03*/ 0xAC01, 0x0020, /* simple LVT Hangul */ 26716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*05*/ 0xAC0F, 0x0020, /* LVTT, last jamo expands for search */ 26726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*07*/ 0xAFFF, 0x0020, /* LLVVVTT, every jamo expands for search */ 26736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*09*/ 0x1100, 0x1161, 0x11A8, 0x0020, /* 0xAC01 as conjoining jamo */ 26746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*13*/ 0x1100, 0x1161, 0x1100, 0x0020, /* 0xAC01 as basic conjoining jamo (per search rules) */ 26756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*17*/ 0x3131, 0x314F, 0x3131, 0x0020, /* 0xAC01 as compatibility jamo */ 26766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*21*/ 0x1100, 0x1161, 0x11B6, 0x0020, /* 0xAC0F as conjoining jamo; last expands for search */ 26776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*25*/ 0x1100, 0x1161, 0x1105, 0x1112, 0x0020, /* 0xAC0F as basic conjoining jamo; last expands for search */ 26786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*30*/ 0x1101, 0x1170, 0x11B6, 0x0020, /* 0xAFFF as conjoining jamo; all expand for search */ 26796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*34*/ 0x00E6, 0x0020, /* small letter ae, expands */ 26806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*36*/ 0x1E4D, 0x0020, /* small letter o with tilde and acute, decomposes */ 26816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0 26826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 26836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UChar scKoPat0[] = { 0xAC01, 0 }; 26856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UChar scKoPat1[] = { 0x1100, 0x1161, 0x11A8, 0 }; /* 0xAC01 as conjoining jamo */ 26866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UChar scKoPat2[] = { 0xAC0F, 0 }; 26876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UChar scKoPat3[] = { 0x1100, 0x1161, 0x1105, 0x1112, 0 }; /* 0xAC0F as basic conjoining jamo */ 26886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UChar scKoPat4[] = { 0xAFFF, 0 }; 26896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UChar scKoPat5[] = { 0x1101, 0x1170, 0x11B6, 0 }; /* 0xAFFF as conjoining jamo */ 26906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const int32_t scKoSrchOff01[] = { 3, 9, 13 }; 26926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const int32_t scKoSrchOff23[] = { 5, 21, 25 }; 26936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const int32_t scKoSrchOff45[] = { 7, 30 }; 26946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const PatternAndOffsets scKoSrchPatternsOffsets[] = { 26966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { scKoPat0, scKoSrchOff01, ARRAY_LENGTH(scKoSrchOff01) }, 26976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { scKoPat1, scKoSrchOff01, ARRAY_LENGTH(scKoSrchOff01) }, 26986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { scKoPat2, scKoSrchOff23, ARRAY_LENGTH(scKoSrchOff23) }, 26996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { scKoPat3, scKoSrchOff23, ARRAY_LENGTH(scKoSrchOff23) }, 27006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { scKoPat4, scKoSrchOff45, ARRAY_LENGTH(scKoSrchOff45) }, 27016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { scKoPat5, scKoSrchOff45, ARRAY_LENGTH(scKoSrchOff45) }, 27026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { NULL, NULL, 0 } 27036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 27046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 27056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const int32_t scKoStndOff01[] = { 3, 9 }; 27066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const int32_t scKoStndOff2[] = { 5, 21 }; 27076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const int32_t scKoStndOff3[] = { 25 }; 27086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const int32_t scKoStndOff45[] = { 7, 30 }; 27096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 27106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const PatternAndOffsets scKoStndPatternsOffsets[] = { 27116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { scKoPat0, scKoStndOff01, ARRAY_LENGTH(scKoStndOff01) }, 27126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { scKoPat1, scKoStndOff01, ARRAY_LENGTH(scKoStndOff01) }, 27136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { scKoPat2, scKoStndOff2, ARRAY_LENGTH(scKoStndOff2) }, 27146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { scKoPat3, scKoStndOff3, ARRAY_LENGTH(scKoStndOff3) }, 27156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { scKoPat4, scKoStndOff45, ARRAY_LENGTH(scKoStndOff45) }, 27166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { scKoPat5, scKoStndOff45, ARRAY_LENGTH(scKoStndOff45) }, 27176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { NULL, NULL, 0 } 27186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 27196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 27206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef struct { 27216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char * locale; 27226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar * text; 27236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const PatternAndOffsets * patternsAndOffsets; 27246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} TUSCItem; 27256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 27266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const TUSCItem tuscItems[] = { 27276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { "root", scKoText, scKoStndPatternsOffsets }, 27286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { "root@collation=search", scKoText, scKoSrchPatternsOffsets }, 27296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { "ko@collation=search", scKoText, scKoSrchPatternsOffsets }, 27306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { NULL, NULL, NULL } 27316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 27326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 27336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UChar dummyPat[] = { 0x0061, 0 }; 27346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 27356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestUsingSearchCollator(void) 27366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 27376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const TUSCItem * tuscItemPtr; 27386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (tuscItemPtr = tuscItems; tuscItemPtr->locale != NULL; tuscItemPtr++) { 27396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 27406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCollator* ucol = ucol_open(tuscItemPtr->locale, &status); 27416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_SUCCESS(status) ) { 27426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UStringSearch* usrch = usearch_openFromCollator(dummyPat, -1, tuscItemPtr->text, -1, ucol, NULL, &status); 27436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_SUCCESS(status) ) { 27446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const PatternAndOffsets * patternsOffsetsPtr; 27456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for ( patternsOffsetsPtr = tuscItemPtr->patternsAndOffsets; patternsOffsetsPtr->pattern != NULL; patternsOffsetsPtr++) { 27466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_setPattern(usrch, patternsOffsetsPtr->pattern, -1, &status); 27476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_SUCCESS(status) ) { 27486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t offset; 27496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const int32_t * nextOffsetPtr; 27506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const int32_t * limitOffsetPtr; 27516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 27526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_reset(usrch); 27536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org nextOffsetPtr = patternsOffsetsPtr->offsets; 27546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org limitOffsetPtr = patternsOffsetsPtr->offsets + patternsOffsetsPtr->offsetsLen; 27556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (TRUE) { 27566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org offset = usearch_next(usrch, &status); 27576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_FAILURE(status) || offset == USEARCH_DONE ) { 27586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 27596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( nextOffsetPtr < limitOffsetPtr ) { 27616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (offset != *nextOffsetPtr) { 27626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error, locale %s, expected usearch_next %d, got %d\n", tuscItemPtr->locale, *nextOffsetPtr, offset); 27636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org nextOffsetPtr = limitOffsetPtr; 27646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 27656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org nextOffsetPtr++; 27676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 27686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error, locale %s, usearch_next returned more matches than expected\n", tuscItemPtr->locale ); 27696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_FAILURE(status) ) { 27726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error, locale %s, usearch_next failed: %s\n", tuscItemPtr->locale, u_errorName(status) ); 27736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if ( nextOffsetPtr < limitOffsetPtr ) { 27746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error, locale %s, usearch_next returned fewer matches than expected\n", tuscItemPtr->locale ); 27756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 27776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 27786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_reset(usrch); 27796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org nextOffsetPtr = patternsOffsetsPtr->offsets + patternsOffsetsPtr->offsetsLen; 27806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org limitOffsetPtr = patternsOffsetsPtr->offsets; 27816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (TRUE) { 27826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org offset = usearch_previous(usrch, &status); 27836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_FAILURE(status) || offset == USEARCH_DONE ) { 27846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 27856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( nextOffsetPtr > limitOffsetPtr ) { 27876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org nextOffsetPtr--; 27886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (offset != *nextOffsetPtr) { 27896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error, locale %s, expected usearch_previous %d, got %d\n", tuscItemPtr->locale, *nextOffsetPtr, offset); 27906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org nextOffsetPtr = limitOffsetPtr; 27916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 27926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 27946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error, locale %s, usearch_previous returned more matches than expected\n", tuscItemPtr->locale ); 27956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_FAILURE(status) ) { 27986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error, locale %s, usearch_previous failed: %s\n", tuscItemPtr->locale, u_errorName(status) ); 27996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if ( nextOffsetPtr > limitOffsetPtr ) { 28006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error, locale %s, usearch_previous returned fewer matches than expected\n", tuscItemPtr->locale ); 28016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 28026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 28046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error, locale %s, usearch_setPattern failed: %s\n", tuscItemPtr->locale, u_errorName(status) ); 28056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 28066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 28076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(usrch); 28086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 28096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error, locale %s, usearch_openFromCollator failed: %s\n", tuscItemPtr->locale, u_errorName(status) ); 28106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 28116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_close(ucol); 28126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 28136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("error, locale %s, ucol_open failed: %s\n", tuscItemPtr->locale, u_errorName(status) ); 28146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 28156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 28166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 28176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestPCEBuffer_with(const UChar *search, uint32_t searchLen, const UChar *source, uint32_t sourceLen) { 28206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode icuStatus = U_ZERO_ERROR; 28216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCollator *coll; 28226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *locale; 28236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBreakIterator *ubrk; 28246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UStringSearch *usearch; 28256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t match = 0; 28266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org coll = ucol_openFromShortString( "LSK_AS_CX_EX_FX_HX_NX_S4", 28296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FALSE, 28306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org NULL, 28316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &icuStatus ); 28326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_FAILURE(icuStatus) ) 28336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 28346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err( "ucol_openFromShortString error %s\n" , u_errorName(icuStatus)); 28356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto exit; 28366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 28376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org locale = ucol_getLocaleByType( coll, 28396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ULOC_VALID_LOCALE, 28406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &icuStatus ); 28416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_FAILURE(icuStatus) ) 28426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 28436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err( "ucol_getLocaleByType error %s\n", u_errorName(icuStatus) ); 28446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto exit; 28456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 28466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("locale=%s\n", locale); 28486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ubrk = ubrk_open( UBRK_CHARACTER, 28506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org locale, 28516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org source, 28526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sourceLen, 28536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &icuStatus ); 28546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_FAILURE(icuStatus) ) 28556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 28566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err( "ubrk_open error %s\n", u_errorName(icuStatus) ); 28576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto exit; 28586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 28596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch = usearch_openFromCollator( search, 28616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org searchLen, 28626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org source, 28636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sourceLen, 28646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org coll, 28656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ubrk, 28666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &icuStatus ); 28676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_FAILURE(icuStatus) ) 28686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 28696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err( "usearch_openFromCollator error %s\n", u_errorName(icuStatus) ); 28706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto exit; 28716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 28726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org match = usearch_first( usearch, 28746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &icuStatus ); 28756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_FAILURE(icuStatus) ) 28766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 28776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err( "usearch_first error %s\n", u_errorName(icuStatus) ); 28786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto exit; 28796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 28806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(match==0) { 28826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("OK: match=%d\n", match); 28836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 28846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Err: match expected 0 got %d\n", match); 28856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 28866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(usearch); 28886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ubrk_close(ubrk); 28896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_close(coll); 28906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgexit: 28926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 28936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 28946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestPCEBuffer_100df(void) { 28976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar search[] = 28986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0020, 0x0020, 0x00df, 0x0020, 0x0041, 0x00df, 0x0020, 0x0061, 0x00df, 0x0020, 0x00c5, 0x00df, 0x0020, 0x212b, 0x00df, 0x0020, 0x0041, 0x030a, 0x00df, 0x0020, 0x00e5, 0x00df, 0x0020, 0x0061, 0x02da, 0x00df, 0x0020, 0x0061, 0x030a, 0x00df, 0x0020, 0xd8fa, 0xdeae, 0x00df, 0x0020, 0x2027, 0x00df }; /* 38 cp, 9 of them unpaired surrogates */ 28996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar source[] = 29006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0020, 0x0020, 0x00df, 0x0020, 0x0041, 0x00df, 0x0020, 0x0061, 0x00df, 0x0020, 0x00c5, 0x00df, 0x0020, 0x212b, 0x00df, 0x0020, 0x0041, 0x030a, 0x00df, 0x0020, 0x00e5, 0x00df, 0x0020, 0x0061, 0x02da, 0x00df, 0x0020, 0x0061, 0x030a, 0x00df, 0x0020, 0xd8fa, 0xdeae, 0x00df, 0x0020, 0x2027, 0x00df }; 29016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t searchLen = sizeof(search)/sizeof(UChar); 29026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t sourceLen = sizeof(source)/sizeof(UChar); 29036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TestPCEBuffer_with(search,searchLen,source,sourceLen); 29046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 29056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 29066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 29076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestPCEBuffer_2surr(void) { 29086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar search[] = 29096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0020, 0x0020, 0xdfff, 0x0020, 0x0041, 0xdfff, 0x0020, 0x0061, 0xdfff, 0x0020, 0x00c5, 0xdfff, 0x0020, 0x212b, 0xdfff, 0x0020, 0x0041, 0x030a, 0xdfff, 0x0020, 0x00e5, 0xdfff, 0x0020, 0x0061, 0x02da, 0xdfff, 0x0020, 0x0061, 0x030a, 0xdfff, 0x0020, 0xd8fa, 0xdeae, 0xdfff, 0x0020, 0x2027, 0xdfff }; /* 38 cp, 9 of them unpaired surrogates */ 29106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar source[] = 29116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0020, 0x0020, 0xdfff, 0x0020, 0x0041, 0xdfff, 0x0020, 0x0061, 0xdfff, 0x0020, 0x00c5, 0xdfff, 0x0020, 0x212b, 0xdfff, 0x0020, 0x0041, 0x030a, 0xdfff, 0x0020, 0x00e5, 0xdfff, 0x0020, 0x0061, 0x02da, 0xdfff, 0x0020, 0x0061, 0x030a, 0xdfff, 0x0020, 0xd8fa, 0xdeae, 0xdfff, 0x0020, 0x2027, 0xdfff }; 29126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t searchLen = sizeof(search)/sizeof(UChar); 29136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t sourceLen = sizeof(source)/sizeof(UChar); 29146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TestPCEBuffer_with(search,searchLen,source,sourceLen); 29156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 29166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 29176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestMatchFollowedByIgnorables(void) { 29186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* test case for ticket#8482 */ 29196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar search[] = { 0x00c9 }; 29206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar source[] = { 0x00c9, 0x0000, 0x0041 }; 29216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t searchLen; 29226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t sourceLen; 29236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode icuStatus = U_ZERO_ERROR; 29246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCollator *coll; 29256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *locale; 29266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBreakIterator *ubrk; 29276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UStringSearch *usearch; 29286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t match = 0; 29296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t matchLength = 0; 29306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const int32_t expectedMatchLength = 1; 29316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 29326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org searchLen = sizeof(search)/sizeof(UChar); 29336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sourceLen = sizeof(source)/sizeof(UChar); 29346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 29356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org coll = ucol_openFromShortString("LHR_AN_CX_EX_FX_HX_NX_S3", 29366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FALSE, 29376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org NULL, 29386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &icuStatus); 29396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(icuStatus)) { 29406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("ucol_openFromShortString error - %s\n", u_errorName(icuStatus)); 29416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 29426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 29436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org locale = ucol_getLocaleByType(coll, 29446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ULOC_VALID_LOCALE, 29456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &icuStatus); 29466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(icuStatus)) { 29476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("ucol_getLocaleByType error - %s\n", u_errorName(icuStatus)); 29486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 29496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 29506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ubrk = ubrk_open(UBRK_CHARACTER, 29516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org locale, 29526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org source, 29536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sourceLen, 29546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &icuStatus); 29556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(icuStatus)) { 29566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("ubrk_open error - %s\n", u_errorName(icuStatus)); 29576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 29586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 29596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch = usearch_openFromCollator(search, 29606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org searchLen, 29616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org source, 29626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sourceLen, 29636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org coll, 29646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ubrk, 29656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &icuStatus); 29666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(icuStatus)) { 29676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("usearch_openFromCollator error - %s\n", u_errorName(icuStatus)); 29686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 29696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 29706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org match = usearch_first(usearch, 29716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &icuStatus); 29726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(icuStatus)) { 29736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("usearch_first error - %s\n", u_errorName(icuStatus)); 29746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 29756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 29766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("match=%d\n", match); 29776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 29786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org matchLength = usearch_getMatchedLength(usearch); 29796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 29806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (matchLength != expectedMatchLength) { 29816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error: matchLength=%d, expected=%d\n", matchLength, expectedMatchLength); 29826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 29836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 29846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 29856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(usearch); 29866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ubrk_close(ubrk); 29876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucol_close(coll); 29886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 29896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 29906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 29916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* addSearchTest 29926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/ 29936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 29946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid addSearchTest(TestNode** root) 29956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 29966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestStart, "tscoll/usrchtst/TestStart"); 29976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestOpenClose, "tscoll/usrchtst/TestOpenClose"); 29986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestInitialization, "tscoll/usrchtst/TestInitialization"); 29996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestBasic, "tscoll/usrchtst/TestBasic"); 30006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestNormExact, "tscoll/usrchtst/TestNormExact"); 30016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestStrength, "tscoll/usrchtst/TestStrength"); 30026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestBreakIterator, "tscoll/usrchtst/TestBreakIterator"); 30036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestVariable, "tscoll/usrchtst/TestVariable"); 30046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestOverlap, "tscoll/usrchtst/TestOverlap"); 30056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestCollator, "tscoll/usrchtst/TestCollator"); 30066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestPattern, "tscoll/usrchtst/TestPattern"); 30076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestText, "tscoll/usrchtst/TestText"); 30086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestCompositeBoundaries, 30096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "tscoll/usrchtst/TestCompositeBoundaries"); 30106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestGetSetOffset, "tscoll/usrchtst/TestGetSetOffset"); 30116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestGetSetAttribute, 30126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "tscoll/usrchtst/TestGetSetAttribute"); 30136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestGetMatch, "tscoll/usrchtst/TestGetMatch"); 30146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestSetMatch, "tscoll/usrchtst/TestSetMatch"); 30156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestReset, "tscoll/usrchtst/TestReset"); 30166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestSupplementary, "tscoll/usrchtst/TestSupplementary"); 30176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestContraction, "tscoll/usrchtst/TestContraction"); 30186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestIgnorable, "tscoll/usrchtst/TestIgnorable"); 30196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestCanonical, "tscoll/usrchtst/TestCanonical"); 30206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestNormCanonical, "tscoll/usrchtst/TestNormCanonical"); 30216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestStrengthCanonical, 30226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "tscoll/usrchtst/TestStrengthCanonical"); 30236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestBreakIteratorCanonical, 30246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "tscoll/usrchtst/TestBreakIteratorCanonical"); 30256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestVariableCanonical, 30266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "tscoll/usrchtst/TestVariableCanonical"); 30276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestOverlapCanonical, 30286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "tscoll/usrchtst/TestOverlapCanonical"); 30296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestCollatorCanonical, 30306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "tscoll/usrchtst/TestCollatorCanonical"); 30316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestPatternCanonical, 30326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "tscoll/usrchtst/TestPatternCanonical"); 30336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestTextCanonical, "tscoll/usrchtst/TestTextCanonical"); 30346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestCompositeBoundariesCanonical, 30356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "tscoll/usrchtst/TestCompositeBoundariesCanonical"); 30366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestGetSetOffsetCanonical, 30376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "tscoll/usrchtst/TestGetSetOffsetCanonical"); 30386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestSupplementaryCanonical, 30396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "tscoll/usrchtst/TestSupplementaryCanonical"); 30406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestContractionCanonical, 30416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "tscoll/usrchtst/TestContractionCanonical"); 30426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestEnd, "tscoll/usrchtst/TestEnd"); 30436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestNumeric, "tscoll/usrchtst/TestNumeric"); 30446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestDiacriticMatch, "tscoll/usrchtst/TestDiacriticMatch"); 30456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestForwardBackward, "tscoll/usrchtst/TestForwardBackward"); 30466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestSearchForNull, "tscoll/usrchtst/TestSearchForNull"); 30476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestStrengthIdentical, "tscoll/usrchtst/TestStrengthIdentical"); 30486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestUsingSearchCollator, "tscoll/usrchtst/TestUsingSearchCollator"); 30496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestPCEBuffer_100df, "tscoll/usrchtst/TestPCEBuffer/1_00df"); 30506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestPCEBuffer_2surr, "tscoll/usrchtst/TestPCEBuffer/2_dfff"); 30516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestMatchFollowedByIgnorables, "tscoll/usrchtst/TestMatchFollowedByIgnorables"); 30526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 30536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 30546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* #if !UCONFIG_NO_COLLATION */ 3055