1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/******************************************************************** 2b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * Copyright (c) 2001-2011 International Business Machines 3b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Corporation and others. All Rights Reserved. 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ******************************************************************** 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * File usrchtst.c 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Modification History: 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Name Date Description 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * synwee July 19 2001 creation 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ********************************************************************/ 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCONFIG_NO_COLLATION && !UCONFIG_NO_BREAK_ITERATION && !UCONFIG_NO_FILE_IO 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/usearch.h" 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ustring.h" 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "ccolltst.h" 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cmemory.h" 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <stdio.h> 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "usrchdat.c" 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ubrk.h" 22b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#include <assert.h> 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UBool TOCLOSE_ = TRUE; 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UCollator *EN_US_; 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UCollator *FR_FR_; 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UCollator *DE_; 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UCollator *ES_; 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * CHECK_BREAK(char *brk) 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test if a break iterator is passed in AND break iteration is disabled. 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Skip the test if so. 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * CHECK_BREAK_BOOL(char *brk) 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Same as above, but returns 'TRUE' as a passing result 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UBreakIterator *EN_WORDBREAKER_; 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UBreakIterator *EN_CHARACTERBREAKER_; 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define CHECK_BREAK(x) 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define CHECK_BREAK_BOOL(x) 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#else 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define CHECK_BREAK(x) if(x) { log_info("Skipping test on %s:%d because UCONFIG_NO_BREAK_ITERATION is on\n", __FILE__, __LINE__); return; } 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#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; } 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Opening all static collators and break iterators 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 516d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Querustatic void open(UErrorCode* status) 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (TOCLOSE_) { 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar rules[1024]; 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t rulelength = 0; 566d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru *status = U_ZERO_ERROR; 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 586d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru EN_US_ = ucol_open("en_US", status); 596d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if(U_FAILURE(*status)) { 606d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(*status, "Error opening collator\n"); 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 636d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru FR_FR_ = ucol_open("fr_FR", status); 646d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru DE_ = ucol_open("de_DE", status); 656d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru ES_ = ucol_open("es_ES", status); 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strcpy(rules, ucol_getRules(DE_, &rulelength)); 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(EXTRACOLLATIONRULE, rules + rulelength, 1024 - rulelength); 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_close(DE_); 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DE_ = ucol_openRules(rules, u_strlen(rules), UCOL_ON, UCOL_TERTIARY, 736d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru (UParseError *)NULL, status); 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strcpy(rules, ucol_getRules(ES_, &rulelength)); 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(EXTRACOLLATIONRULE, rules + rulelength, 1024 - rulelength); 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_close(ES_); 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ES_ = ucol_openRules(rules, u_strlen(rules), UCOL_ON, UCOL_TERTIARY, 796d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru NULL, status); 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION 816d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru EN_WORDBREAKER_ = ubrk_open(UBRK_WORD, "en_US", NULL, 0, status); 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru EN_CHARACTERBREAKER_ = ubrk_open(UBRK_CHARACTER, "en_US", NULL, 0, 836d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru status); 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TOCLOSE_ = TRUE; 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Start opening all static collators and break iterators 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestStart(void) 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 946d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 956d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru open(&status); 966d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 976d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 986d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 996d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TOCLOSE_ = FALSE; 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Closing all static collators and break iterators 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void close(void) 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (TOCLOSE_) { 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_close(EN_US_); 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_close(FR_FR_); 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_close(DE_); 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_close(ES_); 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ubrk_close(EN_WORDBREAKER_); 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ubrk_close(EN_CHARACTERBREAKER_); 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TOCLOSE_ = FALSE; 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* End closing all static collators and break iterators 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestEnd(void) 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TOCLOSE_ = TRUE; 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru close(); 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TOCLOSE_ = TRUE; 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* output UChar strings for printing. 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic char *toCharString(const UChar* unichars) 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static char result[1024]; 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char *temp = result; 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int length = u_strlen(unichars); 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (; count < length; count ++) { 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar ch = unichars[count]; 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (ch >= 0x20 && ch <= 0x7e) { 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *temp ++ = (char)ch; 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sprintf(temp, "\\u%04x", ch); 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp += 6; /* \uxxxx */ 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *temp = 0; 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return result; 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Getting the collator 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UCollator *getCollator(const char *collator) 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (collator == NULL) { 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return EN_US_; 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(collator, "fr") == 0) { 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FR_FR_; 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else if (strcmp(collator, "de") == 0) { 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return DE_; 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else if (strcmp(collator, "es") == 0) { 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ES_; 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return EN_US_; 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Getting the breakiterator 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UBreakIterator *getBreakIterator(const char *breaker) 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (breaker == NULL) { 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return NULL; 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(breaker, "wordbreaker") == 0) { 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return EN_WORDBREAKER_; 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return EN_CHARACTERBREAKER_; 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#else 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return NULL; 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestOpenClose(void) 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UStringSearch *result; 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UChar pattern[] = {0x61, 0x62, 0x63, 0x64, 0x65, 0x66}; 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UChar text[] = {0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67}; 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBreakIterator *breakiter = ubrk_open(UBRK_WORD, "en_US", 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru text, 6, &status); 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* testing null arguments */ 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = usearch_open(NULL, 0, NULL, 0, NULL, NULL, &status); 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status) || result != NULL) { 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error: NULL arguments should produce an error and a NULL result\n"); 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = usearch_openFromCollator(NULL, 0, NULL, 0, NULL, NULL, &status); 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status) || result != NULL) { 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error: NULL arguments should produce an error and a NULL result\n"); 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = usearch_open(pattern, 3, NULL, 0, NULL, NULL, &status); 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status) || result != NULL) { 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error: NULL arguments should produce an error and a NULL result\n"); 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = usearch_openFromCollator(pattern, 3, NULL, 0, NULL, NULL, 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &status); 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status) || result != NULL) { 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error: NULL arguments should produce an error and a NULL result\n"); 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = usearch_open(pattern, 3, text, 6, NULL, NULL, &status); 233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status) || result != NULL) { 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error: NULL arguments should produce an error and a NULL result\n"); 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = usearch_openFromCollator(pattern, 3, text, 6, NULL, NULL, 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &status); 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status) || result != NULL) { 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error: NULL arguments should produce an error and a NULL result\n"); 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = usearch_open(pattern, 3, text, 6, "en_US", NULL, &status); 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || result == NULL) { 2466d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Error: NULL break iterator is valid for opening search\n"); 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(result); 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2516d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru open(&status); 2526d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 2536d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 2546d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 2556d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = usearch_openFromCollator(pattern, 3, text, 6, EN_US_, NULL, 258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &status); 259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || result == NULL) { 2606d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (EN_US_ == NULL) { 2616d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("Opening collator failed.\n"); 2626d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } else { 2636d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err("Error: NULL break iterator is valid for opening search\n"); 2646d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(result); 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = usearch_open(pattern, 3, text, 6, "en_US", breakiter, &status); 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || result == NULL) { 2766d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Error: Break iterator is valid for opening search\n"); 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(result); 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = usearch_openFromCollator(pattern, 3, text, 6, EN_US_, breakiter, 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &status); 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || result == NULL) { 2856d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (EN_US_ == NULL) { 2866d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("Opening collator failed.\n"); 2876d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } else { 2886d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err("Error: Break iterator is valid for opening search\n"); 2896d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(result); 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ubrk_close(breakiter); 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru close(); 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestInitialization(void) 300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar pattern[512]; 303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UChar text[] = {0x61, 0x62, 0x63, 0x64, 0x65, 0x66}; 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i = 0; 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UStringSearch *result; 306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* simple test on the pattern ce construction */ 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern[0] = 0x41; 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern[1] = 0x42; 3106d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru open(&status); 3116d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 3126d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 3136d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 3146d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = usearch_openFromCollator(pattern, 2, text, 3, EN_US_, NULL, 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &status); 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error opening search %s\n", u_errorName(status)); 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(result); 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* testing if an extremely large pattern will fail the initialization */ 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i = 0; i < 512; i++) { 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern[i] = 0x41; 325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*uprv_memset(pattern, 0x41, 512);*/ 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = usearch_openFromCollator(pattern, 512, text, 3, EN_US_, NULL, 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &status); 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error opening search %s\n", u_errorName(status)); 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(result); 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru close(); 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UBool assertEqualWithUStringSearch( UStringSearch *strsrch, 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const SearchData search) 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t matchindex = search.offset[count]; 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t textlength; 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar matchtext[128]; 344b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t matchlength; 345b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t nextStart; 346b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UBool isOverlap; 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 34850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho usearch_setAttribute(strsrch, USEARCH_ELEMENT_COMPARISON, search.elemCompare, &status); 34950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (U_FAILURE(status)) { 35050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_err("Error setting USEARCH_ELEMENT_COMPARISON attribute %s\n", u_errorName(status)); 35150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return FALSE; 352b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 35350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (usearch_getMatchedStart(strsrch) != USEARCH_DONE || 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getMatchedLength(strsrch) != 0) { 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error with the initialization of match start and length\n"); 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 358b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /* start of next matches */ 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (U_SUCCESS(status) && matchindex >= 0) { 360b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho matchlength = search.size[count]; 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_next(strsrch, &status); 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (matchindex != usearch_getMatchedStart(strsrch) || 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru matchlength != (uint32_t)usearch_getMatchedLength(strsrch)) { 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char *str = toCharString(usearch_getText(strsrch, &textlength)); 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Text: %s\n", str); 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str = toCharString(usearch_getPattern(strsrch, &textlength)); 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Pattern: %s\n", str); 368b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("Error next match found at idx %d (len:%d); expected %d (len:%d)\n", 36950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho usearch_getMatchedStart(strsrch), usearch_getMatchedLength(strsrch), 37050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho matchindex, matchlength); 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (usearch_getMatchedText(strsrch, matchtext, 128, &status) != 376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (int32_t) matchlength || U_FAILURE(status) || 377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memcmp(matchtext, 378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getText(strsrch, &textlength) + matchindex, 379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru matchlength * sizeof(UChar)) != 0) { 380b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("Error getting next matched text\n"); 381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru matchindex = search.offset[count]; 384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_next(strsrch, &status); 386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (usearch_getMatchedStart(strsrch) != USEARCH_DONE || 387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getMatchedLength(strsrch) != 0) { 388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char *str = toCharString(usearch_getText(strsrch, &textlength)); 389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Text: %s\n", str); 390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str = toCharString(usearch_getPattern(strsrch, &textlength)); 391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Pattern: %s\n", str); 392b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("Error next match found at %d (len:%d); expected <NO MATCH>\n", 393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getMatchedStart(strsrch), 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getMatchedLength(strsrch)); 395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 397b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /* start of previous matches */ 398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count = count == 0 ? 0 : count - 1; 399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru matchindex = search.offset[count]; 400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (U_SUCCESS(status) && matchindex >= 0) { 402b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho matchlength = search.size[count]; 403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_previous(strsrch, &status); 404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (matchindex != usearch_getMatchedStart(strsrch) || 405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru matchlength != (uint32_t)usearch_getMatchedLength(strsrch)) { 406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char *str = toCharString(usearch_getText(strsrch, &textlength)); 407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Text: %s\n", str); 408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str = toCharString(usearch_getPattern(strsrch, &textlength)); 409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Pattern: %s\n", str); 410b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("Error previous match found at %d (len:%d); expected %d (len:%d)\n", 411b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho usearch_getMatchedStart(strsrch), usearch_getMatchedLength(strsrch), 412b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho matchindex, matchlength); 413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (usearch_getMatchedText(strsrch, matchtext, 128, &status) != 417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (int32_t) matchlength || U_FAILURE(status) || 418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memcmp(matchtext, 419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getText(strsrch, &textlength) + matchindex, 420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru matchlength * sizeof(UChar)) != 0) { 421b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("Error getting previous matched text\n"); 422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru matchindex = count > 0 ? search.offset[count - 1] : -1; 425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count --; 426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_previous(strsrch, &status); 428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (usearch_getMatchedStart(strsrch) != USEARCH_DONE || 429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getMatchedLength(strsrch) != 0) { 430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char *str = toCharString(usearch_getText(strsrch, &textlength)); 431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Text: %s\n", str); 432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str = toCharString(usearch_getPattern(strsrch, &textlength)); 433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Pattern: %s\n", str); 434b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("Error previous match found at %d (len:%d); expected <NO MATCH>\n", 435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getMatchedStart(strsrch), 436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getMatchedLength(strsrch)); 437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 440b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 441b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho isOverlap = (usearch_getAttribute(strsrch, USEARCH_OVERLAP) == USEARCH_ON); 442b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 443b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /* start of following matches */ 444b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho count = 0; 445b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho matchindex = search.offset[count]; 446b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho nextStart = 0; 447b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 448b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho while (TRUE) { 449b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho usearch_following(strsrch, nextStart, &status); 450b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 451b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (matchindex < 0) { 452b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (usearch_getMatchedStart(strsrch) != USEARCH_DONE || usearch_getMatchedLength(strsrch) != 0) { 453b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho char *str = toCharString(usearch_getText(strsrch, &textlength)); 454b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("Text: %s\n", str); 455b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho str = toCharString(usearch_getPattern(strsrch, &textlength)); 456b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("Pattern: %s\n", str); 457b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("Error following match starting at %d (overlap:%d) found at %d (len:%d); expected <NO MATCH>\n", 458b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho nextStart, isOverlap, 459b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho usearch_getMatchedStart(strsrch), 460b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho usearch_getMatchedLength(strsrch)); 461b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return FALSE; 462b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 463b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /* no more matches */ 464b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho break; 465b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 466b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 467b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho matchlength = search.size[count]; 468b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (usearch_getMatchedStart(strsrch) != matchindex 469b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho || usearch_getMatchedLength(strsrch) != matchlength 470b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho || U_FAILURE(status)) { 471b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho char *str = toCharString(usearch_getText(strsrch, &textlength)); 472b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("Text: %s\n", str); 473b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho str = toCharString(usearch_getPattern(strsrch, &textlength)); 474b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("Pattern: %s\n", str); 475b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("Error following match starting at %d (overlap: %d) found at %d (len:%d); expected %d (len:%d)\n", 476b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho nextStart, isOverlap, 477b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho usearch_getMatchedStart(strsrch), usearch_getMatchedLength(strsrch), 478b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho matchindex, matchlength); 479b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return FALSE; 480b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 481b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 482b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (isOverlap || usearch_getMatchedLength(strsrch) == 0) { 483b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho nextStart = usearch_getMatchedStart(strsrch) + 1; 484b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 485b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho nextStart = usearch_getMatchedStart(strsrch) + usearch_getMatchedLength(strsrch); 486b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 487b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 488b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho count++; 489b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho matchindex = search.offset[count]; 490b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 491b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 492b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /* start of preceding matches */ 493b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho count = -1; /* last non-negative offset index, could be -1 if no match */ 494b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho while (search.offset[count + 1] >= 0) { 495b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho count++; 496b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 497b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho usearch_getText(strsrch, &nextStart); 498b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 499b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho while (TRUE) { 500b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho usearch_preceding(strsrch, nextStart, &status); 501b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 502b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (count < 0) { 503b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (usearch_getMatchedStart(strsrch) != USEARCH_DONE || usearch_getMatchedLength(strsrch) != 0) { 504b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho char *str = toCharString(usearch_getText(strsrch, &textlength)); 505b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("Text: %s\n", str); 506b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho str = toCharString(usearch_getPattern(strsrch, &textlength)); 507b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("Pattern: %s\n", str); 508b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("Error preceding match starting at %d (overlap: %d) found at %d (len:%d); expected <NO MATCH>\n", 509b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho nextStart, isOverlap, 510b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho usearch_getMatchedStart(strsrch), 511b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho usearch_getMatchedLength(strsrch)); 512b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return FALSE; 513b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 514b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /* no more matches */ 515b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho break; 516b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 517b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 518b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho matchindex = search.offset[count]; 519b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho matchlength = search.size[count]; 520b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (usearch_getMatchedStart(strsrch) != matchindex 521b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho || usearch_getMatchedLength(strsrch) != matchlength 522b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho || U_FAILURE(status)) { 523b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho char *str = toCharString(usearch_getText(strsrch, &textlength)); 524b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("Text: %s\n", str); 525b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho str = toCharString(usearch_getPattern(strsrch, &textlength)); 526b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("Pattern: %s\n", str); 527b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("Error preceding match starting at %d (overlap: %d) found at %d (len:%d); expected %d (len:%d)\n", 528b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho nextStart, isOverlap, 529b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho usearch_getMatchedStart(strsrch), usearch_getMatchedLength(strsrch), 530b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho matchindex, matchlength); 531b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return FALSE; 532b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 533b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 534b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho nextStart = matchindex; 535b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho count--; 536b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 537b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 53850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho usearch_setAttribute(strsrch, USEARCH_ELEMENT_COMPARISON, USEARCH_STANDARD_ELEMENT_COMPARISON, &status); 539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return TRUE; 540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UBool assertEqual(const SearchData search) 543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar pattern[32]; 546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar text[128]; 547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCollator *collator = getCollator(search.collator); 548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBreakIterator *breaker = getBreakIterator(search.breaker); 549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UStringSearch *strsrch; 550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK_BREAK_BOOL(search.breaker); 552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search.text, text, 128); 554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search.pattern, pattern, 32); 555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_setStrength(collator, search.strength); 556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch = usearch_openFromCollator(pattern, -1, text, -1, collator, 557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru breaker, &status); 558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error opening string search %s\n", u_errorName(status)); 560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithUStringSearch(strsrch, search)) { 564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_setStrength(collator, UCOL_TERTIARY); 565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(strsrch); 566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_setStrength(collator, UCOL_TERTIARY); 569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(strsrch); 570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return TRUE; 571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UBool assertCanonicalEqual(const SearchData search) 574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar pattern[32]; 577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar text[128]; 578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCollator *collator = getCollator(search.collator); 579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBreakIterator *breaker = getBreakIterator(search.breaker); 580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UStringSearch *strsrch; 581c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UBool result = TRUE; 582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK_BREAK_BOOL(search.breaker); 584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search.text, text, 128); 585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search.pattern, pattern, 32); 586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_setStrength(collator, search.strength); 587c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru ucol_setAttribute(collator, UCOL_NORMALIZATION_MODE, UCOL_ON, &status); 588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch = usearch_openFromCollator(pattern, -1, text, -1, collator, 5896d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru breaker, &status); 590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON, 591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &status); 592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error opening string search %s\n", u_errorName(status)); 594c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru result = FALSE; 595c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru goto bail; 596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithUStringSearch(strsrch, search)) { 599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_setStrength(collator, UCOL_TERTIARY); 600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(strsrch); 601c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru result = FALSE; 602c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru goto bail; 603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 604c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 605c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Querubail: 606c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru ucol_setAttribute(collator, UCOL_NORMALIZATION_MODE, UCOL_OFF, &status); 607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_setStrength(collator, UCOL_TERTIARY); 608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(strsrch); 609c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return result; 610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UBool assertEqualWithAttribute(const SearchData search, 613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru USearchAttributeValue canonical, 614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru USearchAttributeValue overlap) 615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar pattern[32]; 618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar text[128]; 619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCollator *collator = getCollator(search.collator); 620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBreakIterator *breaker = getBreakIterator(search.breaker); 621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UStringSearch *strsrch; 622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK_BREAK_BOOL(search.breaker); 624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search.text, text, 128); 625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search.pattern, pattern, 32); 626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_setStrength(collator, search.strength); 627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch = usearch_openFromCollator(pattern, -1, text, -1, collator, 628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru breaker, &status); 629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, canonical, 630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &status); 631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setAttribute(strsrch, USEARCH_OVERLAP, overlap, &status); 632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error opening string search %s\n", u_errorName(status)); 635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithUStringSearch(strsrch, search)) { 639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_setStrength(collator, UCOL_TERTIARY); 640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(strsrch); 641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_setStrength(collator, UCOL_TERTIARY); 644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(strsrch); 645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return TRUE; 646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestBasic(void) 649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 6516d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 6526d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru open(&status); 6536d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 6546d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 6556d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 6566d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (BASIC[count].text != NULL) { 658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqual(BASIC[count])) { 659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error at test number %d\n", count); 660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru close(); 664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestNormExact(void) 667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 6706d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru open(&status); 6716d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 6726d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 6736d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 6746d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_setAttribute(EN_US_, UCOL_NORMALIZATION_MODE, UCOL_ON, &status); 676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting collation normalization %s\n", 678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(status)); 679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (BASIC[count].text != NULL) { 681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqual(BASIC[count])) { 682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error at test number %d\n", count); 683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count = 0; 687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (NORMEXACT[count].text != NULL) { 688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqual(NORMEXACT[count])) { 689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error at test number %d\n", count); 690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_setAttribute(EN_US_, UCOL_NORMALIZATION_MODE, UCOL_OFF, &status); 694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count = 0; 695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (NONNORMEXACT[count].text != NULL) { 696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqual(NONNORMEXACT[count])) { 697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error at test number %d\n", count); 698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru close(); 702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestStrength(void) 705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 7076d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 7086d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru open(&status); 7096d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 7106d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 7116d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 7126d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (STRENGTH[count].text != NULL) { 714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqual(STRENGTH[count])) { 715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error at test number %d\n", count); 716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru close(); 720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestBreakIterator(void) { 723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UStringSearch *strsrch; 725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar text[128]; 726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar pattern[32]; 727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK_BREAK("x"); 730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION 7326d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru open(&status); 7336d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 7346d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 7356d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 7366d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (usearch_getBreakIterator(NULL) != NULL) { 738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Expected NULL breakiterator from NULL string search\n"); 739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(BREAKITERATOREXACT[0].text, text, 128); 741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(BREAKITERATOREXACT[0].pattern, pattern, 32); 742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch = usearch_openFromCollator(pattern, -1, text, -1, EN_US_, NULL, 743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &status); 744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error opening string search %s\n", u_errorName(status)); 746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTBREAKITERATOR; 747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setBreakIterator(strsrch, NULL, &status); 750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || usearch_getBreakIterator(strsrch) != NULL) { 751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error usearch_getBreakIterator returned wrong object"); 752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTBREAKITERATOR; 753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setBreakIterator(strsrch, EN_CHARACTERBREAKER_, &status); 756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || 757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getBreakIterator(strsrch) != EN_CHARACTERBREAKER_) { 758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error usearch_getBreakIterator returned wrong object"); 759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTBREAKITERATOR; 760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setBreakIterator(strsrch, EN_WORDBREAKER_, &status); 763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || 764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getBreakIterator(strsrch) != EN_WORDBREAKER_) { 765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error usearch_getBreakIterator returned wrong object"); 766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTBREAKITERATOR; 767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(strsrch); 770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count = 0; 772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (count < 4) { 773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 0-3 test are fixed */ 774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const SearchData *search = &(BREAKITERATOREXACT[count]); 775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCollator *collator = getCollator(search->collator); 776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBreakIterator *breaker = getBreakIterator(search->breaker); 777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search->text, text, 128); 779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search->pattern, pattern, 32); 780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_setStrength(collator, search->strength); 781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch = usearch_openFromCollator(pattern, -1, text, -1, collator, 783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru breaker, &status); 784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || 785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getBreakIterator(strsrch) != breaker) { 786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting break iterator\n"); 787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strsrch != NULL) { 788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(strsrch); 789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithUStringSearch(strsrch, *search)) { 792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_setStrength(collator, UCOL_TERTIARY); 793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(strsrch); 794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTBREAKITERATOR; 795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru search = &(BREAKITERATOREXACT[count + 1]); 797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru breaker = getBreakIterator(search->breaker); 798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setBreakIterator(strsrch, breaker, &status); 799c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (U_FAILURE(status) || usearch_getBreakIterator(strsrch) != breaker) { 800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting break iterator\n"); 801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(strsrch); 802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTBREAKITERATOR; 803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_reset(strsrch); 805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithUStringSearch(strsrch, *search)) { 806c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru log_err("Error at test number %d\n", count); 807c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru usearch_close(strsrch); 808c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru goto ENDTESTBREAKITERATOR; 809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(strsrch); 811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count += 2; 812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count = 0; 814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (BREAKITERATOREXACT[count].text != NULL) { 815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqual(BREAKITERATOREXACT[count])) { 816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error at test number %d\n", count); 817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTBREAKITERATOR; 818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruENDTESTBREAKITERATOR: 823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru close(); 824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestVariable(void) 828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 8316d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru open(&status); 8326d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 8336d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 8346d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 8356d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_setAttribute(EN_US_, UCOL_ALTERNATE_HANDLING, UCOL_SHIFTED, &status); 837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting collation alternate attribute %s\n", 839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(status)); 840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (VARIABLE[count].text != NULL) { 842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("variable %d\n", count); 843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqual(VARIABLE[count])) { 844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error at test number %d\n", count); 845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_setAttribute(EN_US_, UCOL_ALTERNATE_HANDLING, 849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCOL_NON_IGNORABLE, &status); 850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru close(); 851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestOverlap(void) 854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 8566d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 8576d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru open(&status); 8586d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 8596d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 8606d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 8616d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (OVERLAP[count].text != NULL) { 863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithAttribute(OVERLAP[count], USEARCH_OFF, 864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru USEARCH_ON)) { 865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error at overlap test number %d\n", count); 866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count = 0; 870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (NONOVERLAP[count].text != NULL) { 871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqual(NONOVERLAP[count])) { 872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error at non overlap test number %d\n", count); 873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count = 0; 878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (count < 1) { 879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar pattern[32]; 880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar text[128]; 881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const SearchData *search = &(OVERLAP[count]); 882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCollator *collator = getCollator(search->collator); 883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UStringSearch *strsrch; 8846d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru status = U_ZERO_ERROR; 885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search->text, text, 128); 887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search->pattern, pattern, 32); 888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch = usearch_openFromCollator(pattern, -1, text, -1, collator, 889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NULL, &status); 890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status == U_FILE_ACCESS_ERROR) { 891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_data_err("Is your data around?\n"); 892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if(U_FAILURE(status)) { 894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error opening searcher\n"); 895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setAttribute(strsrch, USEARCH_OVERLAP, USEARCH_ON, &status); 898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || 899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getAttribute(strsrch, USEARCH_OVERLAP) != USEARCH_ON) { 900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting overlap option\n"); 901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithUStringSearch(strsrch, *search)) { 903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(strsrch); 904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 905b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru search = &(NONOVERLAP[count]); 907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setAttribute(strsrch, USEARCH_OVERLAP, USEARCH_OFF, &status); 908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || 909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getAttribute(strsrch, USEARCH_OVERLAP) != USEARCH_OFF) { 910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting overlap option\n"); 911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_reset(strsrch); 913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithUStringSearch(strsrch, *search)) { 914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(strsrch); 915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error at test number %d\n", count); 916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 917b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(strsrch); 920b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 921b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru close(); 922b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestCollator(void) 925b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 926b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test collator that thinks "o" and "p" are the same thing */ 927b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar rules[32]; 928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCollator *tailored = NULL; 929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 930b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar pattern[32]; 931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar text[128]; 932b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UStringSearch *strsrch; 933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru text[0] = 0x41; 935b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru text[1] = 0x42; 936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru text[2] = 0x43; 937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru text[3] = 0x44; 938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru text[4] = 0x45; 939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern[0] = 0x62; 940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern[1] = 0x63; 941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch = usearch_open(pattern, 2, text, 5, "en_US", NULL, &status); 942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status == U_FILE_ACCESS_ERROR) { 943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_data_err("Is your data around?\n"); 944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if(U_FAILURE(status)) { 946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error opening searcher\n"); 947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tailored = usearch_getCollator(strsrch); 950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (usearch_next(strsrch, &status) != -1) { 951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error: Found case insensitive match, when we shouldn't\n"); 952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_setStrength(tailored, UCOL_PRIMARY); 954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_reset(strsrch); 955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (usearch_next(strsrch, &status) != 1) { 956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error: Found case insensitive match not found\n"); 957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(strsrch); 959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 9606d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru open(&status); 961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (usearch_getCollator(NULL) != NULL) { 963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Expected NULL collator from NULL string search\n"); 964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(COLLATOR[0].text, text, 128); 966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(COLLATOR[0].pattern, pattern, 32); 967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch = usearch_openFromCollator(pattern, -1, text, -1, EN_US_, 969b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NULL, &status); 970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 971b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error opening string search %s\n", u_errorName(status)); 972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 973b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithUStringSearch(strsrch, COLLATOR[0])) { 974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTCOLLATOR; 975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(TESTCOLLATORRULE, rules, 32); 978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tailored = ucol_openRules(rules, -1, UCOL_ON, COLLATOR[1].strength, 979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NULL, &status); 980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error opening rule based collator %s\n", u_errorName(status)); 982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setCollator(strsrch, tailored, &status); 985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || usearch_getCollator(strsrch) != tailored) { 986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting rule based collator\n"); 987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 988b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_reset(strsrch); 989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithUStringSearch(strsrch, COLLATOR[1])) { 990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTCOLLATOR; 991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setCollator(strsrch, EN_US_, &status); 994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_reset(strsrch); 995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || usearch_getCollator(strsrch) != EN_US_) { 996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting rule based collator\n"); 997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithUStringSearch(strsrch, COLLATOR[0])) { 999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTCOLLATOR; 1000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruENDTESTCOLLATOR: 1003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(strsrch); 1004b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (tailored != NULL) { 1005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_close(tailored); 1006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru close(); 1008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestPattern(void) 1011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UStringSearch *strsrch; 1013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar pattern[32]; 1014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar bigpattern[512]; 1015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar text[128]; 1016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UChar *temp; 1017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t templength; 1018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 10206d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru open(&status); 10216d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 10226d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 10236d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 10246d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 1025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (usearch_getPattern(NULL, &templength) != NULL) { 1026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error NULL string search expected returning NULL pattern\n"); 1027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setPattern(NULL, pattern, 3, &status); 1029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 1030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error expected setting pattern in NULL strings search\n"); 1031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(PATTERN[0].text, text, 128); 1034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(PATTERN[0].pattern, pattern, 32); 1035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_setStrength(EN_US_, PATTERN[0].strength); 1037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch = usearch_openFromCollator(pattern, -1, text, -1, EN_US_, 1038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NULL, &status); 1039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status == U_FILE_ACCESS_ERROR) { 1040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_data_err("Is your data around?\n"); 1041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if(U_FAILURE(status)) { 1043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error opening searcher\n"); 1044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setPattern(strsrch, NULL, 3, &status); 1049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 1050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error expected setting NULL pattern in strings search\n"); 1051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setPattern(strsrch, pattern, 0, &status); 1054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 1055b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error expected setting pattern with length 0 in strings search\n"); 1056b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1057b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1058b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1059b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error opening string search %s\n", u_errorName(status)); 1060b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTPATTERN; 1061b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1062b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp = usearch_getPattern(strsrch, &templength); 1063b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(pattern, temp) != 0) { 1064b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting pattern\n"); 1065b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1066b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithUStringSearch(strsrch, PATTERN[0])) { 1067b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTPATTERN; 1068b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1070b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(PATTERN[1].pattern, pattern, 32); 1071b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setPattern(strsrch, pattern, -1, &status); 1072b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp = usearch_getPattern(strsrch, &templength); 1073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(pattern, temp) != 0) { 1074b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting pattern\n"); 1075b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTPATTERN; 1076b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1077b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_reset(strsrch); 1078b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1079b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting pattern %s\n", u_errorName(status)); 1080b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1081b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithUStringSearch(strsrch, PATTERN[1])) { 1082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTPATTERN; 1083b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1084b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1085b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(PATTERN[0].pattern, pattern, 32); 1086b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setPattern(strsrch, pattern, -1, &status); 1087b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp = usearch_getPattern(strsrch, &templength); 1088b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(pattern, temp) != 0) { 1089b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting pattern\n"); 1090b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTPATTERN; 1091b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1092b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_reset(strsrch); 1093b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1094b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting pattern %s\n", u_errorName(status)); 1095b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1096b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithUStringSearch(strsrch, PATTERN[0])) { 1097b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTPATTERN; 1098b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1099b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* enormous pattern size to see if this crashes */ 1100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (templength = 0; templength != 512; templength ++) { 1101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bigpattern[templength] = 0x61; 1102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bigpattern[511] = 0; 1104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setPattern(strsrch, bigpattern, -1, &status); 1105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting pattern with size 512, %s \n", 1107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(status)); 1108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruENDTESTPATTERN: 1110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_setStrength(EN_US_, UCOL_TERTIARY); 1111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strsrch != NULL) { 1112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(strsrch); 1113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru close(); 1115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestText(void) 1118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UStringSearch *strsrch; 1120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar pattern[32]; 1121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar text[128]; 1122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UChar *temp; 1123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t templength; 1124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(TEXT[0].text, text, 128); 1127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(TEXT[0].pattern, pattern, 32); 1128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 11296d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru open(&status); 11306d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 11316d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 11326d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 11336d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 1134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (usearch_getText(NULL, &templength) != NULL) { 1136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error NULL string search should return NULL text\n"); 1137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setText(NULL, text, 10, &status); 1140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 1141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error NULL string search should have an error when setting text\n"); 1142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch = usearch_openFromCollator(pattern, -1, text, -1, EN_US_, 1146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NULL, &status); 1147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error opening string search %s\n", u_errorName(status)); 1150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTPATTERN; 1151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp = usearch_getText(strsrch, &templength); 1153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(text, temp) != 0) { 1154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting text\n"); 1155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithUStringSearch(strsrch, TEXT[0])) { 1157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTPATTERN; 1158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(TEXT[1].text, text, 32); 1161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setText(strsrch, text, -1, &status); 1162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp = usearch_getText(strsrch, &templength); 1163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(text, temp) != 0) { 1164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting text\n"); 1165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTPATTERN; 1166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting text %s\n", u_errorName(status)); 1169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithUStringSearch(strsrch, TEXT[1])) { 1171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTPATTERN; 1172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(TEXT[0].text, text, 32); 1175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setText(strsrch, text, -1, &status); 1176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp = usearch_getText(strsrch, &templength); 1177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(text, temp) != 0) { 1178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting text\n"); 1179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTPATTERN; 1180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting pattern %s\n", u_errorName(status)); 1183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithUStringSearch(strsrch, TEXT[0])) { 1185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTPATTERN; 1186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruENDTESTPATTERN: 1188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strsrch != NULL) { 1189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(strsrch); 1190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru close(); 1192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestCompositeBoundaries(void) 1195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 11976d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 11986d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru open(&status); 11996d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 12006d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 12016d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 12026d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 1203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (COMPOSITEBOUNDARIES[count].text != NULL) { 1204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("composite %d\n", count); 1205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqual(COMPOSITEBOUNDARIES[count])) { 1206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error at test number %d\n", count); 1207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 1209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru close(); 1211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestGetSetOffset(void) 1214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 121550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int searchDataIndex = 0; 1216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar pattern[32]; 1217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar text[128]; 1218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UStringSearch *strsrch; 1220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memset(pattern, 0, 32*sizeof(UChar)); 1221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memset(text, 0, 128*sizeof(UChar)); 1222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 12236d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru open(&status); 12246d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 12256d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 12266d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 12276d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 1228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (usearch_getOffset(NULL) != USEARCH_DONE) { 1229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("usearch_getOffset(NULL) expected USEARCH_DONE\n"); 1230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch = usearch_openFromCollator(pattern, 16, text, 32, EN_US_, NULL, 1232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &status); 1233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* testing out of bounds error */ 1234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setOffset(strsrch, -1, &status); 1235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 1236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error expecting set offset error\n"); 1237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setOffset(strsrch, 128, &status); 1239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 1240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error expecting set offset error\n"); 1241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 124250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho while (BASIC[searchDataIndex].text != NULL) { 1243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 124450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho SearchData search = BASIC[searchDataIndex ++]; 1245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t matchindex = search.offset[count]; 1246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t textlength; 1247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search.text, text, 128); 1249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search.pattern, pattern, 32); 1250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setText(strsrch, text, -1, &status); 1252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setPattern(strsrch, pattern, -1, &status); 1253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_setStrength(usearch_getCollator(strsrch), search.strength); 1254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_reset(strsrch); 1255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (U_SUCCESS(status) && matchindex >= 0) { 1256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t matchlength = search.size[count]; 1257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_next(strsrch, &status); 1258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (matchindex != usearch_getMatchedStart(strsrch) || 1259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru matchlength != (uint32_t)usearch_getMatchedLength(strsrch)) { 1260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char *str = toCharString(usearch_getText(strsrch, 1261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &textlength)); 1262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Text: %s\n", str); 1263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str = toCharString(usearch_getPattern(strsrch, &textlength)); 1264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Pattern: %s\n", str); 1265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error match found at %d %d\n", 1266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getMatchedStart(strsrch), 1267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getMatchedLength(strsrch)); 1268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setOffset(strsrch, matchindex + matchlength, &status); 1271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_previous(strsrch, &status); 1272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (matchindex != usearch_getMatchedStart(strsrch) || 1273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru matchlength != (uint32_t)usearch_getMatchedLength(strsrch)) { 1274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char *str = toCharString(usearch_getText(strsrch, 1275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &textlength)); 1276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Text: %s\n", str); 1277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str = toCharString(usearch_getPattern(strsrch, &textlength)); 1278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Pattern: %s\n", str); 1279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error match found at %d %d\n", 1280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getMatchedStart(strsrch), 1281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getMatchedLength(strsrch)); 1282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setOffset(strsrch, matchindex + matchlength, &status); 1285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru matchindex = search.offset[count + 1] == -1 ? -1 : 1286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru search.offset[count + 2]; 1287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (search.offset[count + 1] != -1) { 1288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setOffset(strsrch, search.offset[count + 1] + 1, 1289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &status); 1290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (usearch_getOffset(strsrch) != search.offset[count + 1] + 1) { 1291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting offset\n"); 1292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count += 2; 1297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_next(strsrch, &status); 1299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (usearch_getMatchedStart(strsrch) != USEARCH_DONE) { 1300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char *str = toCharString(usearch_getText(strsrch, &textlength)); 1301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Text: %s\n", str); 1302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str = toCharString(usearch_getPattern(strsrch, &textlength)); 1303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Pattern: %s\n", str); 1304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error match found at %d %d\n", 1305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getMatchedStart(strsrch), 1306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getMatchedLength(strsrch)); 1307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_setStrength(usearch_getCollator(strsrch), UCOL_TERTIARY); 1311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(strsrch); 1312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru close(); 1313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestGetSetAttribute(void) 1316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar pattern[32]; 1319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar text[128]; 1320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UStringSearch *strsrch; 1321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memset(pattern, 0, 32*sizeof(UChar)); 1323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memset(text, 0, 128*sizeof(UChar)); 1324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 13256d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru open(&status); 13266d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 13276d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 13286d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 13296d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 1330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (usearch_getAttribute(NULL, USEARCH_OVERLAP) != USEARCH_DEFAULT || 1331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getAttribute(NULL, USEARCH_CANONICAL_MATCH) != 1332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru USEARCH_DEFAULT) { 1333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err( 1334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Attributes for NULL string search should be USEARCH_DEFAULT\n"); 1335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch = usearch_openFromCollator(pattern, 16, text, 32, EN_US_, NULL, 1337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &status); 1338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error opening search %s\n", u_errorName(status)); 1340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setAttribute(strsrch, USEARCH_OVERLAP, USEARCH_DEFAULT, &status); 1344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || 1345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getAttribute(strsrch, USEARCH_OVERLAP) != USEARCH_OFF) { 1346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting overlap to the default\n"); 1347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setAttribute(strsrch, USEARCH_OVERLAP, USEARCH_ON, &status); 1349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || 1350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getAttribute(strsrch, USEARCH_OVERLAP) != USEARCH_ON) { 1351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting overlap true\n"); 1352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setAttribute(strsrch, USEARCH_OVERLAP, USEARCH_OFF, &status); 1354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || 1355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getAttribute(strsrch, USEARCH_OVERLAP) != USEARCH_OFF) { 1356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting overlap false\n"); 1357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setAttribute(strsrch, USEARCH_OVERLAP, 1359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru USEARCH_ATTRIBUTE_VALUE_COUNT, &status); 1360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 1361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting overlap to illegal value\n"); 1362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_DEFAULT, 1365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &status); 1366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || 1367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getAttribute(strsrch, USEARCH_CANONICAL_MATCH) != 1368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru USEARCH_OFF) { 1369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting canonical match to the default\n"); 1370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON, 1372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &status); 1373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || 1374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getAttribute(strsrch, USEARCH_CANONICAL_MATCH) != 1375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru USEARCH_ON) { 1376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting canonical match true\n"); 1377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_OFF, 1379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &status); 1380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || 1381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getAttribute(strsrch, USEARCH_CANONICAL_MATCH) != 1382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru USEARCH_OFF) { 1383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting canonical match false\n"); 1384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, 1386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru USEARCH_ATTRIBUTE_VALUE_COUNT, &status); 1387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 1388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting canonical match to illegal value\n"); 1389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setAttribute(strsrch, USEARCH_ATTRIBUTE_COUNT, USEARCH_DEFAULT, 1392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &status); 1393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 1394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting illegal attribute success\n"); 1395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(strsrch); 1398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru close(); 1399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestGetMatch(void) 1402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 1404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar text[128]; 1406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar pattern[32]; 1407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SearchData search = MATCH[0]; 1408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t matchindex = search.offset[count]; 1409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UStringSearch *strsrch; 1410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t textlength; 1411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar matchtext[128]; 1412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 14136d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru open(&status); 14146d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 14156d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 14166d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 14176d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 1418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (usearch_getMatchedStart(NULL) != USEARCH_DONE || 1420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getMatchedLength(NULL) != USEARCH_DONE) { 1421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err( 1422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Expected start and length of NULL string search should be USEARCH_DONE\n"); 1423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search.text, text, 128); 1426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search.pattern, pattern, 32); 1427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch = usearch_openFromCollator(pattern, -1, text, -1, EN_US_, 1428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NULL, &status); 1429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error opening string search %s\n", u_errorName(status)); 1431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strsrch != NULL) { 1432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(strsrch); 1433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (U_SUCCESS(status) && matchindex >= 0) { 1438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t matchlength = search.size[count]; 1439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_next(strsrch, &status); 1440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (matchindex != usearch_getMatchedStart(strsrch) || 1441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru matchlength != usearch_getMatchedLength(strsrch)) { 1442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char *str = toCharString(usearch_getText(strsrch, &textlength)); 1443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Text: %s\n", str); 1444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str = toCharString(usearch_getPattern(strsrch, &textlength)); 1445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Pattern: %s\n", str); 1446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error match found at %d %d\n", 1447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getMatchedStart(strsrch), 1448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getMatchedLength(strsrch)); 1449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 1452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (usearch_getMatchedText(NULL, matchtext, 128, &status) != 1455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru USEARCH_DONE || U_SUCCESS(status)){ 1456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error expecting errors with NULL string search\n"); 1457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (usearch_getMatchedText(strsrch, NULL, 0, &status) != 1460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (int32_t)matchlength || U_SUCCESS(status)){ 1461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error pre-flighting match length\n"); 1462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (usearch_getMatchedText(strsrch, matchtext, 0, &status) != 1465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (int32_t)matchlength || U_SUCCESS(status)){ 1466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error getting match text with buffer size 0\n"); 1467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (usearch_getMatchedText(strsrch, matchtext, matchlength, &status) 1470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru != (int32_t)matchlength || matchtext[matchlength - 1] == 0 || 1471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_FAILURE(status)){ 1472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error getting match text with exact size\n"); 1473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (usearch_getMatchedText(strsrch, matchtext, 128, &status) != 1476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (int32_t) matchlength || U_FAILURE(status) || 1477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memcmp(matchtext, 1478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getText(strsrch, &textlength) + matchindex, 1479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru matchlength * sizeof(UChar)) != 0 || 1480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru matchtext[matchlength] != 0) { 1481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error getting matched text\n"); 1482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru matchindex = search.offset[count]; 1485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_next(strsrch, &status); 1488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (usearch_getMatchedStart(strsrch) != USEARCH_DONE || 1489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getMatchedLength(strsrch) != 0) { 1490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error end of match not found\n"); 1491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (usearch_getMatchedText(strsrch, matchtext, 128, &status) != 1494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru USEARCH_DONE) { 1495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error getting null matches\n"); 1496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(strsrch); 1498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru close(); 1499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestSetMatch(void) 1502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 15046d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 15056d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru open(&status); 15066d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 15076d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 15086d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 15096d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 1510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (MATCH[count].text != NULL) { 1511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SearchData search = MATCH[count]; 1512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int size = 0; 151350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int offsetIndex = 0; 1514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar text[128]; 1515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar pattern[32]; 1516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UStringSearch *strsrch; 15176d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru status = U_ZERO_ERROR; 1518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (usearch_first(NULL, &status) != USEARCH_DONE || 1520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_last(NULL, &status) != USEARCH_DONE) { 1521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error getting the first and last match of a NULL string search\n"); 1522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search.text, text, 128); 1524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search.pattern, pattern, 32); 1525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch = usearch_openFromCollator(pattern, -1, text, -1, EN_US_, 1526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NULL, &status); 1527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error opening string search %s\n", u_errorName(status)); 1529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strsrch != NULL) { 1530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(strsrch); 1531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru size = 0; 1536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (search.offset[size] != -1) { 1537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru size ++; 1538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (usearch_first(strsrch, &status) != search.offset[0] || 1541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_FAILURE(status)) { 1542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error getting first match\n"); 1543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (usearch_last(strsrch, &status) != search.offset[size -1] || 1545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_FAILURE(status)) { 1546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error getting last match\n"); 1547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 154950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho while (offsetIndex < size) { 155050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (offsetIndex + 2 < size) { 155150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (usearch_following(strsrch, search.offset[offsetIndex + 2] - 1, 155250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho &status) != search.offset[offsetIndex + 2] || 1553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_FAILURE(status)) { 1554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error getting following match at index %d\n", 155550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho search.offset[offsetIndex + 2] - 1); 1556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 155850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (offsetIndex + 1 < size) { 155950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (usearch_preceding(strsrch, search.offset[offsetIndex + 1] + 156050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho search.size[offsetIndex + 1] + 1, 156150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho &status) != search.offset[offsetIndex + 1] || 1562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_FAILURE(status)) { 1563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error getting preceeding match at index %d\n", 156450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho search.offset[offsetIndex + 1] + 1); 1565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 156750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho offsetIndex += 2; 1568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (usearch_following(strsrch, u_strlen(text), &status) != 1571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru USEARCH_DONE) { 1572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error expecting out of bounds match\n"); 1573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (usearch_preceding(strsrch, 0, &status) != USEARCH_DONE) { 1575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error expecting out of bounds match\n"); 1576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 1578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(strsrch); 1579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru close(); 1581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestReset(void) 1584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar text[] = {0x66, 0x69, 0x73, 0x68, 0x20, 1587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x66, 0x69, 0x73, 0x68}; 1588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar pattern[] = {0x73}; 1589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UStringSearch *strsrch; 1590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 15916d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru open(&status); 15926d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 15936d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 15946d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 15956d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 1596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch = usearch_openFromCollator(pattern, 1, text, 9, 1597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru EN_US_, NULL, &status); 1598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error opening string search %s\n", u_errorName(status)); 1600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strsrch != NULL) { 1601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(strsrch); 1602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setAttribute(strsrch, USEARCH_OVERLAP, USEARCH_ON, &status); 1606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON, 1607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &status); 1608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setOffset(strsrch, 9, &status); 1609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting attributes and offsets\n"); 1611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 1613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_reset(strsrch); 1614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (usearch_getAttribute(strsrch, USEARCH_OVERLAP) != USEARCH_OFF || 1615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getAttribute(strsrch, USEARCH_CANONICAL_MATCH) != 1616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru USEARCH_OFF || 1617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getOffset(strsrch) != 0 || 1618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getMatchedLength(strsrch) != 0 || 1619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getMatchedStart(strsrch) != USEARCH_DONE) { 1620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error resetting string search\n"); 1621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_previous(strsrch, &status); 1623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (usearch_getMatchedStart(strsrch) != 7 || 1624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getMatchedLength(strsrch) != 1) { 1625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error resetting string search\n"); 1626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(strsrch); 1629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru close(); 1630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestSupplementary(void) 1633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 16356d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 16366d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru open(&status); 16376d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 16386d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 16396d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 16406d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 1641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (SUPPLEMENTARY[count].text != NULL) { 1642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqual(SUPPLEMENTARY[count])) { 1643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error at test number %d\n", count); 1644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 1646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru close(); 1648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestContraction(void) 1651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar rules[128]; 1653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar pattern[128]; 1654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar text[128]; 1655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCollator *collator; 1656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 1658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UStringSearch *strsrch; 1659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memset(rules, 0, 128*sizeof(UChar)); 1660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memset(pattern, 0, 128*sizeof(UChar)); 1661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memset(text, 0, 128*sizeof(UChar)); 1662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(CONTRACTIONRULE, rules, 128); 1664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru collator = ucol_openRules(rules, u_strlen(rules), UCOL_ON, 1665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCOL_TERTIARY, NULL, &status); 1666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status == U_FILE_ACCESS_ERROR) { 1667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_data_err("Is your data around?\n"); 1668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if(U_FAILURE(status)) { 1670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error opening collator %s\n", u_errorName(status)); 1671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch = usearch_openFromCollator(pattern, 1, text, 1, collator, NULL, 1674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &status); 1675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error opening string search %s\n", u_errorName(status)); 1677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (CONTRACTION[count].text != NULL) { 1680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(CONTRACTION[count].text, text, 128); 1681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(CONTRACTION[count].pattern, pattern, 128); 1682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setText(strsrch, text, -1, &status); 1683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setPattern(strsrch, pattern, -1, &status); 1684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithUStringSearch(strsrch, CONTRACTION[count])) { 1685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error at test number %d\n", count); 1686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 1688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(strsrch); 1690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_close(collator); 1691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestIgnorable(void) 1694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar rules[128]; 1696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar pattern[128]; 1697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar text[128]; 1698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCollator *collator; 1699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UStringSearch *strsrch; 1701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t count = 0; 1702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memset(rules, 0, 128*sizeof(UChar)); 1704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memset(pattern, 0, 128*sizeof(UChar)); 1705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memset(text, 0, 128*sizeof(UChar)); 1706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(IGNORABLERULE, rules, 128); 1708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru collator = ucol_openRules(rules, u_strlen(rules), UCOL_ON, 1709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru IGNORABLE[count].strength, NULL, &status); 1710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status == U_FILE_ACCESS_ERROR) { 1711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_data_err("Is your data around?\n"); 1712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if(U_FAILURE(status)) { 1714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error opening collator %s\n", u_errorName(status)); 1715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch = usearch_openFromCollator(pattern, 1, text, 1, collator, NULL, 1718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &status); 1719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error opening string search %s\n", u_errorName(status)); 1721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (IGNORABLE[count].text != NULL) { 1724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(IGNORABLE[count].text, text, 128); 1725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(IGNORABLE[count].pattern, pattern, 128); 1726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setText(strsrch, text, -1, &status); 1727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setPattern(strsrch, pattern, -1, &status); 1728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithUStringSearch(strsrch, IGNORABLE[count])) { 1729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error at test number %d\n", count); 1730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 1732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(strsrch); 1734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_close(collator); 1735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1737c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Querustatic void TestDiacriticMatch(void) 1738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar pattern[128]; 1740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar text[128]; 1741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UStringSearch *strsrch = NULL; 1743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCollator *coll = NULL; 1744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t count = 0; 1745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SearchData search; 1746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memset(pattern, 0, 128*sizeof(UChar)); 1748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memset(text, 0, 128*sizeof(UChar)); 1749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch = usearch_open(pattern, 1, text, 1, uloc_getDefault(), NULL, &status); 1751b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_FAILURE(status)) { 17526d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Error opening string search %s\n", u_errorName(status)); 1753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1756c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru search = DIACRITICMATCH[count]; 1757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (search.text != NULL) { 1758b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (search.collator != NULL) { 1759b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho coll = ucol_openFromShortString(search.collator, FALSE, NULL, &status); 1760b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 1761c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru /* Always use "en_US" because some of these tests fail in Danish locales. */ 1762b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho coll = ucol_open("en_US"/*uloc_getDefault()*/, &status); 1763b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho ucol_setStrength(coll, search.strength); 1764b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1765b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_FAILURE(status)) { 1766b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("Error opening string search collator(\"%s\") %s\n", search.collator, u_errorName(status)); 1767b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return; 1768b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1769b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1770b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho usearch_setCollator(strsrch, coll, &status); 1771b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_FAILURE(status)) { 1772b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("Error setting string search collator %s\n", u_errorName(status)); 1773b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return; 1774b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search.text, text, 128); 1777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search.pattern, pattern, 128); 1778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setText(strsrch, text, -1, &status); 1779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setPattern(strsrch, pattern, -1, &status); 1780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithUStringSearch(strsrch, search)) { 1781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error at test number %d\n", count); 1782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_close(coll); 1784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1785c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru search = DIACRITICMATCH[++count]; 1786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(strsrch); 1788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestCanonical(void) 1791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 17936d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 17946d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru open(&status); 17956d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 17966d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 17976d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 17986d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 1799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (BASICCANONICAL[count].text != NULL) { 1800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertCanonicalEqual(BASICCANONICAL[count])) { 1801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error at test number %d\n", count); 1802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 1804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru close(); 1806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestNormCanonical(void) 1809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 1811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 18126d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru open(&status); 18136d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 18146d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 18156d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 18166d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 1817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_setAttribute(EN_US_, UCOL_NORMALIZATION_MODE, UCOL_ON, &status); 1818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count = 0; 1819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (NORMCANONICAL[count].text != NULL) { 1820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertCanonicalEqual(NORMCANONICAL[count])) { 1821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error at test number %d\n", count); 1822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 1824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_setAttribute(EN_US_, UCOL_NORMALIZATION_MODE, UCOL_OFF, &status); 1826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru close(); 1827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestStrengthCanonical(void) 1830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 18326d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 18336d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru open(&status); 18346d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 18356d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 18366d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 18376d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 1838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (STRENGTHCANONICAL[count].text != NULL) { 1839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertCanonicalEqual(STRENGTHCANONICAL[count])) { 1840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error at test number %d\n", count); 1841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 1843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru close(); 1845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestBreakIteratorCanonical(void) { 1848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 1850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK_BREAK("x"); 1852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION 1854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 18556d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru open(&status); 18566d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 18576d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 18586d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 18596d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 1860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (count < 4) { 1861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 0-3 test are fixed */ 1862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar pattern[32]; 1863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar text[128]; 1864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const SearchData *search = &(BREAKITERATORCANONICAL[count]); 1865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCollator *collator = getCollator(search->collator); 1866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBreakIterator *breaker = getBreakIterator(search->breaker); 1867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UStringSearch *strsrch; 1868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search->text, text, 128); 1870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search->pattern, pattern, 32); 1871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_setStrength(collator, search->strength); 1872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch = usearch_openFromCollator(pattern, -1, text, -1, collator, 1874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru breaker, &status); 1875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status == U_FILE_ACCESS_ERROR) { 1876c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru log_data_err("Is your data around?\n"); 1877c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru goto ENDTESTBREAKITERATOR; 1878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if(U_FAILURE(status)) { 1879c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru log_err("Error opening searcher\n"); 1880c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru goto ENDTESTBREAKITERATOR; 1881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON, 1883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &status); 1884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || 1885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getBreakIterator(strsrch) != breaker) { 1886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting break iterator\n"); 1887c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru usearch_close(strsrch); 1888c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru goto ENDTESTBREAKITERATOR; 1889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithUStringSearch(strsrch, *search)) { 1891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_setStrength(collator, UCOL_TERTIARY); 1892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(strsrch); 1893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTBREAKITERATOR; 1894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru search = &(BREAKITERATOREXACT[count + 1]); 1896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru breaker = getBreakIterator(search->breaker); 1897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setBreakIterator(strsrch, breaker, &status); 1898c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (U_FAILURE(status) || usearch_getBreakIterator(strsrch) != breaker) { 1899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting break iterator\n"); 1900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(strsrch); 1901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTBREAKITERATOR; 1902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_reset(strsrch); 1904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON, 1905b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &status); 1906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithUStringSearch(strsrch, *search)) { 1907c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru log_err("Error at test number %d\n", count); 1908c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru usearch_close(strsrch); 1909c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru goto ENDTESTBREAKITERATOR; 1910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(strsrch); 1912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count += 2; 1913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count = 0; 1915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (BREAKITERATORCANONICAL[count].text != NULL) { 1916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqual(BREAKITERATORCANONICAL[count])) { 1917b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error at test number %d\n", count); 1918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTBREAKITERATOR; 1919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1920b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 1921b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1922b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruENDTESTBREAKITERATOR: 1924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru close(); 1925b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1926b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1927b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestVariableCanonical(void) 1929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1930b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 1931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 19326d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru open(&status); 19336d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 19346d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 19356d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 19366d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 1937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_setAttribute(EN_US_, UCOL_ALTERNATE_HANDLING, UCOL_SHIFTED, &status); 1938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting collation alternate attribute %s\n", 1940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(status)); 1941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (VARIABLE[count].text != NULL) { 1943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("variable %d\n", count); 1944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertCanonicalEqual(VARIABLE[count])) { 1945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error at test number %d\n", count); 1946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 1948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_setAttribute(EN_US_, UCOL_ALTERNATE_HANDLING, 1950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCOL_NON_IGNORABLE, &status); 1951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru close(); 1952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestOverlapCanonical(void) 1955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 19576d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 19586d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru open(&status); 19596d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 19606d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 19616d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 19626d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 1963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (OVERLAPCANONICAL[count].text != NULL) { 1964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithAttribute(OVERLAPCANONICAL[count], USEARCH_ON, 1965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru USEARCH_ON)) { 1966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error at overlap test number %d\n", count); 1967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 1969b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count = 0; 1971b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (NONOVERLAP[count].text != NULL) { 1972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertCanonicalEqual(NONOVERLAPCANONICAL[count])) { 1973b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error at non overlap test number %d\n", count); 1974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 1976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count = 0; 1979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (count < 1) { 1980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar pattern[32]; 1981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar text[128]; 1982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const SearchData *search = &(OVERLAPCANONICAL[count]); 1983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCollator *collator = getCollator(search->collator); 1984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UStringSearch *strsrch; 19856d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru status = U_ZERO_ERROR; 1986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search->text, text, 128); 1988b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search->pattern, pattern, 32); 1989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch = usearch_openFromCollator(pattern, -1, text, -1, collator, 1990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NULL, &status); 1991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status == U_FILE_ACCESS_ERROR) { 1992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_data_err("Is your data around?\n"); 1993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if(U_FAILURE(status)) { 1995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error opening searcher\n"); 1996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON, 1999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &status); 2000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setAttribute(strsrch, USEARCH_OVERLAP, USEARCH_ON, &status); 2001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || 2002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getAttribute(strsrch, USEARCH_OVERLAP) != USEARCH_ON) { 2003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting overlap option\n"); 2004b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithUStringSearch(strsrch, *search)) { 2006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(strsrch); 2007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru search = &(NONOVERLAPCANONICAL[count]); 2010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setAttribute(strsrch, USEARCH_OVERLAP, USEARCH_OFF, &status); 2011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || 2012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getAttribute(strsrch, USEARCH_OVERLAP) != USEARCH_OFF) { 2013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting overlap option\n"); 2014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_reset(strsrch); 2016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithUStringSearch(strsrch, *search)) { 2017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(strsrch); 2018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error at test number %d\n", count); 2019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 2022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(strsrch); 2023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru close(); 2025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestCollatorCanonical(void) 2028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 2029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test collator that thinks "o" and "p" are the same thing */ 2030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar rules[32]; 2031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCollator *tailored = NULL; 2032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar pattern[32]; 2034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar text[128]; 2035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UStringSearch *strsrch; 2036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 20376d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru open(&status); 20386d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 20396d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 20406d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 20416d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 2042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(COLLATORCANONICAL[0].text, text, 128); 2043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(COLLATORCANONICAL[0].pattern, pattern, 32); 2044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch = usearch_openFromCollator(pattern, -1, text, -1, EN_US_, 2046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NULL, &status); 2047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status == U_FILE_ACCESS_ERROR) { 2048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_data_err("Is your data around?\n"); 2049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if(U_FAILURE(status)) { 2051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error opening searcher\n"); 2052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON, 2055b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &status); 2056b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 2057b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error opening string search %s\n", u_errorName(status)); 2058b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2059b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithUStringSearch(strsrch, COLLATORCANONICAL[0])) { 2060b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTCOLLATOR; 2061b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2062b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2063b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(TESTCOLLATORRULE, rules, 32); 2064b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tailored = ucol_openRules(rules, -1, UCOL_ON, 2065b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru COLLATORCANONICAL[1].strength, NULL, &status); 2066b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 2067b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error opening rule based collator %s\n", u_errorName(status)); 2068b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2070b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setCollator(strsrch, tailored, &status); 2071b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || usearch_getCollator(strsrch) != tailored) { 2072b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting rule based collator\n"); 2073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2074b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_reset(strsrch); 2075b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON, 2076b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &status); 2077b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithUStringSearch(strsrch, COLLATORCANONICAL[1])) { 2078b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTCOLLATOR; 2079b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2080b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2081b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setCollator(strsrch, EN_US_, &status); 2082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_reset(strsrch); 2083b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON, 2084b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &status); 2085b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || usearch_getCollator(strsrch) != EN_US_) { 2086b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting rule based collator\n"); 2087b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2088b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithUStringSearch(strsrch, COLLATORCANONICAL[0])) { 2089b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTCOLLATOR; 2090b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2091b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2092b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruENDTESTCOLLATOR: 2093b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(strsrch); 2094b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (tailored != NULL) { 2095b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_close(tailored); 2096b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2097b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru close(); 2098b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2099b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestPatternCanonical(void) 2101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 2102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UStringSearch *strsrch; 2103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar pattern[32]; 2104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar text[128]; 2105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UChar *temp; 2106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t templength; 2107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 21096d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru open(&status); 21106d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 21116d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 21126d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 21136d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 2114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(PATTERNCANONICAL[0].text, text, 128); 2115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(PATTERNCANONICAL[0].pattern, pattern, 32); 2116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_setStrength(EN_US_, PATTERNCANONICAL[0].strength); 2118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch = usearch_openFromCollator(pattern, -1, text, -1, EN_US_, 2119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NULL, &status); 2120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON, 2121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &status); 2122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 2123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error opening string search %s\n", u_errorName(status)); 2124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTPATTERN; 2125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp = usearch_getPattern(strsrch, &templength); 2127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(pattern, temp) != 0) { 2128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting pattern\n"); 2129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithUStringSearch(strsrch, PATTERNCANONICAL[0])) { 2131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTPATTERN; 2132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(PATTERNCANONICAL[1].pattern, pattern, 32); 2135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setPattern(strsrch, pattern, -1, &status); 2136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp = usearch_getPattern(strsrch, &templength); 2137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(pattern, temp) != 0) { 2138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting pattern\n"); 2139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTPATTERN; 2140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_reset(strsrch); 2142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON, 2143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &status); 2144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 2145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting pattern %s\n", u_errorName(status)); 2146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithUStringSearch(strsrch, PATTERNCANONICAL[1])) { 2148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTPATTERN; 2149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(PATTERNCANONICAL[0].pattern, pattern, 32); 2152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setPattern(strsrch, pattern, -1, &status); 2153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp = usearch_getPattern(strsrch, &templength); 2154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(pattern, temp) != 0) { 2155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting pattern\n"); 2156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTPATTERN; 2157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_reset(strsrch); 2159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON, 2160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &status); 2161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 2162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting pattern %s\n", u_errorName(status)); 2163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithUStringSearch(strsrch, PATTERNCANONICAL[0])) { 2165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTPATTERN; 2166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruENDTESTPATTERN: 2168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_setStrength(EN_US_, UCOL_TERTIARY); 2169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strsrch != NULL) { 2170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(strsrch); 2171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru close(); 2173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestTextCanonical(void) 2176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 2177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UStringSearch *strsrch; 2178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar pattern[32]; 2179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar text[128]; 2180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UChar *temp; 2181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t templength; 2182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(TEXTCANONICAL[0].text, text, 128); 2185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(TEXTCANONICAL[0].pattern, pattern, 32); 2186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 21876d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru open(&status); 21886d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 21896d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 21906d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 21916d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 2192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch = usearch_openFromCollator(pattern, -1, text, -1, EN_US_, 2193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NULL, &status); 2194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON, 2195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &status); 2196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 2198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error opening string search %s\n", u_errorName(status)); 2199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTPATTERN; 2200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp = usearch_getText(strsrch, &templength); 2202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(text, temp) != 0) { 2203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting text\n"); 2204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithUStringSearch(strsrch, TEXTCANONICAL[0])) { 2206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTPATTERN; 2207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(TEXTCANONICAL[1].text, text, 32); 2210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setText(strsrch, text, -1, &status); 2211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp = usearch_getText(strsrch, &templength); 2212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(text, temp) != 0) { 2213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting text\n"); 2214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTPATTERN; 2215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 2217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting text %s\n", u_errorName(status)); 2218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithUStringSearch(strsrch, TEXTCANONICAL[1])) { 2220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTPATTERN; 2221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(TEXTCANONICAL[0].text, text, 32); 2224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setText(strsrch, text, -1, &status); 2225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp = usearch_getText(strsrch, &templength); 2226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(text, temp) != 0) { 2227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting text\n"); 2228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTPATTERN; 2229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 2231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting pattern %s\n", u_errorName(status)); 2232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithUStringSearch(strsrch, TEXTCANONICAL[0])) { 2234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTPATTERN; 2235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruENDTESTPATTERN: 2237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strsrch != NULL) { 2238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(strsrch); 2239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru close(); 2241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestCompositeBoundariesCanonical(void) 2244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 2245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 22466d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 22476d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru open(&status); 22486d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 22496d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 22506d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 22516d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 2252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (COMPOSITEBOUNDARIESCANONICAL[count].text != NULL) { 2253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("composite %d\n", count); 2254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertCanonicalEqual(COMPOSITEBOUNDARIESCANONICAL[count])) { 2255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error at test number %d\n", count); 2256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 2258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru close(); 2260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestGetSetOffsetCanonical(void) 2263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 226450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int searchDataIndex = 0; 2265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar pattern[32]; 2266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar text[128]; 2267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UStringSearch *strsrch; 2269c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UCollator *collator; 2270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memset(pattern, 0, 32*sizeof(UChar)); 2272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memset(text, 0, 128*sizeof(UChar)); 2273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 22746d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru open(&status); 22756d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 22766d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 22776d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 22786d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 2279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch = usearch_openFromCollator(pattern, 16, text, 32, EN_US_, NULL, 2280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &status); 2281c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2282c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru collator = usearch_getCollator(strsrch); 2283c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru ucol_setAttribute(collator, UCOL_NORMALIZATION_MODE, UCOL_ON, &status); 2284c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON, 2286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &status); 2287c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* testing out of bounds error */ 2289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setOffset(strsrch, -1, &status); 2290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 2291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error expecting set offset error\n"); 2292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setOffset(strsrch, 128, &status); 2294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 2295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error expecting set offset error\n"); 2296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 229750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho while (BASICCANONICAL[searchDataIndex].text != NULL) { 2298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 229950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho SearchData search = BASICCANONICAL[searchDataIndex ++]; 2300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t matchindex = search.offset[count]; 2301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t textlength; 2302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 230350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (BASICCANONICAL[searchDataIndex].text == NULL) { 2304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* skip the last one */ 2305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 2306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search.text, text, 128); 2309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search.pattern, pattern, 32); 2310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 2311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setText(strsrch, text, -1, &status); 2312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setPattern(strsrch, pattern, -1, &status); 2313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (U_SUCCESS(status) && matchindex >= 0) { 2314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t matchlength = search.size[count]; 2315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_next(strsrch, &status); 2316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (matchindex != usearch_getMatchedStart(strsrch) || 2317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru matchlength != (uint32_t)usearch_getMatchedLength(strsrch)) { 2318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char *str = toCharString(usearch_getText(strsrch, 2319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &textlength)); 2320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Text: %s\n", str); 2321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str = toCharString(usearch_getPattern(strsrch, &textlength)); 2322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Pattern: %s\n", str); 2323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error match found at %d %d\n", 2324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getMatchedStart(strsrch), 2325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getMatchedLength(strsrch)); 2326c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru goto bail; 2327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru matchindex = search.offset[count + 1] == -1 ? -1 : 2329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru search.offset[count + 2]; 2330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (search.offset[count + 1] != -1) { 2331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setOffset(strsrch, search.offset[count + 1] + 1, 2332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &status); 2333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (usearch_getOffset(strsrch) != search.offset[count + 1] + 1) { 2334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error setting offset\n"); 2335c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru goto bail; 2336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count += 2; 2340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_next(strsrch, &status); 2342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (usearch_getMatchedStart(strsrch) != USEARCH_DONE) { 2343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char *str = toCharString(usearch_getText(strsrch, &textlength)); 2344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Text: %s\n", str); 2345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str = toCharString(usearch_getPattern(strsrch, &textlength)); 2346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Pattern: %s\n", str); 2347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error match found at %d %d\n", 2348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getMatchedStart(strsrch), 2349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_getMatchedLength(strsrch)); 2350c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru goto bail; 2351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2353c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2354c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Querubail: 2355c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru ucol_setAttribute(collator, UCOL_NORMALIZATION_MODE, UCOL_OFF, &status); 2356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(strsrch); 2357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru close(); 2358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestSupplementaryCanonical(void) 2361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 2362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 23636d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 23646d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru open(&status); 23656d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 23666d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Unable to open static collators %s\n", u_errorName(status)); 23676d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 23686d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 2369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (SUPPLEMENTARYCANONICAL[count].text != NULL) { 2370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertCanonicalEqual(SUPPLEMENTARYCANONICAL[count])) { 2371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error at test number %d\n", count); 2372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 2374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru close(); 2376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestContractionCanonical(void) 2379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 2380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar rules[128]; 2381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar pattern[128]; 2382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar text[128]; 2383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCollator *collator = NULL; 2384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 2386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UStringSearch *strsrch = NULL; 2387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memset(rules, 0, 128*sizeof(UChar)); 2388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memset(pattern, 0, 128*sizeof(UChar)); 2389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memset(text, 0, 128*sizeof(UChar)); 2390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(CONTRACTIONRULE, rules, 128); 2392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru collator = ucol_openRules(rules, u_strlen(rules), UCOL_ON, 2393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCOL_TERTIARY, NULL, &status); 2394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status == U_FILE_ACCESS_ERROR) { 2395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_data_err("Is your data around?\n"); 2396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if(U_FAILURE(status)) { 2398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error opening collator %s\n", u_errorName(status)); 2399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch = usearch_openFromCollator(pattern, 1, text, 1, collator, NULL, 2402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &status); 2403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON, 2404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &status); 2405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 2406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error opening string search %s\n", u_errorName(status)); 2407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (CONTRACTIONCANONICAL[count].text != NULL) { 2410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(CONTRACTIONCANONICAL[count].text, text, 128); 2411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(CONTRACTIONCANONICAL[count].pattern, pattern, 128); 2412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setText(strsrch, text, -1, &status); 2413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_setPattern(strsrch, pattern, -1, &status); 2414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithUStringSearch(strsrch, 2415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CONTRACTIONCANONICAL[count])) { 2416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error at test number %d\n", count); 2417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 2419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(strsrch); 2421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_close(collator); 2422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestNumeric(void) { 2425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCollator *coll = NULL; 2426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UStringSearch *strsrch = NULL; 2427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar pattern[128]; 2430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar text[128]; 2431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memset(pattern, 0, 128*sizeof(UChar)); 2432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memset(text, 0, 128*sizeof(UChar)); 2433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru coll = ucol_open("", &status); 2435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 2436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_data_err("Could not open UCA. Is your data around?\n"); 2437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_setAttribute(coll, UCOL_NUMERIC_COLLATION, UCOL_ON, &status); 2441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch = usearch_openFromCollator(pattern, 1, text, 1, coll, NULL, &status); 2443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status != U_UNSUPPORTED_ERROR || U_SUCCESS(status)) { 2445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Expected U_UNSUPPORTED_ERROR when trying to instantiate a search object from a CODAN collator, got %s instead\n", u_errorName(status)); 2446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(strsrch) { 2447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru usearch_close(strsrch); 2448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucol_close(coll); 2452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2455c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru/* This test is for ticket 4038 due to incorrect backward searching when certain patterns have a length > 1 */ 2456c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Querustatic void TestForwardBackward(void) { 2457c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2458c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UCollator *coll = NULL; 2459c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UStringSearch *search = NULL; 2460c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UChar usrcstr[32], value[4]; 2461c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru int32_t pos= -1; 2462c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru int32_t expectedPos = 9; 2463c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2464c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru coll = ucol_open("en_GB", &status); 2465c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (U_FAILURE(status)) { 24666d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "ucol_open failed: %s\n", u_errorName(status)); 2467c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru goto exitTestForwardBackward; 2468c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2469c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru ucol_setAttribute(coll, UCOL_STRENGTH, UCOL_PRIMARY, &status); 2470c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru ucol_setAttribute(coll, UCOL_CASE_LEVEL, UCOL_ON, &status); 2471c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru ucol_setAttribute(coll, UCOL_ALTERNATE_HANDLING, UCOL_NON_IGNORABLE, &status); 2472c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2473c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru u_uastrcpy(usrcstr, "QBitArray::bitarr_data"); /* text */ 2474c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru u_uastrcpy(value, "::"); /* pattern */ 2475c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2476c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru search = usearch_openFromCollator(value, 2, usrcstr, 22, coll, NULL, &status); 2477c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (U_FAILURE(status)) { 2478c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru log_err("usearch_openFromCollator failed: %s\n", u_errorName(status)); 2479c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru goto exitTestForwardBackward; 2480c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2481c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2482c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru usearch_reset(search); 2483c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru /* forward search */ 2484c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru pos = usearch_first(search, &status); 2485c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (pos != expectedPos) { 2486c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru log_err("Expected search result: %d; Got instead: %d\n", expectedPos, pos); 2487c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru goto exitTestForwardBackward; 2488c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2489c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2490c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru pos = -1; 2491c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru usearch_reset(search); 2492c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru /* backward search */ 2493c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru pos = usearch_last(search, &status); 2494c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (pos != expectedPos) { 2495c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru log_err("Expected search result: %d; Got instead: %d\n", expectedPos, pos); 2496c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2497c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2498c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste QueruexitTestForwardBackward : 2499c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (coll != NULL) { 2500c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru ucol_close(coll); 2501c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2502c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (search != NULL) { 2503c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru usearch_close(search); 2504c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 2505c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru} 2506c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2507b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#define TEST_ASSERT(x) \ 25086d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru {if (U_FAILURE(x)) {log_err_status(x, "%s:%d: FAIL: test assertion failure \n", __FILE__, __LINE__);\ 2509b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru }} 2510b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2511b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic void TestSearchForNull(void) { 2512b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UCollator *coll; 2513b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode ec; 2514b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UStringSearch *search; 2515b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int pos; 2516b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int len; 2517b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int expectedPos; 2518b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int expectedLen; 2519b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int expectedNum; 2520b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int count = 0; 2521b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const UChar zerodigit = 0x0030; /* 0 */ 2522b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const UChar nulldigit = 0x0000; /* null */ 2523b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2524b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /* static const UChar var[(length)+1]=U_DECLARE_UTF16(cs) */ 2525b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#define PATTERN_LEN 4 2526b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#define TEXT_LEN 10 2527b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2528b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru U_STRING_DECL(_pattern, "IS 0", PATTERN_LEN); 2529b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru U_STRING_DECL(_text, "_0IS 0 OK?", TEXT_LEN); 2530b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UChar pattern[PATTERN_LEN + 1], text[TEXT_LEN + 1]; 2531b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2532b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru U_STRING_INIT(_pattern, "IS 0", PATTERN_LEN); 2533b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru U_STRING_INIT(_text, "_0IS 0 OK?", TEXT_LEN); 2534b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru expectedPos = 2; 2535b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru expectedLen = 4; 2536b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru expectedNum = 1; 2537b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2538b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (pos = 0; pos < PATTERN_LEN; pos++) { 2539b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (_pattern[pos] == zerodigit) { 2540b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru pattern[pos] = nulldigit; 2541b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 2542b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru pattern[pos] = _pattern[pos]; 2543b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 2544b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 2545b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru pattern[PATTERN_LEN] = 0x0000; 2546b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2547b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (pos = 0; pos < TEXT_LEN; pos++) { 2548b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (_text[pos] == zerodigit) { 2549b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru text[pos] = nulldigit; 2550b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 2551b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru text[pos] = _text[pos]; 2552b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 2553b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 2554b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru text[TEXT_LEN] = 0x0000; 2555b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2556b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru ec = U_ZERO_ERROR; 2557b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2558b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /* create a US-English collator */ 2559b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru coll = ucol_open("en_US", &ec); 2560b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2561b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /* make sure we didn't fail. */ 25626d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru TEST_ASSERT (ec); 2563b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2564b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru ucol_setStrength(coll, UCOL_IDENTICAL); 2565b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2566b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /* open a search looking for 0 */ 2567b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru search = usearch_openFromCollator(pattern, PATTERN_LEN, text, 2568b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru TEXT_LEN, coll, NULL, &ec); 25696d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru TEST_ASSERT (ec); 25706d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 25716d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (coll != NULL && search != NULL) { 25726d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru pos = usearch_first(search, &ec); 25736d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru len = usearch_getMatchedLength(search); 25746d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (pos != expectedPos) { 25756d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err("Expected search result: %d; Got instead: %d\n", expectedPos, 25766d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru pos); 25776d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 2578b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 25796d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (len != expectedLen) { 25806d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err("Expected search result length: %d; Got instead: %d\n", 25816d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru expectedLen, len); 25826d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 2583b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 25846d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru for (pos = usearch_first(search, &ec); pos != USEARCH_DONE; pos 25856d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru = usearch_next(search, &ec)) { 25866d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_verbose("Match at %d\n", pos); 25876d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru count += 1; 25886d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 2589b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 25906d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (count != expectedNum) { 25916d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err("Expected %d search hits, found %d\n", expectedNum, count); 25926d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 2593b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 2594b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2595b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru ucol_close(coll); 2596b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru usearch_close(search); 2597b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 2598b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2599b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic void TestStrengthIdentical(void) 2600b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru{ 2601b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UCollator *coll; 2602b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UErrorCode ec = U_ZERO_ERROR; 2603b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UStringSearch *search; 2604b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2605b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UChar pattern[] = {0x05E9, 0x0591, 0x05E9}; 2606b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UChar text[] = {0x05E9, 0x0592, 0x05E9}; 2607b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t pLen = sizeof (pattern) / sizeof(pattern[0]); 2608b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t tLen = sizeof(text) / sizeof (text[0]); 2609b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t expectedPos = 0; 2610b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t expectedLen = 3; 2611b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2612b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t pos; 2613b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t len; 2614b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2615b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /* create a US-English collator */ 2616b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho coll = ucol_open ("en_US", &ec); 2617b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2618b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /* make sure we didn't fail. */ 2619b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT (ec); 2620b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2621b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru ucol_setStrength( coll, UCOL_TERTIARY); 2622b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2623b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /* open a search looking for 0 */ 2624b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho search = usearch_openFromCollator (pattern, pLen, text, tLen, coll, NULL, &ec); 2625b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT (ec); 2626b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 26276d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (coll != NULL && search != NULL) { 2628b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho pos = usearch_first(search, &ec); 2629b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho len = usearch_getMatchedLength(search); 2630b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2631b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(pos != expectedPos) { 2632b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("Expected search result: %d; Got instead: %d\n", expectedPos, pos); 2633b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2634b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2635b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(len != expectedLen) { 2636b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("Expected search result length: %d; Got instead: %d\n", expectedLen, len); 2637b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2638b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 26396d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru /* Now try it at strength == UCOL_IDENTICAL */ 26406d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru ucol_setStrength(coll, UCOL_IDENTICAL); 2641b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho usearch_reset(search); 2642b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2643b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho pos = usearch_first(search, &ec); 2644b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho len = usearch_getMatchedLength(search); 2645b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2646b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(pos != -1) { 2647b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("Expected failure for strentgh = UCOL_IDENTICAL: got %d instead.\n", pos); 2648b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 26496d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 2650b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2651b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru usearch_close(search); 2652b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru ucol_close(coll); 2653b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 2654b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2655b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho/** 2656b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho* TestUsingSearchCollator 2657b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho*/ 2658b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2659b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#define ARRAY_LENGTH(array) (sizeof(array)/sizeof(array[0])) 2660b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2661b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehotypedef struct { 2662b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const UChar * pattern; 2663b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const int32_t * offsets; 2664b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t offsetsLen; 2665b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} PatternAndOffsets; 2666b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2667b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const UChar scKoText[] = { 2668b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 0x0020, 2669b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho/*01*/ 0xAC00, 0x0020, /* simple LV Hangul */ 2670b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho/*03*/ 0xAC01, 0x0020, /* simple LVT Hangul */ 2671b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho/*05*/ 0xAC0F, 0x0020, /* LVTT, last jamo expands for search */ 2672b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho/*07*/ 0xAFFF, 0x0020, /* LLVVVTT, every jamo expands for search */ 2673b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho/*09*/ 0x1100, 0x1161, 0x11A8, 0x0020, /* 0xAC01 as conjoining jamo */ 2674b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho/*13*/ 0x1100, 0x1161, 0x1100, 0x0020, /* 0xAC01 as basic conjoining jamo (per search rules) */ 2675b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho/*17*/ 0x3131, 0x314F, 0x3131, 0x0020, /* 0xAC01 as compatibility jamo */ 2676b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho/*21*/ 0x1100, 0x1161, 0x11B6, 0x0020, /* 0xAC0F as conjoining jamo; last expands for search */ 2677b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho/*25*/ 0x1100, 0x1161, 0x1105, 0x1112, 0x0020, /* 0xAC0F as basic conjoining jamo; last expands for search */ 2678b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho/*30*/ 0x1101, 0x1170, 0x11B6, 0x0020, /* 0xAFFF as conjoining jamo; all expand for search */ 2679b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho/*34*/ 0x00E6, 0x0020, /* small letter ae, expands */ 2680b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho/*36*/ 0x1E4D, 0x0020, /* small letter o with tilde and acute, decomposes */ 2681b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 0 2682b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}; 2683b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2684b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const UChar scKoPat0[] = { 0xAC01, 0 }; 2685b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const UChar scKoPat1[] = { 0x1100, 0x1161, 0x11A8, 0 }; /* 0xAC01 as conjoining jamo */ 2686b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const UChar scKoPat2[] = { 0xAC0F, 0 }; 2687b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const UChar scKoPat3[] = { 0x1100, 0x1161, 0x1105, 0x1112, 0 }; /* 0xAC0F as basic conjoining jamo */ 2688b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const UChar scKoPat4[] = { 0xAFFF, 0 }; 2689b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const UChar scKoPat5[] = { 0x1101, 0x1170, 0x11B6, 0 }; /* 0xAFFF as conjoining jamo */ 2690b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2691b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const int32_t scKoSrchOff01[] = { 3, 9, 13 }; 2692b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const int32_t scKoSrchOff23[] = { 5, 21, 25 }; 2693b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const int32_t scKoSrchOff45[] = { 7, 30 }; 2694b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2695b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const PatternAndOffsets scKoSrchPatternsOffsets[] = { 2696b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { scKoPat0, scKoSrchOff01, ARRAY_LENGTH(scKoSrchOff01) }, 2697b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { scKoPat1, scKoSrchOff01, ARRAY_LENGTH(scKoSrchOff01) }, 2698b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { scKoPat2, scKoSrchOff23, ARRAY_LENGTH(scKoSrchOff23) }, 2699b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { scKoPat3, scKoSrchOff23, ARRAY_LENGTH(scKoSrchOff23) }, 2700b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { scKoPat4, scKoSrchOff45, ARRAY_LENGTH(scKoSrchOff45) }, 2701b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { scKoPat5, scKoSrchOff45, ARRAY_LENGTH(scKoSrchOff45) }, 2702b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { NULL, NULL, 0 } 2703b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}; 2704b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2705b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const int32_t scKoStndOff01[] = { 3, 9 }; 2706b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const int32_t scKoStndOff2[] = { 5, 21 }; 2707b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const int32_t scKoStndOff3[] = { 25 }; 2708b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const int32_t scKoStndOff45[] = { 7, 30 }; 2709b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2710b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const PatternAndOffsets scKoStndPatternsOffsets[] = { 2711b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { scKoPat0, scKoStndOff01, ARRAY_LENGTH(scKoStndOff01) }, 2712b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { scKoPat1, scKoStndOff01, ARRAY_LENGTH(scKoStndOff01) }, 2713b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { scKoPat2, scKoStndOff2, ARRAY_LENGTH(scKoStndOff2) }, 2714b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { scKoPat3, scKoStndOff3, ARRAY_LENGTH(scKoStndOff3) }, 2715b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { scKoPat4, scKoStndOff45, ARRAY_LENGTH(scKoStndOff45) }, 2716b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { scKoPat5, scKoStndOff45, ARRAY_LENGTH(scKoStndOff45) }, 2717b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { NULL, NULL, 0 } 2718b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}; 2719b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2720b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehotypedef struct { 2721b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const char * locale; 2722b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const UChar * text; 2723b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const PatternAndOffsets * patternsAndOffsets; 2724b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} TUSCItem; 2725b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2726b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const TUSCItem tuscItems[] = { 2727b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { "root", scKoText, scKoStndPatternsOffsets }, 2728b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { "root@collation=search", scKoText, scKoSrchPatternsOffsets }, 2729b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { "ko@collation=search", scKoText, scKoSrchPatternsOffsets }, 2730b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { NULL, NULL, NULL } 2731b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}; 2732b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2733b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const UChar dummyPat[] = { 0x0061, 0 }; 2734b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2735b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic void TestUsingSearchCollator(void) 2736b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho{ 2737b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const TUSCItem * tuscItemPtr; 2738b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for (tuscItemPtr = tuscItems; tuscItemPtr->locale != NULL; tuscItemPtr++) { 2739b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UErrorCode status = U_ZERO_ERROR; 2740b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UCollator* ucol = ucol_open(tuscItemPtr->locale, &status); 2741b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if ( U_SUCCESS(status) ) { 2742b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UStringSearch* usrch = usearch_openFromCollator(dummyPat, -1, tuscItemPtr->text, -1, ucol, NULL, &status); 2743b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if ( U_SUCCESS(status) ) { 2744b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const PatternAndOffsets * patternsOffsetsPtr; 2745b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for ( patternsOffsetsPtr = tuscItemPtr->patternsAndOffsets; patternsOffsetsPtr->pattern != NULL; patternsOffsetsPtr++) { 2746b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho usearch_setPattern(usrch, patternsOffsetsPtr->pattern, -1, &status); 2747b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if ( U_SUCCESS(status) ) { 2748b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t offset; 2749b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const int32_t * nextOffsetPtr; 2750b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const int32_t * limitOffsetPtr; 2751b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2752b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho usearch_reset(usrch); 2753b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho nextOffsetPtr = patternsOffsetsPtr->offsets; 2754b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho limitOffsetPtr = patternsOffsetsPtr->offsets + patternsOffsetsPtr->offsetsLen; 2755b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho while (TRUE) { 2756b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho offset = usearch_next(usrch, &status); 2757b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if ( U_FAILURE(status) || offset == USEARCH_DONE ) { 2758b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho break; 2759b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2760b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if ( nextOffsetPtr < limitOffsetPtr ) { 2761b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (offset != *nextOffsetPtr) { 2762b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("error, locale %s, expected usearch_next %d, got %d\n", tuscItemPtr->locale, *nextOffsetPtr, offset); 2763b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho nextOffsetPtr = limitOffsetPtr; 2764b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho break; 2765b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2766b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho nextOffsetPtr++; 2767b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 2768b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("error, locale %s, usearch_next returned more matches than expected\n", tuscItemPtr->locale ); 2769b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2770b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2771b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if ( U_FAILURE(status) ) { 2772b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("error, locale %s, usearch_next failed: %s\n", tuscItemPtr->locale, u_errorName(status) ); 2773b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else if ( nextOffsetPtr < limitOffsetPtr ) { 2774b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("error, locale %s, usearch_next returned fewer matches than expected\n", tuscItemPtr->locale ); 2775b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2776b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2777b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 2778b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho usearch_reset(usrch); 2779b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho nextOffsetPtr = patternsOffsetsPtr->offsets + patternsOffsetsPtr->offsetsLen; 2780b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho limitOffsetPtr = patternsOffsetsPtr->offsets; 2781b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho while (TRUE) { 2782b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho offset = usearch_previous(usrch, &status); 2783b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if ( U_FAILURE(status) || offset == USEARCH_DONE ) { 2784b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho break; 2785b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2786b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if ( nextOffsetPtr > limitOffsetPtr ) { 2787b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho nextOffsetPtr--; 2788b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (offset != *nextOffsetPtr) { 2789b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("error, locale %s, expected usearch_previous %d, got %d\n", tuscItemPtr->locale, *nextOffsetPtr, offset); 2790b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho nextOffsetPtr = limitOffsetPtr; 2791b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho break; 2792b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2793b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 2794b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("error, locale %s, usearch_previous returned more matches than expected\n", tuscItemPtr->locale ); 2795b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2796b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2797b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if ( U_FAILURE(status) ) { 2798b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("error, locale %s, usearch_previous failed: %s\n", tuscItemPtr->locale, u_errorName(status) ); 2799b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else if ( nextOffsetPtr > limitOffsetPtr ) { 2800b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("error, locale %s, usearch_previous returned fewer matches than expected\n", tuscItemPtr->locale ); 2801b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2802b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2803b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 2804b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("error, locale %s, usearch_setPattern failed: %s\n", tuscItemPtr->locale, u_errorName(status) ); 2805b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2806b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2807b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho usearch_close(usrch); 2808b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 2809b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("error, locale %s, usearch_openFromCollator failed: %s\n", tuscItemPtr->locale, u_errorName(status) ); 2810b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2811b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho ucol_close(ucol); 2812b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 2813b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_data_err("error, locale %s, ucol_open failed: %s\n", tuscItemPtr->locale, u_errorName(status) ); 2814b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2815b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2816b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} 2817b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2818b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2819b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic void TestPCEBuffer_with(const UChar *search, uint32_t searchLen, const UChar *source, uint32_t sourceLen) { 2820b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UErrorCode icuStatus = U_ZERO_ERROR; 2821b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UCollator *coll; 2822b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const char *locale; 2823b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UBreakIterator *ubrk; 2824b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UStringSearch *usearch; 2825b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t match = 0; 2826b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2827b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2828b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho coll = ucol_openFromShortString( "LSK_AS_CX_EX_FX_HX_NX_S4", 2829b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho FALSE, 2830b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho NULL, 2831b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho &icuStatus ); 2832b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if ( U_FAILURE(icuStatus) ) 2833b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { 2834b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_data_err( "ucol_openFromShortString error %s\n" , u_errorName(icuStatus)); 2835b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho goto exit; 2836b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2837b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2838b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho locale = ucol_getLocaleByType( coll, 2839b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho ULOC_VALID_LOCALE, 2840b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho &icuStatus ); 2841b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if ( U_FAILURE(icuStatus) ) 2842b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { 2843b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err( "ucol_getLocaleByType error %s\n", u_errorName(icuStatus) ); 2844b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho goto exit; 2845b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2846b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2847b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_verbose("locale=%s\n", locale); 2848b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2849b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho ubrk = ubrk_open( UBRK_CHARACTER, 2850b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho locale, 2851b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho source, 2852b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho sourceLen, 2853b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho &icuStatus ); 2854b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if ( U_FAILURE(icuStatus) ) 2855b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { 2856b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err( "ubrk_open error %s\n", u_errorName(icuStatus) ); 2857b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho goto exit; 2858b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2859b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2860b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho usearch = usearch_openFromCollator( search, 2861b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho searchLen, 2862b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho source, 2863b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho sourceLen, 2864b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho coll, 2865b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho ubrk, 2866b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho &icuStatus ); 2867b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if ( U_FAILURE(icuStatus) ) 2868b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { 2869b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err( "usearch_openFromCollator error %s\n", u_errorName(icuStatus) ); 2870b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho goto exit; 2871b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2872b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2873b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho match = usearch_first( usearch, 2874b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho &icuStatus ); 2875b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if ( U_FAILURE(icuStatus) ) 2876b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { 2877b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err( "usearch_first error %s\n", u_errorName(icuStatus) ); 2878b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho goto exit; 2879b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2880b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2881b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(match==0) { 2882b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_verbose("OK: match=%d\n", match); 2883b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 2884b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("Err: match expected 0 got %d\n", match); 2885b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2886b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2887b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho usearch_close(usearch); 2888b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho ubrk_close(ubrk); 2889b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho ucol_close(coll); 2890b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2891b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoexit: 2892b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return; 2893b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} 2894b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2895b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2896b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic void TestPCEBuffer_100df(void) { 2897b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UChar search[] = 2898b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { 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 */ 2899b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UChar source[] = 2900b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { 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 }; 2901b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho uint32_t searchLen = sizeof(search)/sizeof(UChar); 2902b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho uint32_t sourceLen = sizeof(source)/sizeof(UChar); 2903b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TestPCEBuffer_with(search,searchLen,source,sourceLen); 2904b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2905b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2906b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2907b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic void TestPCEBuffer_2surr(void) { 2908b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UChar search[] = 2909b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { 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 */ 2910b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UChar source[] = 2911b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { 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 }; 2912b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho uint32_t searchLen = sizeof(search)/sizeof(UChar); 2913b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho uint32_t sourceLen = sizeof(source)/sizeof(UChar); 2914b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TestPCEBuffer_with(search,searchLen,source,sourceLen); 2915b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} 2916b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2917b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic void TestMatchFollowedByIgnorables(void) { 2918b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /* test case for ticket#8482 */ 2919b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UChar search[] = { 0x00c9 }; 2920b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UChar source[] = { 0x00c9, 0x0000, 0x0041 }; 2921b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t searchLen; 2922b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t sourceLen; 2923b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UErrorCode icuStatus = U_ZERO_ERROR; 2924b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UCollator *coll; 2925b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const char *locale; 2926b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UBreakIterator *ubrk; 2927b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UStringSearch *usearch; 2928b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t match = 0; 2929b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t matchLength = 0; 2930b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const int32_t expectedMatchLength = 1; 2931b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2932b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho searchLen = sizeof(search)/sizeof(UChar); 2933b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho sourceLen = sizeof(source)/sizeof(UChar); 2934b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2935b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho coll = ucol_openFromShortString("LHR_AN_CX_EX_FX_HX_NX_S3", 2936b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho FALSE, 2937b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho NULL, 2938b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho &icuStatus); 2939b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_FAILURE(icuStatus)) { 2940b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_data_err("ucol_openFromShortString error - %s\n", u_errorName(icuStatus)); 2941b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2942b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2943b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho locale = ucol_getLocaleByType(coll, 2944b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho ULOC_VALID_LOCALE, 2945b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho &icuStatus); 2946b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_FAILURE(icuStatus)) { 2947b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_data_err("ucol_getLocaleByType error - %s\n", u_errorName(icuStatus)); 2948b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2949b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2950b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho ubrk = ubrk_open(UBRK_CHARACTER, 2951b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho locale, 2952b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho source, 2953b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho sourceLen, 2954b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho &icuStatus); 2955b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_FAILURE(icuStatus)) { 2956b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_data_err("ubrk_open error - %s\n", u_errorName(icuStatus)); 2957b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2958b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2959b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho usearch = usearch_openFromCollator(search, 2960b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho searchLen, 2961b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho source, 2962b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho sourceLen, 2963b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho coll, 2964b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho ubrk, 2965b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho &icuStatus); 2966b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_FAILURE(icuStatus)) { 2967b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_data_err("usearch_openFromCollator error - %s\n", u_errorName(icuStatus)); 2968b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2969b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2970b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho match = usearch_first(usearch, 2971b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho &icuStatus); 2972b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_FAILURE(icuStatus)) { 2973b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_data_err("usearch_first error - %s\n", u_errorName(icuStatus)); 2974b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 2975b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2976b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_verbose("match=%d\n", match); 2977b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2978b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho matchLength = usearch_getMatchedLength(usearch); 2979b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2980b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (matchLength != expectedMatchLength) { 2981b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("Error: matchLength=%d, expected=%d\n", matchLength, expectedMatchLength); 2982b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2983b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2984b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2985b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho usearch_close(usearch); 2986b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho ubrk_close(ubrk); 2987b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho ucol_close(coll); 2988b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} 2989b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2990b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho/** 2991b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho* addSearchTest 2992b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho*/ 2993b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid addSearchTest(TestNode** root) 2995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 2996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestStart, "tscoll/usrchtst/TestStart"); 2997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestOpenClose, "tscoll/usrchtst/TestOpenClose"); 2998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestInitialization, "tscoll/usrchtst/TestInitialization"); 2999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestBasic, "tscoll/usrchtst/TestBasic"); 3000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestNormExact, "tscoll/usrchtst/TestNormExact"); 3001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestStrength, "tscoll/usrchtst/TestStrength"); 3002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestBreakIterator, "tscoll/usrchtst/TestBreakIterator"); 3003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestVariable, "tscoll/usrchtst/TestVariable"); 3004b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestOverlap, "tscoll/usrchtst/TestOverlap"); 3005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestCollator, "tscoll/usrchtst/TestCollator"); 3006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestPattern, "tscoll/usrchtst/TestPattern"); 3007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestText, "tscoll/usrchtst/TestText"); 3008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestCompositeBoundaries, 3009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "tscoll/usrchtst/TestCompositeBoundaries"); 3010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestGetSetOffset, "tscoll/usrchtst/TestGetSetOffset"); 3011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestGetSetAttribute, 3012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "tscoll/usrchtst/TestGetSetAttribute"); 3013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestGetMatch, "tscoll/usrchtst/TestGetMatch"); 3014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestSetMatch, "tscoll/usrchtst/TestSetMatch"); 3015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestReset, "tscoll/usrchtst/TestReset"); 3016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestSupplementary, "tscoll/usrchtst/TestSupplementary"); 3017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestContraction, "tscoll/usrchtst/TestContraction"); 3018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestIgnorable, "tscoll/usrchtst/TestIgnorable"); 3019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestCanonical, "tscoll/usrchtst/TestCanonical"); 3020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestNormCanonical, "tscoll/usrchtst/TestNormCanonical"); 3021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestStrengthCanonical, 3022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "tscoll/usrchtst/TestStrengthCanonical"); 3023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestBreakIteratorCanonical, 3024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "tscoll/usrchtst/TestBreakIteratorCanonical"); 3025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestVariableCanonical, 3026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "tscoll/usrchtst/TestVariableCanonical"); 3027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestOverlapCanonical, 3028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "tscoll/usrchtst/TestOverlapCanonical"); 3029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestCollatorCanonical, 3030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "tscoll/usrchtst/TestCollatorCanonical"); 3031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestPatternCanonical, 3032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "tscoll/usrchtst/TestPatternCanonical"); 3033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestTextCanonical, "tscoll/usrchtst/TestTextCanonical"); 3034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestCompositeBoundariesCanonical, 3035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "tscoll/usrchtst/TestCompositeBoundariesCanonical"); 3036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestGetSetOffsetCanonical, 3037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "tscoll/usrchtst/TestGetSetOffsetCanonical"); 3038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestSupplementaryCanonical, 3039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "tscoll/usrchtst/TestSupplementaryCanonical"); 3040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestContractionCanonical, 3041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "tscoll/usrchtst/TestContractionCanonical"); 3042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestEnd, "tscoll/usrchtst/TestEnd"); 3043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestNumeric, "tscoll/usrchtst/TestNumeric"); 3044c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru addTest(root, &TestDiacriticMatch, "tscoll/usrchtst/TestDiacriticMatch"); 3045c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru addTest(root, &TestForwardBackward, "tscoll/usrchtst/TestForwardBackward"); 3046b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho addTest(root, &TestSearchForNull, "tscoll/usrchtst/TestSearchForNull"); 3047b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru addTest(root, &TestStrengthIdentical, "tscoll/usrchtst/TestStrengthIdentical"); 3048b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho addTest(root, &TestUsingSearchCollator, "tscoll/usrchtst/TestUsingSearchCollator"); 3049b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho addTest(root, &TestPCEBuffer_100df, "tscoll/usrchtst/TestPCEBuffer/1_00df"); 3050b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho addTest(root, &TestPCEBuffer_2surr, "tscoll/usrchtst/TestPCEBuffer/2_dfff"); 3051b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho addTest(root, &TestMatchFollowedByIgnorables, "tscoll/usrchtst/TestMatchFollowedByIgnorables"); 3052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 3053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_COLLATION */ 3055