| Index: source/test/cintltst/usrchtst.c
|
| diff --git a/source/test/cintltst/usrchtst.c b/source/test/cintltst/usrchtst.c
|
| deleted file mode 100644
|
| index 7e95f98bd7a1a5df944552b3f05a9e4676e6630a..0000000000000000000000000000000000000000
|
| --- a/source/test/cintltst/usrchtst.c
|
| +++ /dev/null
|
| @@ -1,3073 +0,0 @@
|
| -/********************************************************************
|
| - * Copyright (c) 2001-2011,2015 International Business Machines
|
| - * Corporation and others. All Rights Reserved.
|
| - ********************************************************************
|
| - * File usrchtst.c
|
| - * Modification History:
|
| - * Name Date Description
|
| - * synwee July 19 2001 creation
|
| - ********************************************************************/
|
| -
|
| -#include "unicode/utypes.h"
|
| -
|
| -#if !UCONFIG_NO_COLLATION && !UCONFIG_NO_BREAK_ITERATION && !UCONFIG_NO_FILE_IO
|
| -
|
| -#include "unicode/usearch.h"
|
| -#include "unicode/ustring.h"
|
| -#include "ccolltst.h"
|
| -#include "cmemory.h"
|
| -#include <stdio.h>
|
| -#include "usrchdat.c"
|
| -#include "unicode/ubrk.h"
|
| -#include <assert.h>
|
| -
|
| -static UBool TOCLOSE_ = TRUE;
|
| -static UCollator *EN_US_;
|
| -static UCollator *FR_FR_;
|
| -static UCollator *DE_;
|
| -static UCollator *ES_;
|
| -
|
| -/**
|
| - * CHECK_BREAK(char *brk)
|
| - * Test if a break iterator is passed in AND break iteration is disabled.
|
| - * Skip the test if so.
|
| - * CHECK_BREAK_BOOL(char *brk)
|
| - * Same as above, but returns 'TRUE' as a passing result
|
| - */
|
| -
|
| -#if !UCONFIG_NO_BREAK_ITERATION
|
| -static UBreakIterator *EN_WORDBREAKER_;
|
| -static UBreakIterator *EN_CHARACTERBREAKER_;
|
| -#define CHECK_BREAK(x)
|
| -#define CHECK_BREAK_BOOL(x)
|
| -#else
|
| -#define CHECK_BREAK(x) if(x) { log_info("Skipping test on %s:%d because UCONFIG_NO_BREAK_ITERATION is on\n", __FILE__, __LINE__); return; }
|
| -#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; }
|
| -#endif
|
| -
|
| -/**
|
| -* Opening all static collators and break iterators
|
| -*/
|
| -static void open(UErrorCode* status)
|
| -{
|
| - if (TOCLOSE_) {
|
| - UChar rules[1024];
|
| - int32_t rulelength = 0;
|
| - *status = U_ZERO_ERROR;
|
| -
|
| - EN_US_ = ucol_open("en_US", status);
|
| - if(U_FAILURE(*status)) {
|
| - log_err_status(*status, "Error opening collator\n");
|
| - return;
|
| - }
|
| - FR_FR_ = ucol_open("fr_FR", status);
|
| - DE_ = ucol_open("de_DE", status);
|
| - ES_ = ucol_open("es_ES", status);
|
| -
|
| - u_strcpy(rules, ucol_getRules(DE_, &rulelength));
|
| - u_unescape(EXTRACOLLATIONRULE, rules + rulelength, 1024 - rulelength);
|
| -
|
| - ucol_close(DE_);
|
| -
|
| - DE_ = ucol_openRules(rules, u_strlen(rules), UCOL_ON, UCOL_TERTIARY,
|
| - (UParseError *)NULL, status);
|
| - u_strcpy(rules, ucol_getRules(ES_, &rulelength));
|
| - u_unescape(EXTRACOLLATIONRULE, rules + rulelength, 1024 - rulelength);
|
| -
|
| - ucol_close(ES_);
|
| - ES_ = ucol_openRules(rules, u_strlen(rules), UCOL_ON, UCOL_TERTIARY,
|
| - NULL, status);
|
| -#if !UCONFIG_NO_BREAK_ITERATION
|
| - EN_WORDBREAKER_ = ubrk_open(UBRK_WORD, "en_US", NULL, 0, status);
|
| - EN_CHARACTERBREAKER_ = ubrk_open(UBRK_CHARACTER, "en_US", NULL, 0,
|
| - status);
|
| -#endif
|
| - TOCLOSE_ = TRUE;
|
| - }
|
| -}
|
| -
|
| -/**
|
| -* Start opening all static collators and break iterators
|
| -*/
|
| -static void TestStart(void)
|
| -{
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - open(&status);
|
| - if (U_FAILURE(status)) {
|
| - log_err_status(status, "Unable to open static collators %s\n", u_errorName(status));
|
| - return;
|
| - }
|
| - TOCLOSE_ = FALSE;
|
| -}
|
| -
|
| -/**
|
| -* Closing all static collators and break iterators
|
| -*/
|
| -static void close(void)
|
| -{
|
| - if (TOCLOSE_) {
|
| - ucol_close(EN_US_);
|
| - ucol_close(FR_FR_);
|
| - ucol_close(DE_);
|
| - ucol_close(ES_);
|
| -#if !UCONFIG_NO_BREAK_ITERATION
|
| - ubrk_close(EN_WORDBREAKER_);
|
| - ubrk_close(EN_CHARACTERBREAKER_);
|
| -#endif
|
| - }
|
| - TOCLOSE_ = FALSE;
|
| -}
|
| -
|
| -/**
|
| -* End closing all static collators and break iterators
|
| -*/
|
| -static void TestEnd(void)
|
| -{
|
| - TOCLOSE_ = TRUE;
|
| - close();
|
| - TOCLOSE_ = TRUE;
|
| -}
|
| -
|
| -/**
|
| -* output UChar strings for printing.
|
| -*/
|
| -static char *toCharString(const UChar* unichars)
|
| -{
|
| - static char result[1024];
|
| - char *temp = result;
|
| - int count = 0;
|
| - int length = u_strlen(unichars);
|
| -
|
| - for (; count < length; count ++) {
|
| - UChar ch = unichars[count];
|
| - if (ch >= 0x20 && ch <= 0x7e) {
|
| - *temp ++ = (char)ch;
|
| - }
|
| - else {
|
| - sprintf(temp, "\\u%04x", ch);
|
| - temp += 6; /* \uxxxx */
|
| - }
|
| - }
|
| - *temp = 0;
|
| -
|
| - return result;
|
| -}
|
| -
|
| -/**
|
| -* Getting the collator
|
| -*/
|
| -static UCollator *getCollator(const char *collator)
|
| -{
|
| - if (collator == NULL) {
|
| - return EN_US_;
|
| - }
|
| - if (strcmp(collator, "fr") == 0) {
|
| - return FR_FR_;
|
| - }
|
| - else if (strcmp(collator, "de") == 0) {
|
| - return DE_;
|
| - }
|
| - else if (strcmp(collator, "es") == 0) {
|
| - return ES_;
|
| - }
|
| - else {
|
| - return EN_US_;
|
| - }
|
| -}
|
| -
|
| -/**
|
| -* Getting the breakiterator
|
| -*/
|
| -static UBreakIterator *getBreakIterator(const char *breaker)
|
| -{
|
| - if (breaker == NULL) {
|
| - return NULL;
|
| - }
|
| -#if !UCONFIG_NO_BREAK_ITERATION
|
| - if (strcmp(breaker, "wordbreaker") == 0) {
|
| - return EN_WORDBREAKER_;
|
| - }
|
| - else {
|
| - return EN_CHARACTERBREAKER_;
|
| - }
|
| -#else
|
| - return NULL;
|
| -#endif
|
| -}
|
| -
|
| -static void TestOpenClose(void)
|
| -{
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - UStringSearch *result;
|
| - const UChar pattern[] = {0x61, 0x62, 0x63, 0x64, 0x65, 0x66};
|
| - const UChar text[] = {0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67};
|
| -#if !UCONFIG_NO_BREAK_ITERATION
|
| - UBreakIterator *breakiter = ubrk_open(UBRK_WORD, "en_US",
|
| - text, 6, &status);
|
| -#endif
|
| - /* testing null arguments */
|
| - result = usearch_open(NULL, 0, NULL, 0, NULL, NULL, &status);
|
| - if (U_SUCCESS(status) || result != NULL) {
|
| - log_err("Error: NULL arguments should produce an error and a NULL result\n");
|
| - }
|
| - status = U_ZERO_ERROR;
|
| - result = usearch_openFromCollator(NULL, 0, NULL, 0, NULL, NULL, &status);
|
| - if (U_SUCCESS(status) || result != NULL) {
|
| - log_err("Error: NULL arguments should produce an error and a NULL result\n");
|
| - }
|
| -
|
| - status = U_ZERO_ERROR;
|
| - result = usearch_open(pattern, 3, NULL, 0, NULL, NULL, &status);
|
| - if (U_SUCCESS(status) || result != NULL) {
|
| - log_err("Error: NULL arguments should produce an error and a NULL result\n");
|
| - }
|
| - status = U_ZERO_ERROR;
|
| - result = usearch_openFromCollator(pattern, 3, NULL, 0, NULL, NULL,
|
| - &status);
|
| - if (U_SUCCESS(status) || result != NULL) {
|
| - log_err("Error: NULL arguments should produce an error and a NULL result\n");
|
| - }
|
| -
|
| - status = U_ZERO_ERROR;
|
| - result = usearch_open(pattern, 3, text, 6, NULL, NULL, &status);
|
| - if (U_SUCCESS(status) || result != NULL) {
|
| - log_err("Error: NULL arguments should produce an error and a NULL result\n");
|
| - }
|
| - status = U_ZERO_ERROR;
|
| - result = usearch_openFromCollator(pattern, 3, text, 6, NULL, NULL,
|
| - &status);
|
| - if (U_SUCCESS(status) || result != NULL) {
|
| - log_err("Error: NULL arguments should produce an error and a NULL result\n");
|
| - }
|
| -
|
| - status = U_ZERO_ERROR;
|
| - result = usearch_open(pattern, 3, text, 6, "en_US", NULL, &status);
|
| - if (U_FAILURE(status) || result == NULL) {
|
| - log_err_status(status, "Error: NULL break iterator is valid for opening search\n");
|
| - }
|
| - else {
|
| - usearch_close(result);
|
| - }
|
| - open(&status);
|
| - if (U_FAILURE(status)) {
|
| - log_err_status(status, "Unable to open static collators %s\n", u_errorName(status));
|
| - return;
|
| - }
|
| - status = U_ZERO_ERROR;
|
| - result = usearch_openFromCollator(pattern, 3, text, 6, EN_US_, NULL,
|
| - &status);
|
| - if (U_FAILURE(status) || result == NULL) {
|
| - if (EN_US_ == NULL) {
|
| - log_data_err("Opening collator failed.\n");
|
| - } else {
|
| - log_err("Error: NULL break iterator is valid for opening search\n");
|
| - }
|
| - }
|
| - else {
|
| - usearch_close(result);
|
| - }
|
| -
|
| -
|
| - status = U_ZERO_ERROR;
|
| -#if !UCONFIG_NO_BREAK_ITERATION
|
| -
|
| - result = usearch_open(pattern, 3, text, 6, "en_US", breakiter, &status);
|
| - if (U_FAILURE(status) || result == NULL) {
|
| - log_err_status(status, "Error: Break iterator is valid for opening search\n");
|
| - }
|
| - else {
|
| - usearch_close(result);
|
| - }
|
| - status = U_ZERO_ERROR;
|
| - result = usearch_openFromCollator(pattern, 3, text, 6, EN_US_, breakiter,
|
| - &status);
|
| - if (U_FAILURE(status) || result == NULL) {
|
| - if (EN_US_ == NULL) {
|
| - log_data_err("Opening collator failed.\n");
|
| - } else {
|
| - log_err("Error: Break iterator is valid for opening search\n");
|
| - }
|
| - }
|
| - else {
|
| - usearch_close(result);
|
| - }
|
| - ubrk_close(breakiter);
|
| -#endif
|
| - close();
|
| -}
|
| -
|
| -static void TestInitialization(void)
|
| -{
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - UChar pattern[512];
|
| - const UChar text[] = {0x61, 0x62, 0x63, 0x64, 0x65, 0x66};
|
| - int32_t i = 0;
|
| - UStringSearch *result;
|
| -
|
| - /* simple test on the pattern ce construction */
|
| - pattern[0] = 0x41;
|
| - pattern[1] = 0x42;
|
| - open(&status);
|
| - if (U_FAILURE(status)) {
|
| - log_err_status(status, "Unable to open static collators %s\n", u_errorName(status));
|
| - return;
|
| - }
|
| - result = usearch_openFromCollator(pattern, 2, text, 3, EN_US_, NULL,
|
| - &status);
|
| - if (U_FAILURE(status)) {
|
| - log_err("Error opening search %s\n", u_errorName(status));
|
| - }
|
| - usearch_close(result);
|
| -
|
| - /* testing if an extremely large pattern will fail the initialization */
|
| - for(i = 0; i < 512; i++) {
|
| - pattern[i] = 0x41;
|
| - }
|
| - /*uprv_memset(pattern, 0x41, 512);*/
|
| - result = usearch_openFromCollator(pattern, 512, text, 3, EN_US_, NULL,
|
| - &status);
|
| - if (U_FAILURE(status)) {
|
| - log_err("Error opening search %s\n", u_errorName(status));
|
| - }
|
| - usearch_close(result);
|
| - close();
|
| -}
|
| -
|
| -static UBool assertEqualWithUStringSearch( UStringSearch *strsrch,
|
| - const SearchData search)
|
| -{
|
| - int count = 0;
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - int32_t matchindex = search.offset[count];
|
| - int32_t textlength;
|
| - UChar matchtext[128];
|
| - int32_t matchlength;
|
| - int32_t nextStart;
|
| - UBool isOverlap;
|
| -
|
| - usearch_setAttribute(strsrch, USEARCH_ELEMENT_COMPARISON, search.elemCompare, &status);
|
| - if (U_FAILURE(status)) {
|
| - log_err("Error setting USEARCH_ELEMENT_COMPARISON attribute %s\n", u_errorName(status));
|
| - return FALSE;
|
| - }
|
| -
|
| - if (usearch_getMatchedStart(strsrch) != USEARCH_DONE ||
|
| - usearch_getMatchedLength(strsrch) != 0) {
|
| - log_err("Error with the initialization of match start and length\n");
|
| - }
|
| - /* start of next matches */
|
| - while (U_SUCCESS(status) && matchindex >= 0) {
|
| - matchlength = search.size[count];
|
| - usearch_next(strsrch, &status);
|
| - if (matchindex != usearch_getMatchedStart(strsrch) ||
|
| - matchlength != (uint32_t)usearch_getMatchedLength(strsrch)) {
|
| - char *str = toCharString(usearch_getText(strsrch, &textlength));
|
| - log_err("Text: %s\n", str);
|
| - str = toCharString(usearch_getPattern(strsrch, &textlength));
|
| - log_err("Pattern: %s\n", str);
|
| - log_err("Error next match found at idx %d (len:%d); expected %d (len:%d)\n",
|
| - usearch_getMatchedStart(strsrch), usearch_getMatchedLength(strsrch),
|
| - matchindex, matchlength);
|
| - return FALSE;
|
| - }
|
| - count ++;
|
| -
|
| - if (usearch_getMatchedText(strsrch, matchtext, 128, &status) !=
|
| - (int32_t) matchlength || U_FAILURE(status) ||
|
| - memcmp(matchtext,
|
| - usearch_getText(strsrch, &textlength) + matchindex,
|
| - matchlength * sizeof(UChar)) != 0) {
|
| - log_err("Error getting next matched text\n");
|
| - }
|
| -
|
| - matchindex = search.offset[count];
|
| - }
|
| - usearch_next(strsrch, &status);
|
| - if (usearch_getMatchedStart(strsrch) != USEARCH_DONE ||
|
| - usearch_getMatchedLength(strsrch) != 0) {
|
| - char *str = toCharString(usearch_getText(strsrch, &textlength));
|
| - log_err("Text: %s\n", str);
|
| - str = toCharString(usearch_getPattern(strsrch, &textlength));
|
| - log_err("Pattern: %s\n", str);
|
| - log_err("Error next match found at %d (len:%d); expected <NO MATCH>\n",
|
| - usearch_getMatchedStart(strsrch),
|
| - usearch_getMatchedLength(strsrch));
|
| - return FALSE;
|
| - }
|
| - /* start of previous matches */
|
| - count = count == 0 ? 0 : count - 1;
|
| - matchindex = search.offset[count];
|
| -
|
| - while (U_SUCCESS(status) && matchindex >= 0) {
|
| - matchlength = search.size[count];
|
| - usearch_previous(strsrch, &status);
|
| - if (matchindex != usearch_getMatchedStart(strsrch) ||
|
| - matchlength != (uint32_t)usearch_getMatchedLength(strsrch)) {
|
| - char *str = toCharString(usearch_getText(strsrch, &textlength));
|
| - log_err("Text: %s\n", str);
|
| - str = toCharString(usearch_getPattern(strsrch, &textlength));
|
| - log_err("Pattern: %s\n", str);
|
| - log_err("Error previous match found at %d (len:%d); expected %d (len:%d)\n",
|
| - usearch_getMatchedStart(strsrch), usearch_getMatchedLength(strsrch),
|
| - matchindex, matchlength);
|
| - return FALSE;
|
| - }
|
| -
|
| - if (usearch_getMatchedText(strsrch, matchtext, 128, &status) !=
|
| - (int32_t) matchlength || U_FAILURE(status) ||
|
| - memcmp(matchtext,
|
| - usearch_getText(strsrch, &textlength) + matchindex,
|
| - matchlength * sizeof(UChar)) != 0) {
|
| - log_err("Error getting previous matched text\n");
|
| - }
|
| -
|
| - matchindex = count > 0 ? search.offset[count - 1] : -1;
|
| - count --;
|
| - }
|
| - usearch_previous(strsrch, &status);
|
| - if (usearch_getMatchedStart(strsrch) != USEARCH_DONE ||
|
| - usearch_getMatchedLength(strsrch) != 0) {
|
| - char *str = toCharString(usearch_getText(strsrch, &textlength));
|
| - log_err("Text: %s\n", str);
|
| - str = toCharString(usearch_getPattern(strsrch, &textlength));
|
| - log_err("Pattern: %s\n", str);
|
| - log_err("Error previous match found at %d (len:%d); expected <NO MATCH>\n",
|
| - usearch_getMatchedStart(strsrch),
|
| - usearch_getMatchedLength(strsrch));
|
| - return FALSE;
|
| - }
|
| -
|
| -
|
| - isOverlap = (usearch_getAttribute(strsrch, USEARCH_OVERLAP) == USEARCH_ON);
|
| -
|
| - /* start of following matches */
|
| - count = 0;
|
| - matchindex = search.offset[count];
|
| - nextStart = 0;
|
| -
|
| - while (TRUE) {
|
| - usearch_following(strsrch, nextStart, &status);
|
| -
|
| - if (matchindex < 0) {
|
| - if (usearch_getMatchedStart(strsrch) != USEARCH_DONE || usearch_getMatchedLength(strsrch) != 0) {
|
| - char *str = toCharString(usearch_getText(strsrch, &textlength));
|
| - log_err("Text: %s\n", str);
|
| - str = toCharString(usearch_getPattern(strsrch, &textlength));
|
| - log_err("Pattern: %s\n", str);
|
| - log_err("Error following match starting at %d (overlap:%d) found at %d (len:%d); expected <NO MATCH>\n",
|
| - nextStart, isOverlap,
|
| - usearch_getMatchedStart(strsrch),
|
| - usearch_getMatchedLength(strsrch));
|
| - return FALSE;
|
| - }
|
| - /* no more matches */
|
| - break;
|
| - }
|
| -
|
| - matchlength = search.size[count];
|
| - if (usearch_getMatchedStart(strsrch) != matchindex
|
| - || usearch_getMatchedLength(strsrch) != matchlength
|
| - || U_FAILURE(status)) {
|
| - char *str = toCharString(usearch_getText(strsrch, &textlength));
|
| - log_err("Text: %s\n", str);
|
| - str = toCharString(usearch_getPattern(strsrch, &textlength));
|
| - log_err("Pattern: %s\n", str);
|
| - log_err("Error following match starting at %d (overlap: %d) found at %d (len:%d); expected %d (len:%d)\n",
|
| - nextStart, isOverlap,
|
| - usearch_getMatchedStart(strsrch), usearch_getMatchedLength(strsrch),
|
| - matchindex, matchlength);
|
| - return FALSE;
|
| - }
|
| -
|
| - if (isOverlap || usearch_getMatchedLength(strsrch) == 0) {
|
| - nextStart = usearch_getMatchedStart(strsrch) + 1;
|
| - } else {
|
| - nextStart = usearch_getMatchedStart(strsrch) + usearch_getMatchedLength(strsrch);
|
| - }
|
| -
|
| - count++;
|
| - matchindex = search.offset[count];
|
| - }
|
| -
|
| - /* start of preceding matches */
|
| - count = -1; /* last non-negative offset index, could be -1 if no match */
|
| - while (search.offset[count + 1] >= 0) {
|
| - count++;
|
| - }
|
| - usearch_getText(strsrch, &nextStart);
|
| -
|
| - while (TRUE) {
|
| - usearch_preceding(strsrch, nextStart, &status);
|
| -
|
| - if (count < 0) {
|
| - if (usearch_getMatchedStart(strsrch) != USEARCH_DONE || usearch_getMatchedLength(strsrch) != 0) {
|
| - char *str = toCharString(usearch_getText(strsrch, &textlength));
|
| - log_err("Text: %s\n", str);
|
| - str = toCharString(usearch_getPattern(strsrch, &textlength));
|
| - log_err("Pattern: %s\n", str);
|
| - log_err("Error preceding match starting at %d (overlap: %d) found at %d (len:%d); expected <NO MATCH>\n",
|
| - nextStart, isOverlap,
|
| - usearch_getMatchedStart(strsrch),
|
| - usearch_getMatchedLength(strsrch));
|
| - return FALSE;
|
| - }
|
| - /* no more matches */
|
| - break;
|
| - }
|
| -
|
| - matchindex = search.offset[count];
|
| - matchlength = search.size[count];
|
| - if (usearch_getMatchedStart(strsrch) != matchindex
|
| - || usearch_getMatchedLength(strsrch) != matchlength
|
| - || U_FAILURE(status)) {
|
| - char *str = toCharString(usearch_getText(strsrch, &textlength));
|
| - log_err("Text: %s\n", str);
|
| - str = toCharString(usearch_getPattern(strsrch, &textlength));
|
| - log_err("Pattern: %s\n", str);
|
| - log_err("Error preceding match starting at %d (overlap: %d) found at %d (len:%d); expected %d (len:%d)\n",
|
| - nextStart, isOverlap,
|
| - usearch_getMatchedStart(strsrch), usearch_getMatchedLength(strsrch),
|
| - matchindex, matchlength);
|
| - return FALSE;
|
| - }
|
| -
|
| - nextStart = matchindex;
|
| - count--;
|
| - }
|
| -
|
| - usearch_setAttribute(strsrch, USEARCH_ELEMENT_COMPARISON, USEARCH_STANDARD_ELEMENT_COMPARISON, &status);
|
| - return TRUE;
|
| -}
|
| -
|
| -static UBool assertEqual(const SearchData search)
|
| -{
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - UChar pattern[32];
|
| - UChar text[128];
|
| - UCollator *collator = getCollator(search.collator);
|
| - UBreakIterator *breaker = getBreakIterator(search.breaker);
|
| - UStringSearch *strsrch;
|
| -
|
| - CHECK_BREAK_BOOL(search.breaker);
|
| -
|
| - u_unescape(search.text, text, 128);
|
| - u_unescape(search.pattern, pattern, 32);
|
| - ucol_setStrength(collator, search.strength);
|
| - strsrch = usearch_openFromCollator(pattern, -1, text, -1, collator,
|
| - breaker, &status);
|
| - if (U_FAILURE(status)) {
|
| - log_err("Error opening string search %s\n", u_errorName(status));
|
| - return FALSE;
|
| - }
|
| -
|
| - if (!assertEqualWithUStringSearch(strsrch, search)) {
|
| - ucol_setStrength(collator, UCOL_TERTIARY);
|
| - usearch_close(strsrch);
|
| - return FALSE;
|
| - }
|
| - ucol_setStrength(collator, UCOL_TERTIARY);
|
| - usearch_close(strsrch);
|
| - return TRUE;
|
| -}
|
| -
|
| -static UBool assertCanonicalEqual(const SearchData search)
|
| -{
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - UChar pattern[32];
|
| - UChar text[128];
|
| - UCollator *collator = getCollator(search.collator);
|
| - UBreakIterator *breaker = getBreakIterator(search.breaker);
|
| - UStringSearch *strsrch;
|
| - UBool result = TRUE;
|
| -
|
| - CHECK_BREAK_BOOL(search.breaker);
|
| - u_unescape(search.text, text, 128);
|
| - u_unescape(search.pattern, pattern, 32);
|
| - ucol_setStrength(collator, search.strength);
|
| - ucol_setAttribute(collator, UCOL_NORMALIZATION_MODE, UCOL_ON, &status);
|
| - strsrch = usearch_openFromCollator(pattern, -1, text, -1, collator,
|
| - breaker, &status);
|
| - usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON,
|
| - &status);
|
| - if (U_FAILURE(status)) {
|
| - log_err("Error opening string search %s\n", u_errorName(status));
|
| - result = FALSE;
|
| - goto bail;
|
| - }
|
| -
|
| - if (!assertEqualWithUStringSearch(strsrch, search)) {
|
| - ucol_setStrength(collator, UCOL_TERTIARY);
|
| - usearch_close(strsrch);
|
| - result = FALSE;
|
| - goto bail;
|
| - }
|
| -
|
| -bail:
|
| - ucol_setAttribute(collator, UCOL_NORMALIZATION_MODE, UCOL_OFF, &status);
|
| - ucol_setStrength(collator, UCOL_TERTIARY);
|
| - usearch_close(strsrch);
|
| - return result;
|
| -}
|
| -
|
| -static UBool assertEqualWithAttribute(const SearchData search,
|
| - USearchAttributeValue canonical,
|
| - USearchAttributeValue overlap)
|
| -{
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - UChar pattern[32];
|
| - UChar text[128];
|
| - UCollator *collator = getCollator(search.collator);
|
| - UBreakIterator *breaker = getBreakIterator(search.breaker);
|
| - UStringSearch *strsrch;
|
| -
|
| - CHECK_BREAK_BOOL(search.breaker);
|
| - u_unescape(search.text, text, 128);
|
| - u_unescape(search.pattern, pattern, 32);
|
| - ucol_setStrength(collator, search.strength);
|
| - strsrch = usearch_openFromCollator(pattern, -1, text, -1, collator,
|
| - breaker, &status);
|
| - usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, canonical,
|
| - &status);
|
| - usearch_setAttribute(strsrch, USEARCH_OVERLAP, overlap, &status);
|
| -
|
| - if (U_FAILURE(status)) {
|
| - log_err("Error opening string search %s\n", u_errorName(status));
|
| - return FALSE;
|
| - }
|
| -
|
| - if (!assertEqualWithUStringSearch(strsrch, search)) {
|
| - ucol_setStrength(collator, UCOL_TERTIARY);
|
| - usearch_close(strsrch);
|
| - return FALSE;
|
| - }
|
| - ucol_setStrength(collator, UCOL_TERTIARY);
|
| - usearch_close(strsrch);
|
| - return TRUE;
|
| -}
|
| -
|
| -static void TestBasic(void)
|
| -{
|
| - int count = 0;
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - open(&status);
|
| - if (U_FAILURE(status)) {
|
| - log_err_status(status, "Unable to open static collators %s\n", u_errorName(status));
|
| - return;
|
| - }
|
| - while (BASIC[count].text != NULL) {
|
| - if (!assertEqual(BASIC[count])) {
|
| - log_err("Error at test number %d\n", count);
|
| - }
|
| - count ++;
|
| - }
|
| - close();
|
| -}
|
| -
|
| -static void TestNormExact(void)
|
| -{
|
| - int count = 0;
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - open(&status);
|
| - if (U_FAILURE(status)) {
|
| - log_err_status(status, "Unable to open static collators %s\n", u_errorName(status));
|
| - return;
|
| - }
|
| - ucol_setAttribute(EN_US_, UCOL_NORMALIZATION_MODE, UCOL_ON, &status);
|
| - if (U_FAILURE(status)) {
|
| - log_err("Error setting collation normalization %s\n",
|
| - u_errorName(status));
|
| - }
|
| - while (BASIC[count].text != NULL) {
|
| - if (!assertEqual(BASIC[count])) {
|
| - log_err("Error at test number %d\n", count);
|
| - }
|
| - count ++;
|
| - }
|
| - count = 0;
|
| - while (NORMEXACT[count].text != NULL) {
|
| - if (!assertEqual(NORMEXACT[count])) {
|
| - log_err("Error at test number %d\n", count);
|
| - }
|
| - count ++;
|
| - }
|
| - ucol_setAttribute(EN_US_, UCOL_NORMALIZATION_MODE, UCOL_OFF, &status);
|
| - count = 0;
|
| - while (NONNORMEXACT[count].text != NULL) {
|
| - if (!assertEqual(NONNORMEXACT[count])) {
|
| - log_err("Error at test number %d\n", count);
|
| - }
|
| - count ++;
|
| - }
|
| - close();
|
| -}
|
| -
|
| -static void TestStrength(void)
|
| -{
|
| - int count = 0;
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - open(&status);
|
| - if (U_FAILURE(status)) {
|
| - log_err_status(status, "Unable to open static collators %s\n", u_errorName(status));
|
| - return;
|
| - }
|
| - while (STRENGTH[count].text != NULL) {
|
| - if (!assertEqual(STRENGTH[count])) {
|
| - log_err("Error at test number %d\n", count);
|
| - }
|
| - count ++;
|
| - }
|
| - close();
|
| -}
|
| -
|
| -static void TestBreakIterator(void) {
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - UStringSearch *strsrch;
|
| - UChar text[128];
|
| - UChar pattern[32];
|
| - int count = 0;
|
| -
|
| - CHECK_BREAK("x");
|
| -
|
| -#if !UCONFIG_NO_BREAK_ITERATION
|
| - open(&status);
|
| - if (U_FAILURE(status)) {
|
| - log_err_status(status, "Unable to open static collators %s\n", u_errorName(status));
|
| - return;
|
| - }
|
| - if (usearch_getBreakIterator(NULL) != NULL) {
|
| - log_err("Expected NULL breakiterator from NULL string search\n");
|
| - }
|
| - u_unescape(BREAKITERATOREXACT[0].text, text, 128);
|
| - u_unescape(BREAKITERATOREXACT[0].pattern, pattern, 32);
|
| - strsrch = usearch_openFromCollator(pattern, -1, text, -1, EN_US_, NULL,
|
| - &status);
|
| - if (U_FAILURE(status)) {
|
| - log_err("Error opening string search %s\n", u_errorName(status));
|
| - goto ENDTESTBREAKITERATOR;
|
| - }
|
| -
|
| - usearch_setBreakIterator(strsrch, NULL, &status);
|
| - if (U_FAILURE(status) || usearch_getBreakIterator(strsrch) != NULL) {
|
| - log_err("Error usearch_getBreakIterator returned wrong object");
|
| - goto ENDTESTBREAKITERATOR;
|
| - }
|
| -
|
| - usearch_setBreakIterator(strsrch, EN_CHARACTERBREAKER_, &status);
|
| - if (U_FAILURE(status) ||
|
| - usearch_getBreakIterator(strsrch) != EN_CHARACTERBREAKER_) {
|
| - log_err("Error usearch_getBreakIterator returned wrong object");
|
| - goto ENDTESTBREAKITERATOR;
|
| - }
|
| -
|
| - usearch_setBreakIterator(strsrch, EN_WORDBREAKER_, &status);
|
| - if (U_FAILURE(status) ||
|
| - usearch_getBreakIterator(strsrch) != EN_WORDBREAKER_) {
|
| - log_err("Error usearch_getBreakIterator returned wrong object");
|
| - goto ENDTESTBREAKITERATOR;
|
| - }
|
| -
|
| - usearch_close(strsrch);
|
| -
|
| - count = 0;
|
| - while (count < 4) {
|
| - /* 0-3 test are fixed */
|
| - const SearchData *search = &(BREAKITERATOREXACT[count]);
|
| - UCollator *collator = getCollator(search->collator);
|
| - UBreakIterator *breaker = getBreakIterator(search->breaker);
|
| -
|
| - u_unescape(search->text, text, 128);
|
| - u_unescape(search->pattern, pattern, 32);
|
| - ucol_setStrength(collator, search->strength);
|
| -
|
| - strsrch = usearch_openFromCollator(pattern, -1, text, -1, collator,
|
| - breaker, &status);
|
| - if (U_FAILURE(status) ||
|
| - usearch_getBreakIterator(strsrch) != breaker) {
|
| - log_err("Error setting break iterator\n");
|
| - if (strsrch != NULL) {
|
| - usearch_close(strsrch);
|
| - }
|
| - }
|
| - if (!assertEqualWithUStringSearch(strsrch, *search)) {
|
| - ucol_setStrength(collator, UCOL_TERTIARY);
|
| - usearch_close(strsrch);
|
| - goto ENDTESTBREAKITERATOR;
|
| - }
|
| - search = &(BREAKITERATOREXACT[count + 1]);
|
| - breaker = getBreakIterator(search->breaker);
|
| - usearch_setBreakIterator(strsrch, breaker, &status);
|
| - if (U_FAILURE(status) || usearch_getBreakIterator(strsrch) != breaker) {
|
| - log_err("Error setting break iterator\n");
|
| - usearch_close(strsrch);
|
| - goto ENDTESTBREAKITERATOR;
|
| - }
|
| - usearch_reset(strsrch);
|
| - if (!assertEqualWithUStringSearch(strsrch, *search)) {
|
| - log_err("Error at test number %d\n", count);
|
| - usearch_close(strsrch);
|
| - goto ENDTESTBREAKITERATOR;
|
| - }
|
| - usearch_close(strsrch);
|
| - count += 2;
|
| - }
|
| - count = 0;
|
| - while (BREAKITERATOREXACT[count].text != NULL) {
|
| - if (!assertEqual(BREAKITERATOREXACT[count])) {
|
| - log_err("Error at test number %d\n", count);
|
| - goto ENDTESTBREAKITERATOR;
|
| - }
|
| - count ++;
|
| - }
|
| -
|
| -ENDTESTBREAKITERATOR:
|
| - close();
|
| -#endif
|
| -}
|
| -
|
| -static void TestVariable(void)
|
| -{
|
| - int count = 0;
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - open(&status);
|
| - if (U_FAILURE(status)) {
|
| - log_err_status(status, "Unable to open static collators %s\n", u_errorName(status));
|
| - return;
|
| - }
|
| - ucol_setAttribute(EN_US_, UCOL_ALTERNATE_HANDLING, UCOL_SHIFTED, &status);
|
| - if (U_FAILURE(status)) {
|
| - log_err("Error setting collation alternate attribute %s\n",
|
| - u_errorName(status));
|
| - }
|
| - while (VARIABLE[count].text != NULL) {
|
| - log_verbose("variable %d\n", count);
|
| - if (!assertEqual(VARIABLE[count])) {
|
| - log_err("Error at test number %d\n", count);
|
| - }
|
| - count ++;
|
| - }
|
| - ucol_setAttribute(EN_US_, UCOL_ALTERNATE_HANDLING,
|
| - UCOL_NON_IGNORABLE, &status);
|
| - close();
|
| -}
|
| -
|
| -static void TestOverlap(void)
|
| -{
|
| - int count = 0;
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - open(&status);
|
| - if (U_FAILURE(status)) {
|
| - log_err_status(status, "Unable to open static collators %s\n", u_errorName(status));
|
| - return;
|
| - }
|
| - while (OVERLAP[count].text != NULL) {
|
| - if (!assertEqualWithAttribute(OVERLAP[count], USEARCH_OFF,
|
| - USEARCH_ON)) {
|
| - log_err("Error at overlap test number %d\n", count);
|
| - }
|
| - count ++;
|
| - }
|
| - count = 0;
|
| - while (NONOVERLAP[count].text != NULL) {
|
| - if (!assertEqual(NONOVERLAP[count])) {
|
| - log_err("Error at non overlap test number %d\n", count);
|
| - }
|
| - count ++;
|
| - }
|
| -
|
| - count = 0;
|
| - while (count < 1) {
|
| - UChar pattern[32];
|
| - UChar text[128];
|
| - const SearchData *search = &(OVERLAP[count]);
|
| - UCollator *collator = getCollator(search->collator);
|
| - UStringSearch *strsrch;
|
| - status = U_ZERO_ERROR;
|
| -
|
| - u_unescape(search->text, text, 128);
|
| - u_unescape(search->pattern, pattern, 32);
|
| - strsrch = usearch_openFromCollator(pattern, -1, text, -1, collator,
|
| - NULL, &status);
|
| - if(status == U_FILE_ACCESS_ERROR) {
|
| - log_data_err("Is your data around?\n");
|
| - return;
|
| - } else if(U_FAILURE(status)) {
|
| - log_err("Error opening searcher\n");
|
| - return;
|
| - }
|
| - usearch_setAttribute(strsrch, USEARCH_OVERLAP, USEARCH_ON, &status);
|
| - if (U_FAILURE(status) ||
|
| - usearch_getAttribute(strsrch, USEARCH_OVERLAP) != USEARCH_ON) {
|
| - log_err("Error setting overlap option\n");
|
| - }
|
| - if (!assertEqualWithUStringSearch(strsrch, *search)) {
|
| - usearch_close(strsrch);
|
| - return;
|
| - }
|
| - search = &(NONOVERLAP[count]);
|
| - usearch_setAttribute(strsrch, USEARCH_OVERLAP, USEARCH_OFF, &status);
|
| - if (U_FAILURE(status) ||
|
| - usearch_getAttribute(strsrch, USEARCH_OVERLAP) != USEARCH_OFF) {
|
| - log_err("Error setting overlap option\n");
|
| - }
|
| - usearch_reset(strsrch);
|
| - if (!assertEqualWithUStringSearch(strsrch, *search)) {
|
| - usearch_close(strsrch);
|
| - log_err("Error at test number %d\n", count);
|
| - }
|
| -
|
| - count ++;
|
| - usearch_close(strsrch);
|
| - }
|
| - close();
|
| -}
|
| -
|
| -static void TestCollator(void)
|
| -{
|
| - /* test collator that thinks "o" and "p" are the same thing */
|
| - UChar rules[32];
|
| - UCollator *tailored = NULL;
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - UChar pattern[32];
|
| - UChar text[128];
|
| - UStringSearch *strsrch;
|
| -
|
| - text[0] = 0x41;
|
| - text[1] = 0x42;
|
| - text[2] = 0x43;
|
| - text[3] = 0x44;
|
| - text[4] = 0x45;
|
| - pattern[0] = 0x62;
|
| - pattern[1] = 0x63;
|
| - strsrch = usearch_open(pattern, 2, text, 5, "en_US", NULL, &status);
|
| - if(status == U_FILE_ACCESS_ERROR) {
|
| - log_data_err("Is your data around?\n");
|
| - return;
|
| - } else if(U_FAILURE(status)) {
|
| - log_err("Error opening searcher\n");
|
| - return;
|
| - }
|
| - tailored = usearch_getCollator(strsrch);
|
| - if (usearch_next(strsrch, &status) != -1) {
|
| - log_err("Error: Found case insensitive match, when we shouldn't\n");
|
| - }
|
| - ucol_setStrength(tailored, UCOL_PRIMARY);
|
| - usearch_reset(strsrch);
|
| - if (usearch_next(strsrch, &status) != 1) {
|
| - log_err("Error: Found case insensitive match not found\n");
|
| - }
|
| - usearch_close(strsrch);
|
| -
|
| - open(&status);
|
| -
|
| - if (usearch_getCollator(NULL) != NULL) {
|
| - log_err("Expected NULL collator from NULL string search\n");
|
| - }
|
| - u_unescape(COLLATOR[0].text, text, 128);
|
| - u_unescape(COLLATOR[0].pattern, pattern, 32);
|
| -
|
| - strsrch = usearch_openFromCollator(pattern, -1, text, -1, EN_US_,
|
| - NULL, &status);
|
| - if (U_FAILURE(status)) {
|
| - log_err("Error opening string search %s\n", u_errorName(status));
|
| - }
|
| - if (!assertEqualWithUStringSearch(strsrch, COLLATOR[0])) {
|
| - goto ENDTESTCOLLATOR;
|
| - }
|
| -
|
| - u_unescape(TESTCOLLATORRULE, rules, 32);
|
| - tailored = ucol_openRules(rules, -1, UCOL_ON, COLLATOR[1].strength,
|
| - NULL, &status);
|
| - if (U_FAILURE(status)) {
|
| - log_err("Error opening rule based collator %s\n", u_errorName(status));
|
| - }
|
| -
|
| - usearch_setCollator(strsrch, tailored, &status);
|
| - if (U_FAILURE(status) || usearch_getCollator(strsrch) != tailored) {
|
| - log_err("Error setting rule based collator\n");
|
| - }
|
| - usearch_reset(strsrch);
|
| - if (!assertEqualWithUStringSearch(strsrch, COLLATOR[1])) {
|
| - goto ENDTESTCOLLATOR;
|
| - }
|
| -
|
| - usearch_setCollator(strsrch, EN_US_, &status);
|
| - usearch_reset(strsrch);
|
| - if (U_FAILURE(status) || usearch_getCollator(strsrch) != EN_US_) {
|
| - log_err("Error setting rule based collator\n");
|
| - }
|
| - if (!assertEqualWithUStringSearch(strsrch, COLLATOR[0])) {
|
| - goto ENDTESTCOLLATOR;
|
| - }
|
| -
|
| -ENDTESTCOLLATOR:
|
| - usearch_close(strsrch);
|
| - if (tailored != NULL) {
|
| - ucol_close(tailored);
|
| - }
|
| - close();
|
| -}
|
| -
|
| -static void TestPattern(void)
|
| -{
|
| - UStringSearch *strsrch;
|
| - UChar pattern[32];
|
| - UChar bigpattern[512];
|
| - UChar text[128];
|
| - const UChar *temp;
|
| - int32_t templength;
|
| - UErrorCode status = U_ZERO_ERROR;
|
| -
|
| - open(&status);
|
| - if (U_FAILURE(status)) {
|
| - log_err_status(status, "Unable to open static collators %s\n", u_errorName(status));
|
| - return;
|
| - }
|
| - if (usearch_getPattern(NULL, &templength) != NULL) {
|
| - log_err("Error NULL string search expected returning NULL pattern\n");
|
| - }
|
| - usearch_setPattern(NULL, pattern, 3, &status);
|
| - if (U_SUCCESS(status)) {
|
| - log_err("Error expected setting pattern in NULL strings search\n");
|
| - }
|
| - status = U_ZERO_ERROR;
|
| - u_unescape(PATTERN[0].text, text, 128);
|
| - u_unescape(PATTERN[0].pattern, pattern, 32);
|
| -
|
| - ucol_setStrength(EN_US_, PATTERN[0].strength);
|
| - strsrch = usearch_openFromCollator(pattern, -1, text, -1, EN_US_,
|
| - NULL, &status);
|
| - if(status == U_FILE_ACCESS_ERROR) {
|
| - log_data_err("Is your data around?\n");
|
| - return;
|
| - } else if(U_FAILURE(status)) {
|
| - log_err("Error opening searcher\n");
|
| - return;
|
| - }
|
| -
|
| - status = U_ZERO_ERROR;
|
| - usearch_setPattern(strsrch, NULL, 3, &status);
|
| - if (U_SUCCESS(status)) {
|
| - log_err("Error expected setting NULL pattern in strings search\n");
|
| - }
|
| - status = U_ZERO_ERROR;
|
| - usearch_setPattern(strsrch, pattern, 0, &status);
|
| - if (U_SUCCESS(status)) {
|
| - log_err("Error expected setting pattern with length 0 in strings search\n");
|
| - }
|
| - status = U_ZERO_ERROR;
|
| - if (U_FAILURE(status)) {
|
| - log_err("Error opening string search %s\n", u_errorName(status));
|
| - goto ENDTESTPATTERN;
|
| - }
|
| - temp = usearch_getPattern(strsrch, &templength);
|
| - if (u_strcmp(pattern, temp) != 0) {
|
| - log_err("Error setting pattern\n");
|
| - }
|
| - if (!assertEqualWithUStringSearch(strsrch, PATTERN[0])) {
|
| - goto ENDTESTPATTERN;
|
| - }
|
| -
|
| - u_unescape(PATTERN[1].pattern, pattern, 32);
|
| - usearch_setPattern(strsrch, pattern, -1, &status);
|
| - temp = usearch_getPattern(strsrch, &templength);
|
| - if (u_strcmp(pattern, temp) != 0) {
|
| - log_err("Error setting pattern\n");
|
| - goto ENDTESTPATTERN;
|
| - }
|
| - usearch_reset(strsrch);
|
| - if (U_FAILURE(status)) {
|
| - log_err("Error setting pattern %s\n", u_errorName(status));
|
| - }
|
| - if (!assertEqualWithUStringSearch(strsrch, PATTERN[1])) {
|
| - goto ENDTESTPATTERN;
|
| - }
|
| -
|
| - u_unescape(PATTERN[0].pattern, pattern, 32);
|
| - usearch_setPattern(strsrch, pattern, -1, &status);
|
| - temp = usearch_getPattern(strsrch, &templength);
|
| - if (u_strcmp(pattern, temp) != 0) {
|
| - log_err("Error setting pattern\n");
|
| - goto ENDTESTPATTERN;
|
| - }
|
| - usearch_reset(strsrch);
|
| - if (U_FAILURE(status)) {
|
| - log_err("Error setting pattern %s\n", u_errorName(status));
|
| - }
|
| - if (!assertEqualWithUStringSearch(strsrch, PATTERN[0])) {
|
| - goto ENDTESTPATTERN;
|
| - }
|
| - /* enormous pattern size to see if this crashes */
|
| - for (templength = 0; templength != 512; templength ++) {
|
| - bigpattern[templength] = 0x61;
|
| - }
|
| - bigpattern[511] = 0;
|
| - usearch_setPattern(strsrch, bigpattern, -1, &status);
|
| - if (U_FAILURE(status)) {
|
| - log_err("Error setting pattern with size 512, %s \n",
|
| - u_errorName(status));
|
| - }
|
| -ENDTESTPATTERN:
|
| - ucol_setStrength(EN_US_, UCOL_TERTIARY);
|
| - if (strsrch != NULL) {
|
| - usearch_close(strsrch);
|
| - }
|
| - close();
|
| -}
|
| -
|
| -static void TestText(void)
|
| -{
|
| - UStringSearch *strsrch;
|
| - UChar pattern[32];
|
| - UChar text[128];
|
| - const UChar *temp;
|
| - int32_t templength;
|
| - UErrorCode status = U_ZERO_ERROR;
|
| -
|
| - u_unescape(TEXT[0].text, text, 128);
|
| - u_unescape(TEXT[0].pattern, pattern, 32);
|
| -
|
| - open(&status);
|
| - if (U_FAILURE(status)) {
|
| - log_err_status(status, "Unable to open static collators %s\n", u_errorName(status));
|
| - return;
|
| - }
|
| -
|
| - if (usearch_getText(NULL, &templength) != NULL) {
|
| - log_err("Error NULL string search should return NULL text\n");
|
| - }
|
| -
|
| - usearch_setText(NULL, text, 10, &status);
|
| - if (U_SUCCESS(status)) {
|
| - log_err("Error NULL string search should have an error when setting text\n");
|
| - }
|
| -
|
| - status = U_ZERO_ERROR;
|
| - strsrch = usearch_openFromCollator(pattern, -1, text, -1, EN_US_,
|
| - NULL, &status);
|
| -
|
| - if (U_FAILURE(status)) {
|
| - log_err("Error opening string search %s\n", u_errorName(status));
|
| - goto ENDTESTPATTERN;
|
| - }
|
| - temp = usearch_getText(strsrch, &templength);
|
| - if (u_strcmp(text, temp) != 0) {
|
| - log_err("Error setting text\n");
|
| - }
|
| - if (!assertEqualWithUStringSearch(strsrch, TEXT[0])) {
|
| - goto ENDTESTPATTERN;
|
| - }
|
| -
|
| - u_unescape(TEXT[1].text, text, 32);
|
| - usearch_setText(strsrch, text, -1, &status);
|
| - temp = usearch_getText(strsrch, &templength);
|
| - if (u_strcmp(text, temp) != 0) {
|
| - log_err("Error setting text\n");
|
| - goto ENDTESTPATTERN;
|
| - }
|
| - if (U_FAILURE(status)) {
|
| - log_err("Error setting text %s\n", u_errorName(status));
|
| - }
|
| - if (!assertEqualWithUStringSearch(strsrch, TEXT[1])) {
|
| - goto ENDTESTPATTERN;
|
| - }
|
| -
|
| - u_unescape(TEXT[0].text, text, 32);
|
| - usearch_setText(strsrch, text, -1, &status);
|
| - temp = usearch_getText(strsrch, &templength);
|
| - if (u_strcmp(text, temp) != 0) {
|
| - log_err("Error setting text\n");
|
| - goto ENDTESTPATTERN;
|
| - }
|
| - if (U_FAILURE(status)) {
|
| - log_err("Error setting pattern %s\n", u_errorName(status));
|
| - }
|
| - if (!assertEqualWithUStringSearch(strsrch, TEXT[0])) {
|
| - goto ENDTESTPATTERN;
|
| - }
|
| -ENDTESTPATTERN:
|
| - if (strsrch != NULL) {
|
| - usearch_close(strsrch);
|
| - }
|
| - close();
|
| -}
|
| -
|
| -static void TestCompositeBoundaries(void)
|
| -{
|
| - int count = 0;
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - open(&status);
|
| - if (U_FAILURE(status)) {
|
| - log_err_status(status, "Unable to open static collators %s\n", u_errorName(status));
|
| - return;
|
| - }
|
| - while (COMPOSITEBOUNDARIES[count].text != NULL) {
|
| - log_verbose("composite %d\n", count);
|
| - if (!assertEqual(COMPOSITEBOUNDARIES[count])) {
|
| - log_err("Error at test number %d\n", count);
|
| - }
|
| - count ++;
|
| - }
|
| - close();
|
| -}
|
| -
|
| -static void TestGetSetOffset(void)
|
| -{
|
| - int searchDataIndex = 0;
|
| - UChar pattern[32];
|
| - UChar text[128];
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - UStringSearch *strsrch;
|
| - memset(pattern, 0, 32*sizeof(UChar));
|
| - memset(text, 0, 128*sizeof(UChar));
|
| -
|
| - open(&status);
|
| - if (U_FAILURE(status)) {
|
| - log_err_status(status, "Unable to open static collators %s\n", u_errorName(status));
|
| - return;
|
| - }
|
| - if (usearch_getOffset(NULL) != USEARCH_DONE) {
|
| - log_err("usearch_getOffset(NULL) expected USEARCH_DONE\n");
|
| - }
|
| - strsrch = usearch_openFromCollator(pattern, 16, text, 32, EN_US_, NULL,
|
| - &status);
|
| - /* testing out of bounds error */
|
| - usearch_setOffset(strsrch, -1, &status);
|
| - if (U_SUCCESS(status)) {
|
| - log_err("Error expecting set offset error\n");
|
| - }
|
| - usearch_setOffset(strsrch, 128, &status);
|
| - if (U_SUCCESS(status)) {
|
| - log_err("Error expecting set offset error\n");
|
| - }
|
| - while (BASIC[searchDataIndex].text != NULL) {
|
| - int count = 0;
|
| - SearchData search = BASIC[searchDataIndex ++];
|
| - int32_t matchindex = search.offset[count];
|
| - int32_t textlength;
|
| -
|
| - u_unescape(search.text, text, 128);
|
| - u_unescape(search.pattern, pattern, 32);
|
| - status = U_ZERO_ERROR;
|
| - usearch_setText(strsrch, text, -1, &status);
|
| - usearch_setPattern(strsrch, pattern, -1, &status);
|
| - ucol_setStrength(usearch_getCollator(strsrch), search.strength);
|
| - usearch_reset(strsrch);
|
| - while (U_SUCCESS(status) && matchindex >= 0) {
|
| - uint32_t matchlength = search.size[count];
|
| - usearch_next(strsrch, &status);
|
| - if (matchindex != usearch_getMatchedStart(strsrch) ||
|
| - matchlength != (uint32_t)usearch_getMatchedLength(strsrch)) {
|
| - char *str = toCharString(usearch_getText(strsrch,
|
| - &textlength));
|
| - log_err("Text: %s\n", str);
|
| - str = toCharString(usearch_getPattern(strsrch, &textlength));
|
| - log_err("Pattern: %s\n", str);
|
| - log_err("Error match found at %d %d\n",
|
| - usearch_getMatchedStart(strsrch),
|
| - usearch_getMatchedLength(strsrch));
|
| - return;
|
| - }
|
| - usearch_setOffset(strsrch, matchindex + matchlength, &status);
|
| - usearch_previous(strsrch, &status);
|
| - if (matchindex != usearch_getMatchedStart(strsrch) ||
|
| - matchlength != (uint32_t)usearch_getMatchedLength(strsrch)) {
|
| - char *str = toCharString(usearch_getText(strsrch,
|
| - &textlength));
|
| - log_err("Text: %s\n", str);
|
| - str = toCharString(usearch_getPattern(strsrch, &textlength));
|
| - log_err("Pattern: %s\n", str);
|
| - log_err("Error match found at %d %d\n",
|
| - usearch_getMatchedStart(strsrch),
|
| - usearch_getMatchedLength(strsrch));
|
| - return;
|
| - }
|
| - usearch_setOffset(strsrch, matchindex + matchlength, &status);
|
| - matchindex = search.offset[count + 1] == -1 ? -1 :
|
| - search.offset[count + 2];
|
| - if (search.offset[count + 1] != -1) {
|
| - usearch_setOffset(strsrch, search.offset[count + 1] + 1,
|
| - &status);
|
| - if (usearch_getOffset(strsrch) != search.offset[count + 1] + 1) {
|
| - log_err("Error setting offset\n");
|
| - return;
|
| - }
|
| - }
|
| -
|
| - count += 2;
|
| - }
|
| - usearch_next(strsrch, &status);
|
| - if (usearch_getMatchedStart(strsrch) != USEARCH_DONE) {
|
| - char *str = toCharString(usearch_getText(strsrch, &textlength));
|
| - log_err("Text: %s\n", str);
|
| - str = toCharString(usearch_getPattern(strsrch, &textlength));
|
| - log_err("Pattern: %s\n", str);
|
| - log_err("Error match found at %d %d\n",
|
| - usearch_getMatchedStart(strsrch),
|
| - usearch_getMatchedLength(strsrch));
|
| - return;
|
| - }
|
| - }
|
| - ucol_setStrength(usearch_getCollator(strsrch), UCOL_TERTIARY);
|
| - usearch_close(strsrch);
|
| - close();
|
| -}
|
| -
|
| -static void TestGetSetAttribute(void)
|
| -{
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - UChar pattern[32];
|
| - UChar text[128];
|
| - UStringSearch *strsrch;
|
| -
|
| - memset(pattern, 0, 32*sizeof(UChar));
|
| - memset(text, 0, 128*sizeof(UChar));
|
| -
|
| - open(&status);
|
| - if (U_FAILURE(status)) {
|
| - log_err_status(status, "Unable to open static collators %s\n", u_errorName(status));
|
| - return;
|
| - }
|
| - if (usearch_getAttribute(NULL, USEARCH_OVERLAP) != USEARCH_DEFAULT ||
|
| - usearch_getAttribute(NULL, USEARCH_CANONICAL_MATCH) !=
|
| - USEARCH_DEFAULT) {
|
| - log_err(
|
| - "Attributes for NULL string search should be USEARCH_DEFAULT\n");
|
| - }
|
| - strsrch = usearch_openFromCollator(pattern, 16, text, 32, EN_US_, NULL,
|
| - &status);
|
| - if (U_FAILURE(status)) {
|
| - log_err("Error opening search %s\n", u_errorName(status));
|
| - return;
|
| - }
|
| -
|
| - usearch_setAttribute(strsrch, USEARCH_OVERLAP, USEARCH_DEFAULT, &status);
|
| - if (U_FAILURE(status) ||
|
| - usearch_getAttribute(strsrch, USEARCH_OVERLAP) != USEARCH_OFF) {
|
| - log_err("Error setting overlap to the default\n");
|
| - }
|
| - usearch_setAttribute(strsrch, USEARCH_OVERLAP, USEARCH_ON, &status);
|
| - if (U_FAILURE(status) ||
|
| - usearch_getAttribute(strsrch, USEARCH_OVERLAP) != USEARCH_ON) {
|
| - log_err("Error setting overlap true\n");
|
| - }
|
| - usearch_setAttribute(strsrch, USEARCH_OVERLAP, USEARCH_OFF, &status);
|
| - if (U_FAILURE(status) ||
|
| - usearch_getAttribute(strsrch, USEARCH_OVERLAP) != USEARCH_OFF) {
|
| - log_err("Error setting overlap false\n");
|
| - }
|
| - usearch_setAttribute(strsrch, USEARCH_OVERLAP,
|
| - USEARCH_ATTRIBUTE_VALUE_COUNT, &status);
|
| - if (U_SUCCESS(status)) {
|
| - log_err("Error setting overlap to illegal value\n");
|
| - }
|
| - status = U_ZERO_ERROR;
|
| - usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_DEFAULT,
|
| - &status);
|
| - if (U_FAILURE(status) ||
|
| - usearch_getAttribute(strsrch, USEARCH_CANONICAL_MATCH) !=
|
| - USEARCH_OFF) {
|
| - log_err("Error setting canonical match to the default\n");
|
| - }
|
| - usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON,
|
| - &status);
|
| - if (U_FAILURE(status) ||
|
| - usearch_getAttribute(strsrch, USEARCH_CANONICAL_MATCH) !=
|
| - USEARCH_ON) {
|
| - log_err("Error setting canonical match true\n");
|
| - }
|
| - usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_OFF,
|
| - &status);
|
| - if (U_FAILURE(status) ||
|
| - usearch_getAttribute(strsrch, USEARCH_CANONICAL_MATCH) !=
|
| - USEARCH_OFF) {
|
| - log_err("Error setting canonical match false\n");
|
| - }
|
| - usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH,
|
| - USEARCH_ATTRIBUTE_VALUE_COUNT, &status);
|
| - if (U_SUCCESS(status)) {
|
| - log_err("Error setting canonical match to illegal value\n");
|
| - }
|
| - status = U_ZERO_ERROR;
|
| - usearch_setAttribute(strsrch, USEARCH_ATTRIBUTE_COUNT, USEARCH_DEFAULT,
|
| - &status);
|
| - if (U_SUCCESS(status)) {
|
| - log_err("Error setting illegal attribute success\n");
|
| - }
|
| -
|
| - usearch_close(strsrch);
|
| - close();
|
| -}
|
| -
|
| -static void TestGetMatch(void)
|
| -{
|
| - int count = 0;
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - UChar text[128];
|
| - UChar pattern[32];
|
| - SearchData search = MATCH[0];
|
| - int32_t matchindex = search.offset[count];
|
| - UStringSearch *strsrch;
|
| - int32_t textlength;
|
| - UChar matchtext[128];
|
| -
|
| - open(&status);
|
| - if (U_FAILURE(status)) {
|
| - log_err_status(status, "Unable to open static collators %s\n", u_errorName(status));
|
| - return;
|
| - }
|
| -
|
| - if (usearch_getMatchedStart(NULL) != USEARCH_DONE ||
|
| - usearch_getMatchedLength(NULL) != USEARCH_DONE) {
|
| - log_err(
|
| - "Expected start and length of NULL string search should be USEARCH_DONE\n");
|
| - }
|
| -
|
| - u_unescape(search.text, text, 128);
|
| - u_unescape(search.pattern, pattern, 32);
|
| - strsrch = usearch_openFromCollator(pattern, -1, text, -1, EN_US_,
|
| - NULL, &status);
|
| - if (U_FAILURE(status)) {
|
| - log_err("Error opening string search %s\n", u_errorName(status));
|
| - if (strsrch != NULL) {
|
| - usearch_close(strsrch);
|
| - }
|
| - return;
|
| - }
|
| -
|
| - while (U_SUCCESS(status) && matchindex >= 0) {
|
| - int32_t matchlength = search.size[count];
|
| - usearch_next(strsrch, &status);
|
| - if (matchindex != usearch_getMatchedStart(strsrch) ||
|
| - matchlength != usearch_getMatchedLength(strsrch)) {
|
| - char *str = toCharString(usearch_getText(strsrch, &textlength));
|
| - log_err("Text: %s\n", str);
|
| - str = toCharString(usearch_getPattern(strsrch, &textlength));
|
| - log_err("Pattern: %s\n", str);
|
| - log_err("Error match found at %d %d\n",
|
| - usearch_getMatchedStart(strsrch),
|
| - usearch_getMatchedLength(strsrch));
|
| - return;
|
| - }
|
| - count ++;
|
| -
|
| - status = U_ZERO_ERROR;
|
| - if (usearch_getMatchedText(NULL, matchtext, 128, &status) !=
|
| - USEARCH_DONE || U_SUCCESS(status)){
|
| - log_err("Error expecting errors with NULL string search\n");
|
| - }
|
| - status = U_ZERO_ERROR;
|
| - if (usearch_getMatchedText(strsrch, NULL, 0, &status) !=
|
| - (int32_t)matchlength || U_SUCCESS(status)){
|
| - log_err("Error pre-flighting match length\n");
|
| - }
|
| - status = U_ZERO_ERROR;
|
| - if (usearch_getMatchedText(strsrch, matchtext, 0, &status) !=
|
| - (int32_t)matchlength || U_SUCCESS(status)){
|
| - log_err("Error getting match text with buffer size 0\n");
|
| - }
|
| - status = U_ZERO_ERROR;
|
| - if (usearch_getMatchedText(strsrch, matchtext, matchlength, &status)
|
| - != (int32_t)matchlength || matchtext[matchlength - 1] == 0 ||
|
| - U_FAILURE(status)){
|
| - log_err("Error getting match text with exact size\n");
|
| - }
|
| - status = U_ZERO_ERROR;
|
| - if (usearch_getMatchedText(strsrch, matchtext, 128, &status) !=
|
| - (int32_t) matchlength || U_FAILURE(status) ||
|
| - memcmp(matchtext,
|
| - usearch_getText(strsrch, &textlength) + matchindex,
|
| - matchlength * sizeof(UChar)) != 0 ||
|
| - matchtext[matchlength] != 0) {
|
| - log_err("Error getting matched text\n");
|
| - }
|
| -
|
| - matchindex = search.offset[count];
|
| - }
|
| - status = U_ZERO_ERROR;
|
| - usearch_next(strsrch, &status);
|
| - if (usearch_getMatchedStart(strsrch) != USEARCH_DONE ||
|
| - usearch_getMatchedLength(strsrch) != 0) {
|
| - log_err("Error end of match not found\n");
|
| - }
|
| - status = U_ZERO_ERROR;
|
| - if (usearch_getMatchedText(strsrch, matchtext, 128, &status) !=
|
| - USEARCH_DONE) {
|
| - log_err("Error getting null matches\n");
|
| - }
|
| - usearch_close(strsrch);
|
| - close();
|
| -}
|
| -
|
| -static void TestSetMatch(void)
|
| -{
|
| - int count = 0;
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - open(&status);
|
| - if (U_FAILURE(status)) {
|
| - log_err_status(status, "Unable to open static collators %s\n", u_errorName(status));
|
| - return;
|
| - }
|
| - while (MATCH[count].text != NULL) {
|
| - SearchData search = MATCH[count];
|
| - int size = 0;
|
| - int offsetIndex = 0;
|
| - UChar text[128];
|
| - UChar pattern[32];
|
| - UStringSearch *strsrch;
|
| - status = U_ZERO_ERROR;
|
| -
|
| - if (usearch_first(NULL, &status) != USEARCH_DONE ||
|
| - usearch_last(NULL, &status) != USEARCH_DONE) {
|
| - log_err("Error getting the first and last match of a NULL string search\n");
|
| - }
|
| - u_unescape(search.text, text, 128);
|
| - u_unescape(search.pattern, pattern, 32);
|
| - strsrch = usearch_openFromCollator(pattern, -1, text, -1, EN_US_,
|
| - NULL, &status);
|
| - if (U_FAILURE(status)) {
|
| - log_err("Error opening string search %s\n", u_errorName(status));
|
| - if (strsrch != NULL) {
|
| - usearch_close(strsrch);
|
| - }
|
| - return;
|
| - }
|
| -
|
| - size = 0;
|
| - while (search.offset[size] != -1) {
|
| - size ++;
|
| - }
|
| -
|
| - if (usearch_first(strsrch, &status) != search.offset[0] ||
|
| - U_FAILURE(status)) {
|
| - log_err("Error getting first match\n");
|
| - }
|
| - if (usearch_last(strsrch, &status) != search.offset[size -1] ||
|
| - U_FAILURE(status)) {
|
| - log_err("Error getting last match\n");
|
| - }
|
| -
|
| - while (offsetIndex < size) {
|
| - if (offsetIndex + 2 < size) {
|
| - if (usearch_following(strsrch, search.offset[offsetIndex + 2] - 1,
|
| - &status) != search.offset[offsetIndex + 2] ||
|
| - U_FAILURE(status)) {
|
| - log_err("Error getting following match at index %d\n",
|
| - search.offset[offsetIndex + 2] - 1);
|
| - }
|
| - }
|
| - if (offsetIndex + 1 < size) {
|
| - if (usearch_preceding(strsrch, search.offset[offsetIndex + 1] +
|
| - search.size[offsetIndex + 1] + 1,
|
| - &status) != search.offset[offsetIndex + 1] ||
|
| - U_FAILURE(status)) {
|
| - log_err("Error getting preceeding match at index %d\n",
|
| - search.offset[offsetIndex + 1] + 1);
|
| - }
|
| - }
|
| - offsetIndex += 2;
|
| - }
|
| - status = U_ZERO_ERROR;
|
| - if (usearch_following(strsrch, u_strlen(text), &status) !=
|
| - USEARCH_DONE) {
|
| - log_err("Error expecting out of bounds match\n");
|
| - }
|
| - if (usearch_preceding(strsrch, 0, &status) != USEARCH_DONE) {
|
| - log_err("Error expecting out of bounds match\n");
|
| - }
|
| - count ++;
|
| - usearch_close(strsrch);
|
| - }
|
| - close();
|
| -}
|
| -
|
| -static void TestReset(void)
|
| -{
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - UChar text[] = {0x66, 0x69, 0x73, 0x68, 0x20,
|
| - 0x66, 0x69, 0x73, 0x68};
|
| - UChar pattern[] = {0x73};
|
| - UStringSearch *strsrch;
|
| -
|
| - open(&status);
|
| - if (U_FAILURE(status)) {
|
| - log_err_status(status, "Unable to open static collators %s\n", u_errorName(status));
|
| - return;
|
| - }
|
| - strsrch = usearch_openFromCollator(pattern, 1, text, 9,
|
| - EN_US_, NULL, &status);
|
| - if (U_FAILURE(status)) {
|
| - log_err("Error opening string search %s\n", u_errorName(status));
|
| - if (strsrch != NULL) {
|
| - usearch_close(strsrch);
|
| - }
|
| - return;
|
| - }
|
| - usearch_setAttribute(strsrch, USEARCH_OVERLAP, USEARCH_ON, &status);
|
| - usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON,
|
| - &status);
|
| - usearch_setOffset(strsrch, 9, &status);
|
| - if (U_FAILURE(status)) {
|
| - log_err("Error setting attributes and offsets\n");
|
| - }
|
| - else {
|
| - usearch_reset(strsrch);
|
| - if (usearch_getAttribute(strsrch, USEARCH_OVERLAP) != USEARCH_OFF ||
|
| - usearch_getAttribute(strsrch, USEARCH_CANONICAL_MATCH) !=
|
| - USEARCH_OFF ||
|
| - usearch_getOffset(strsrch) != 0 ||
|
| - usearch_getMatchedLength(strsrch) != 0 ||
|
| - usearch_getMatchedStart(strsrch) != USEARCH_DONE) {
|
| - log_err("Error resetting string search\n");
|
| - }
|
| - usearch_previous(strsrch, &status);
|
| - if (usearch_getMatchedStart(strsrch) != 7 ||
|
| - usearch_getMatchedLength(strsrch) != 1) {
|
| - log_err("Error resetting string search\n");
|
| - }
|
| - }
|
| - usearch_close(strsrch);
|
| - close();
|
| -}
|
| -
|
| -static void TestSupplementary(void)
|
| -{
|
| - int count = 0;
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - open(&status);
|
| - if (U_FAILURE(status)) {
|
| - log_err_status(status, "Unable to open static collators %s\n", u_errorName(status));
|
| - return;
|
| - }
|
| - while (SUPPLEMENTARY[count].text != NULL) {
|
| - if (!assertEqual(SUPPLEMENTARY[count])) {
|
| - log_err("Error at test number %d\n", count);
|
| - }
|
| - count ++;
|
| - }
|
| - close();
|
| -}
|
| -
|
| -static void TestContraction(void)
|
| -{
|
| - UChar rules[128];
|
| - UChar pattern[128];
|
| - UChar text[128];
|
| - UCollator *collator;
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - int count = 0;
|
| - UStringSearch *strsrch;
|
| - memset(rules, 0, 128*sizeof(UChar));
|
| - memset(pattern, 0, 128*sizeof(UChar));
|
| - memset(text, 0, 128*sizeof(UChar));
|
| -
|
| - u_unescape(CONTRACTIONRULE, rules, 128);
|
| - collator = ucol_openRules(rules, u_strlen(rules), UCOL_ON,
|
| - UCOL_TERTIARY, NULL, &status);
|
| - if(status == U_FILE_ACCESS_ERROR) {
|
| - log_data_err("Is your data around?\n");
|
| - return;
|
| - } else if(U_FAILURE(status)) {
|
| - log_err("Error opening collator %s\n", u_errorName(status));
|
| - return;
|
| - }
|
| - strsrch = usearch_openFromCollator(pattern, 1, text, 1, collator, NULL,
|
| - &status);
|
| - if (U_FAILURE(status)) {
|
| - log_err("Error opening string search %s\n", u_errorName(status));
|
| - }
|
| -
|
| - while (CONTRACTION[count].text != NULL) {
|
| - u_unescape(CONTRACTION[count].text, text, 128);
|
| - u_unescape(CONTRACTION[count].pattern, pattern, 128);
|
| - usearch_setText(strsrch, text, -1, &status);
|
| - usearch_setPattern(strsrch, pattern, -1, &status);
|
| - if (!assertEqualWithUStringSearch(strsrch, CONTRACTION[count])) {
|
| - log_err("Error at test number %d\n", count);
|
| - }
|
| - count ++;
|
| - }
|
| - usearch_close(strsrch);
|
| - ucol_close(collator);
|
| -}
|
| -
|
| -static void TestIgnorable(void)
|
| -{
|
| - UChar rules[128];
|
| - UChar pattern[128];
|
| - UChar text[128];
|
| - UCollator *collator;
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - UStringSearch *strsrch;
|
| - uint32_t count = 0;
|
| -
|
| - memset(rules, 0, 128*sizeof(UChar));
|
| - memset(pattern, 0, 128*sizeof(UChar));
|
| - memset(text, 0, 128*sizeof(UChar));
|
| -
|
| - u_unescape(IGNORABLERULE, rules, 128);
|
| - collator = ucol_openRules(rules, u_strlen(rules), UCOL_ON,
|
| - IGNORABLE[count].strength, NULL, &status);
|
| - if(status == U_FILE_ACCESS_ERROR) {
|
| - log_data_err("Is your data around?\n");
|
| - return;
|
| - } else if(U_FAILURE(status)) {
|
| - log_err("Error opening collator %s\n", u_errorName(status));
|
| - return;
|
| - }
|
| - strsrch = usearch_openFromCollator(pattern, 1, text, 1, collator, NULL,
|
| - &status);
|
| - if (U_FAILURE(status)) {
|
| - log_err("Error opening string search %s\n", u_errorName(status));
|
| - }
|
| -
|
| - while (IGNORABLE[count].text != NULL) {
|
| - u_unescape(IGNORABLE[count].text, text, 128);
|
| - u_unescape(IGNORABLE[count].pattern, pattern, 128);
|
| - usearch_setText(strsrch, text, -1, &status);
|
| - usearch_setPattern(strsrch, pattern, -1, &status);
|
| - if (!assertEqualWithUStringSearch(strsrch, IGNORABLE[count])) {
|
| - log_err("Error at test number %d\n", count);
|
| - }
|
| - count ++;
|
| - }
|
| - usearch_close(strsrch);
|
| - ucol_close(collator);
|
| -}
|
| -
|
| -static void TestDiacriticMatch(void)
|
| -{
|
| - UChar pattern[128];
|
| - UChar text[128];
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - UStringSearch *strsrch = NULL;
|
| - UCollator *coll = NULL;
|
| - uint32_t count = 0;
|
| - SearchData search;
|
| -
|
| - memset(pattern, 0, 128*sizeof(UChar));
|
| - memset(text, 0, 128*sizeof(UChar));
|
| -
|
| - strsrch = usearch_open(pattern, 1, text, 1, uloc_getDefault(), NULL, &status);
|
| - if (U_FAILURE(status)) {
|
| - log_err_status(status, "Error opening string search %s\n", u_errorName(status));
|
| - return;
|
| - }
|
| -
|
| - search = DIACRITICMATCH[count];
|
| - while (search.text != NULL) {
|
| - if (search.collator != NULL) {
|
| - coll = ucol_openFromShortString(search.collator, FALSE, NULL, &status);
|
| - } else {
|
| - /* Always use "en_US" because some of these tests fail in Danish locales. */
|
| - coll = ucol_open("en_US"/*uloc_getDefault()*/, &status);
|
| - ucol_setStrength(coll, search.strength);
|
| - }
|
| - if (U_FAILURE(status)) {
|
| - log_err("Error opening string search collator(\"%s\") %s\n", search.collator, u_errorName(status));
|
| - return;
|
| - }
|
| -
|
| - usearch_setCollator(strsrch, coll, &status);
|
| - if (U_FAILURE(status)) {
|
| - log_err("Error setting string search collator %s\n", u_errorName(status));
|
| - return;
|
| - }
|
| -
|
| - u_unescape(search.text, text, 128);
|
| - u_unescape(search.pattern, pattern, 128);
|
| - usearch_setText(strsrch, text, -1, &status);
|
| - usearch_setPattern(strsrch, pattern, -1, &status);
|
| - if (!assertEqualWithUStringSearch(strsrch, search)) {
|
| - log_err("Error at test number %d\n", count);
|
| - }
|
| - ucol_close(coll);
|
| -
|
| - search = DIACRITICMATCH[++count];
|
| - }
|
| - usearch_close(strsrch);
|
| -}
|
| -
|
| -static void TestCanonical(void)
|
| -{
|
| - int count = 0;
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - open(&status);
|
| - if (U_FAILURE(status)) {
|
| - log_err_status(status, "Unable to open static collators %s\n", u_errorName(status));
|
| - return;
|
| - }
|
| - while (BASICCANONICAL[count].text != NULL) {
|
| - if (!assertCanonicalEqual(BASICCANONICAL[count])) {
|
| - log_err("Error at test number %d\n", count);
|
| - }
|
| - count ++;
|
| - }
|
| - close();
|
| -}
|
| -
|
| -static void TestNormCanonical(void)
|
| -{
|
| - int count = 0;
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - open(&status);
|
| - if (U_FAILURE(status)) {
|
| - log_err_status(status, "Unable to open static collators %s\n", u_errorName(status));
|
| - return;
|
| - }
|
| - ucol_setAttribute(EN_US_, UCOL_NORMALIZATION_MODE, UCOL_ON, &status);
|
| - count = 0;
|
| - while (NORMCANONICAL[count].text != NULL) {
|
| - if (!assertCanonicalEqual(NORMCANONICAL[count])) {
|
| - log_err("Error at test number %d\n", count);
|
| - }
|
| - count ++;
|
| - }
|
| - ucol_setAttribute(EN_US_, UCOL_NORMALIZATION_MODE, UCOL_OFF, &status);
|
| - close();
|
| -}
|
| -
|
| -static void TestStrengthCanonical(void)
|
| -{
|
| - int count = 0;
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - open(&status);
|
| - if (U_FAILURE(status)) {
|
| - log_err_status(status, "Unable to open static collators %s\n", u_errorName(status));
|
| - return;
|
| - }
|
| - while (STRENGTHCANONICAL[count].text != NULL) {
|
| - if (!assertCanonicalEqual(STRENGTHCANONICAL[count])) {
|
| - log_err("Error at test number %d\n", count);
|
| - }
|
| - count ++;
|
| - }
|
| - close();
|
| -}
|
| -
|
| -static void TestBreakIteratorCanonical(void) {
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - int count = 0;
|
| -
|
| - CHECK_BREAK("x");
|
| -
|
| -#if !UCONFIG_NO_BREAK_ITERATION
|
| -
|
| - open(&status);
|
| - if (U_FAILURE(status)) {
|
| - log_err_status(status, "Unable to open static collators %s\n", u_errorName(status));
|
| - return;
|
| - }
|
| - while (count < 4) {
|
| - /* 0-3 test are fixed */
|
| - UChar pattern[32];
|
| - UChar text[128];
|
| - const SearchData *search = &(BREAKITERATORCANONICAL[count]);
|
| - UCollator *collator = getCollator(search->collator);
|
| - UBreakIterator *breaker = getBreakIterator(search->breaker);
|
| - UStringSearch *strsrch;
|
| -
|
| - u_unescape(search->text, text, 128);
|
| - u_unescape(search->pattern, pattern, 32);
|
| - ucol_setStrength(collator, search->strength);
|
| -
|
| - strsrch = usearch_openFromCollator(pattern, -1, text, -1, collator,
|
| - breaker, &status);
|
| - if(status == U_FILE_ACCESS_ERROR) {
|
| - log_data_err("Is your data around?\n");
|
| - goto ENDTESTBREAKITERATOR;
|
| - } else if(U_FAILURE(status)) {
|
| - log_err("Error opening searcher\n");
|
| - goto ENDTESTBREAKITERATOR;
|
| - }
|
| - usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON,
|
| - &status);
|
| - if (U_FAILURE(status) ||
|
| - usearch_getBreakIterator(strsrch) != breaker) {
|
| - log_err("Error setting break iterator\n");
|
| - usearch_close(strsrch);
|
| - goto ENDTESTBREAKITERATOR;
|
| - }
|
| - if (!assertEqualWithUStringSearch(strsrch, *search)) {
|
| - ucol_setStrength(collator, UCOL_TERTIARY);
|
| - usearch_close(strsrch);
|
| - goto ENDTESTBREAKITERATOR;
|
| - }
|
| - search = &(BREAKITERATOREXACT[count + 1]);
|
| - breaker = getBreakIterator(search->breaker);
|
| - usearch_setBreakIterator(strsrch, breaker, &status);
|
| - if (U_FAILURE(status) || usearch_getBreakIterator(strsrch) != breaker) {
|
| - log_err("Error setting break iterator\n");
|
| - usearch_close(strsrch);
|
| - goto ENDTESTBREAKITERATOR;
|
| - }
|
| - usearch_reset(strsrch);
|
| - usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON,
|
| - &status);
|
| - if (!assertEqualWithUStringSearch(strsrch, *search)) {
|
| - log_err("Error at test number %d\n", count);
|
| - usearch_close(strsrch);
|
| - goto ENDTESTBREAKITERATOR;
|
| - }
|
| - usearch_close(strsrch);
|
| - count += 2;
|
| - }
|
| - count = 0;
|
| - while (BREAKITERATORCANONICAL[count].text != NULL) {
|
| - if (!assertEqual(BREAKITERATORCANONICAL[count])) {
|
| - log_err("Error at test number %d\n", count);
|
| - goto ENDTESTBREAKITERATOR;
|
| - }
|
| - count ++;
|
| - }
|
| -
|
| -ENDTESTBREAKITERATOR:
|
| - close();
|
| -#endif
|
| -}
|
| -
|
| -static void TestVariableCanonical(void)
|
| -{
|
| - int count = 0;
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - open(&status);
|
| - if (U_FAILURE(status)) {
|
| - log_err_status(status, "Unable to open static collators %s\n", u_errorName(status));
|
| - return;
|
| - }
|
| - ucol_setAttribute(EN_US_, UCOL_ALTERNATE_HANDLING, UCOL_SHIFTED, &status);
|
| - if (U_FAILURE(status)) {
|
| - log_err("Error setting collation alternate attribute %s\n",
|
| - u_errorName(status));
|
| - }
|
| - while (VARIABLE[count].text != NULL) {
|
| - log_verbose("variable %d\n", count);
|
| - if (!assertCanonicalEqual(VARIABLE[count])) {
|
| - log_err("Error at test number %d\n", count);
|
| - }
|
| - count ++;
|
| - }
|
| - ucol_setAttribute(EN_US_, UCOL_ALTERNATE_HANDLING,
|
| - UCOL_NON_IGNORABLE, &status);
|
| - close();
|
| -}
|
| -
|
| -static void TestOverlapCanonical(void)
|
| -{
|
| - int count = 0;
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - open(&status);
|
| - if (U_FAILURE(status)) {
|
| - log_err_status(status, "Unable to open static collators %s\n", u_errorName(status));
|
| - return;
|
| - }
|
| - while (OVERLAPCANONICAL[count].text != NULL) {
|
| - if (!assertEqualWithAttribute(OVERLAPCANONICAL[count], USEARCH_ON,
|
| - USEARCH_ON)) {
|
| - log_err("Error at overlap test number %d\n", count);
|
| - }
|
| - count ++;
|
| - }
|
| - count = 0;
|
| - while (NONOVERLAP[count].text != NULL) {
|
| - if (!assertCanonicalEqual(NONOVERLAPCANONICAL[count])) {
|
| - log_err("Error at non overlap test number %d\n", count);
|
| - }
|
| - count ++;
|
| - }
|
| -
|
| - count = 0;
|
| - while (count < 1) {
|
| - UChar pattern[32];
|
| - UChar text[128];
|
| - const SearchData *search = &(OVERLAPCANONICAL[count]);
|
| - UCollator *collator = getCollator(search->collator);
|
| - UStringSearch *strsrch;
|
| - status = U_ZERO_ERROR;
|
| -
|
| - u_unescape(search->text, text, 128);
|
| - u_unescape(search->pattern, pattern, 32);
|
| - strsrch = usearch_openFromCollator(pattern, -1, text, -1, collator,
|
| - NULL, &status);
|
| - if(status == U_FILE_ACCESS_ERROR) {
|
| - log_data_err("Is your data around?\n");
|
| - return;
|
| - } else if(U_FAILURE(status)) {
|
| - log_err("Error opening searcher\n");
|
| - return;
|
| - }
|
| - usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON,
|
| - &status);
|
| - usearch_setAttribute(strsrch, USEARCH_OVERLAP, USEARCH_ON, &status);
|
| - if (U_FAILURE(status) ||
|
| - usearch_getAttribute(strsrch, USEARCH_OVERLAP) != USEARCH_ON) {
|
| - log_err("Error setting overlap option\n");
|
| - }
|
| - if (!assertEqualWithUStringSearch(strsrch, *search)) {
|
| - usearch_close(strsrch);
|
| - return;
|
| - }
|
| - search = &(NONOVERLAPCANONICAL[count]);
|
| - usearch_setAttribute(strsrch, USEARCH_OVERLAP, USEARCH_OFF, &status);
|
| - if (U_FAILURE(status) ||
|
| - usearch_getAttribute(strsrch, USEARCH_OVERLAP) != USEARCH_OFF) {
|
| - log_err("Error setting overlap option\n");
|
| - }
|
| - usearch_reset(strsrch);
|
| - if (!assertEqualWithUStringSearch(strsrch, *search)) {
|
| - usearch_close(strsrch);
|
| - log_err("Error at test number %d\n", count);
|
| - }
|
| -
|
| - count ++;
|
| - usearch_close(strsrch);
|
| - }
|
| - close();
|
| -}
|
| -
|
| -static void TestCollatorCanonical(void)
|
| -{
|
| - /* test collator that thinks "o" and "p" are the same thing */
|
| - UChar rules[32];
|
| - UCollator *tailored = NULL;
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - UChar pattern[32];
|
| - UChar text[128];
|
| - UStringSearch *strsrch;
|
| -
|
| - open(&status);
|
| - if (U_FAILURE(status)) {
|
| - log_err_status(status, "Unable to open static collators %s\n", u_errorName(status));
|
| - return;
|
| - }
|
| - u_unescape(COLLATORCANONICAL[0].text, text, 128);
|
| - u_unescape(COLLATORCANONICAL[0].pattern, pattern, 32);
|
| -
|
| - strsrch = usearch_openFromCollator(pattern, -1, text, -1, EN_US_,
|
| - NULL, &status);
|
| - if(status == U_FILE_ACCESS_ERROR) {
|
| - log_data_err("Is your data around?\n");
|
| - return;
|
| - } else if(U_FAILURE(status)) {
|
| - log_err("Error opening searcher\n");
|
| - return;
|
| - }
|
| - usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON,
|
| - &status);
|
| - if (U_FAILURE(status)) {
|
| - log_err("Error opening string search %s\n", u_errorName(status));
|
| - }
|
| - if (!assertEqualWithUStringSearch(strsrch, COLLATORCANONICAL[0])) {
|
| - goto ENDTESTCOLLATOR;
|
| - }
|
| -
|
| - u_unescape(TESTCOLLATORRULE, rules, 32);
|
| - tailored = ucol_openRules(rules, -1, UCOL_ON,
|
| - COLLATORCANONICAL[1].strength, NULL, &status);
|
| - if (U_FAILURE(status)) {
|
| - log_err("Error opening rule based collator %s\n", u_errorName(status));
|
| - }
|
| -
|
| - usearch_setCollator(strsrch, tailored, &status);
|
| - if (U_FAILURE(status) || usearch_getCollator(strsrch) != tailored) {
|
| - log_err("Error setting rule based collator\n");
|
| - }
|
| - usearch_reset(strsrch);
|
| - usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON,
|
| - &status);
|
| - if (!assertEqualWithUStringSearch(strsrch, COLLATORCANONICAL[1])) {
|
| - goto ENDTESTCOLLATOR;
|
| - }
|
| -
|
| - usearch_setCollator(strsrch, EN_US_, &status);
|
| - usearch_reset(strsrch);
|
| - usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON,
|
| - &status);
|
| - if (U_FAILURE(status) || usearch_getCollator(strsrch) != EN_US_) {
|
| - log_err("Error setting rule based collator\n");
|
| - }
|
| - if (!assertEqualWithUStringSearch(strsrch, COLLATORCANONICAL[0])) {
|
| - goto ENDTESTCOLLATOR;
|
| - }
|
| -
|
| -ENDTESTCOLLATOR:
|
| - usearch_close(strsrch);
|
| - if (tailored != NULL) {
|
| - ucol_close(tailored);
|
| - }
|
| - close();
|
| -}
|
| -
|
| -static void TestPatternCanonical(void)
|
| -{
|
| - UStringSearch *strsrch;
|
| - UChar pattern[32];
|
| - UChar text[128];
|
| - const UChar *temp;
|
| - int32_t templength;
|
| - UErrorCode status = U_ZERO_ERROR;
|
| -
|
| - open(&status);
|
| - if (U_FAILURE(status)) {
|
| - log_err_status(status, "Unable to open static collators %s\n", u_errorName(status));
|
| - return;
|
| - }
|
| - u_unescape(PATTERNCANONICAL[0].text, text, 128);
|
| - u_unescape(PATTERNCANONICAL[0].pattern, pattern, 32);
|
| -
|
| - ucol_setStrength(EN_US_, PATTERNCANONICAL[0].strength);
|
| - strsrch = usearch_openFromCollator(pattern, -1, text, -1, EN_US_,
|
| - NULL, &status);
|
| - usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON,
|
| - &status);
|
| - if (U_FAILURE(status)) {
|
| - log_err("Error opening string search %s\n", u_errorName(status));
|
| - goto ENDTESTPATTERN;
|
| - }
|
| - temp = usearch_getPattern(strsrch, &templength);
|
| - if (u_strcmp(pattern, temp) != 0) {
|
| - log_err("Error setting pattern\n");
|
| - }
|
| - if (!assertEqualWithUStringSearch(strsrch, PATTERNCANONICAL[0])) {
|
| - goto ENDTESTPATTERN;
|
| - }
|
| -
|
| - u_unescape(PATTERNCANONICAL[1].pattern, pattern, 32);
|
| - usearch_setPattern(strsrch, pattern, -1, &status);
|
| - temp = usearch_getPattern(strsrch, &templength);
|
| - if (u_strcmp(pattern, temp) != 0) {
|
| - log_err("Error setting pattern\n");
|
| - goto ENDTESTPATTERN;
|
| - }
|
| - usearch_reset(strsrch);
|
| - usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON,
|
| - &status);
|
| - if (U_FAILURE(status)) {
|
| - log_err("Error setting pattern %s\n", u_errorName(status));
|
| - }
|
| - if (!assertEqualWithUStringSearch(strsrch, PATTERNCANONICAL[1])) {
|
| - goto ENDTESTPATTERN;
|
| - }
|
| -
|
| - u_unescape(PATTERNCANONICAL[0].pattern, pattern, 32);
|
| - usearch_setPattern(strsrch, pattern, -1, &status);
|
| - temp = usearch_getPattern(strsrch, &templength);
|
| - if (u_strcmp(pattern, temp) != 0) {
|
| - log_err("Error setting pattern\n");
|
| - goto ENDTESTPATTERN;
|
| - }
|
| - usearch_reset(strsrch);
|
| - usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON,
|
| - &status);
|
| - if (U_FAILURE(status)) {
|
| - log_err("Error setting pattern %s\n", u_errorName(status));
|
| - }
|
| - if (!assertEqualWithUStringSearch(strsrch, PATTERNCANONICAL[0])) {
|
| - goto ENDTESTPATTERN;
|
| - }
|
| -ENDTESTPATTERN:
|
| - ucol_setStrength(EN_US_, UCOL_TERTIARY);
|
| - if (strsrch != NULL) {
|
| - usearch_close(strsrch);
|
| - }
|
| - close();
|
| -}
|
| -
|
| -static void TestTextCanonical(void)
|
| -{
|
| - UStringSearch *strsrch;
|
| - UChar pattern[32];
|
| - UChar text[128];
|
| - const UChar *temp;
|
| - int32_t templength;
|
| - UErrorCode status = U_ZERO_ERROR;
|
| -
|
| - u_unescape(TEXTCANONICAL[0].text, text, 128);
|
| - u_unescape(TEXTCANONICAL[0].pattern, pattern, 32);
|
| -
|
| - open(&status);
|
| - if (U_FAILURE(status)) {
|
| - log_err_status(status, "Unable to open static collators %s\n", u_errorName(status));
|
| - return;
|
| - }
|
| - strsrch = usearch_openFromCollator(pattern, -1, text, -1, EN_US_,
|
| - NULL, &status);
|
| - usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON,
|
| - &status);
|
| -
|
| - if (U_FAILURE(status)) {
|
| - log_err("Error opening string search %s\n", u_errorName(status));
|
| - goto ENDTESTPATTERN;
|
| - }
|
| - temp = usearch_getText(strsrch, &templength);
|
| - if (u_strcmp(text, temp) != 0) {
|
| - log_err("Error setting text\n");
|
| - }
|
| - if (!assertEqualWithUStringSearch(strsrch, TEXTCANONICAL[0])) {
|
| - goto ENDTESTPATTERN;
|
| - }
|
| -
|
| - u_unescape(TEXTCANONICAL[1].text, text, 32);
|
| - usearch_setText(strsrch, text, -1, &status);
|
| - temp = usearch_getText(strsrch, &templength);
|
| - if (u_strcmp(text, temp) != 0) {
|
| - log_err("Error setting text\n");
|
| - goto ENDTESTPATTERN;
|
| - }
|
| - if (U_FAILURE(status)) {
|
| - log_err("Error setting text %s\n", u_errorName(status));
|
| - }
|
| - if (!assertEqualWithUStringSearch(strsrch, TEXTCANONICAL[1])) {
|
| - goto ENDTESTPATTERN;
|
| - }
|
| -
|
| - u_unescape(TEXTCANONICAL[0].text, text, 32);
|
| - usearch_setText(strsrch, text, -1, &status);
|
| - temp = usearch_getText(strsrch, &templength);
|
| - if (u_strcmp(text, temp) != 0) {
|
| - log_err("Error setting text\n");
|
| - goto ENDTESTPATTERN;
|
| - }
|
| - if (U_FAILURE(status)) {
|
| - log_err("Error setting pattern %s\n", u_errorName(status));
|
| - }
|
| - if (!assertEqualWithUStringSearch(strsrch, TEXTCANONICAL[0])) {
|
| - goto ENDTESTPATTERN;
|
| - }
|
| -ENDTESTPATTERN:
|
| - if (strsrch != NULL) {
|
| - usearch_close(strsrch);
|
| - }
|
| - close();
|
| -}
|
| -
|
| -static void TestCompositeBoundariesCanonical(void)
|
| -{
|
| - int count = 0;
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - open(&status);
|
| - if (U_FAILURE(status)) {
|
| - log_err_status(status, "Unable to open static collators %s\n", u_errorName(status));
|
| - return;
|
| - }
|
| - while (COMPOSITEBOUNDARIESCANONICAL[count].text != NULL) {
|
| - log_verbose("composite %d\n", count);
|
| - if (!assertCanonicalEqual(COMPOSITEBOUNDARIESCANONICAL[count])) {
|
| - log_err("Error at test number %d\n", count);
|
| - }
|
| - count ++;
|
| - }
|
| - close();
|
| -}
|
| -
|
| -static void TestGetSetOffsetCanonical(void)
|
| -{
|
| - int searchDataIndex = 0;
|
| - UChar pattern[32];
|
| - UChar text[128];
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - UStringSearch *strsrch;
|
| - UCollator *collator;
|
| -
|
| - memset(pattern, 0, 32*sizeof(UChar));
|
| - memset(text, 0, 128*sizeof(UChar));
|
| -
|
| - open(&status);
|
| - if (U_FAILURE(status)) {
|
| - log_err_status(status, "Unable to open static collators %s\n", u_errorName(status));
|
| - return;
|
| - }
|
| - strsrch = usearch_openFromCollator(pattern, 16, text, 32, EN_US_, NULL,
|
| - &status);
|
| -
|
| - collator = usearch_getCollator(strsrch);
|
| - ucol_setAttribute(collator, UCOL_NORMALIZATION_MODE, UCOL_ON, &status);
|
| -
|
| - usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON,
|
| - &status);
|
| -
|
| - /* testing out of bounds error */
|
| - usearch_setOffset(strsrch, -1, &status);
|
| - if (U_SUCCESS(status)) {
|
| - log_err("Error expecting set offset error\n");
|
| - }
|
| - usearch_setOffset(strsrch, 128, &status);
|
| - if (U_SUCCESS(status)) {
|
| - log_err("Error expecting set offset error\n");
|
| - }
|
| - while (BASICCANONICAL[searchDataIndex].text != NULL) {
|
| - int count = 0;
|
| - SearchData search = BASICCANONICAL[searchDataIndex ++];
|
| - int32_t matchindex = search.offset[count];
|
| - int32_t textlength;
|
| -
|
| - if (BASICCANONICAL[searchDataIndex].text == NULL) {
|
| - /* skip the last one */
|
| - break;
|
| - }
|
| -
|
| - u_unescape(search.text, text, 128);
|
| - u_unescape(search.pattern, pattern, 32);
|
| - status = U_ZERO_ERROR;
|
| - usearch_setText(strsrch, text, -1, &status);
|
| - usearch_setPattern(strsrch, pattern, -1, &status);
|
| - while (U_SUCCESS(status) && matchindex >= 0) {
|
| - uint32_t matchlength = search.size[count];
|
| - usearch_next(strsrch, &status);
|
| - if (matchindex != usearch_getMatchedStart(strsrch) ||
|
| - matchlength != (uint32_t)usearch_getMatchedLength(strsrch)) {
|
| - char *str = toCharString(usearch_getText(strsrch,
|
| - &textlength));
|
| - log_err("Text: %s\n", str);
|
| - str = toCharString(usearch_getPattern(strsrch, &textlength));
|
| - log_err("Pattern: %s\n", str);
|
| - log_err("Error match found at %d %d\n",
|
| - usearch_getMatchedStart(strsrch),
|
| - usearch_getMatchedLength(strsrch));
|
| - goto bail;
|
| - }
|
| - matchindex = search.offset[count + 1] == -1 ? -1 :
|
| - search.offset[count + 2];
|
| - if (search.offset[count + 1] != -1) {
|
| - usearch_setOffset(strsrch, search.offset[count + 1] + 1,
|
| - &status);
|
| - if (usearch_getOffset(strsrch) != search.offset[count + 1] + 1) {
|
| - log_err("Error setting offset\n");
|
| - goto bail;
|
| - }
|
| - }
|
| -
|
| - count += 2;
|
| - }
|
| - usearch_next(strsrch, &status);
|
| - if (usearch_getMatchedStart(strsrch) != USEARCH_DONE) {
|
| - char *str = toCharString(usearch_getText(strsrch, &textlength));
|
| - log_err("Text: %s\n", str);
|
| - str = toCharString(usearch_getPattern(strsrch, &textlength));
|
| - log_err("Pattern: %s\n", str);
|
| - log_err("Error match found at %d %d\n",
|
| - usearch_getMatchedStart(strsrch),
|
| - usearch_getMatchedLength(strsrch));
|
| - goto bail;
|
| - }
|
| - }
|
| -
|
| -bail:
|
| - ucol_setAttribute(collator, UCOL_NORMALIZATION_MODE, UCOL_OFF, &status);
|
| - usearch_close(strsrch);
|
| - close();
|
| -}
|
| -
|
| -static void TestSupplementaryCanonical(void)
|
| -{
|
| - int count = 0;
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - open(&status);
|
| - if (U_FAILURE(status)) {
|
| - log_err_status(status, "Unable to open static collators %s\n", u_errorName(status));
|
| - return;
|
| - }
|
| - while (SUPPLEMENTARYCANONICAL[count].text != NULL) {
|
| - if (!assertCanonicalEqual(SUPPLEMENTARYCANONICAL[count])) {
|
| - log_err("Error at test number %d\n", count);
|
| - }
|
| - count ++;
|
| - }
|
| - close();
|
| -}
|
| -
|
| -static void TestContractionCanonical(void)
|
| -{
|
| - UChar rules[128];
|
| - UChar pattern[128];
|
| - UChar text[128];
|
| - UCollator *collator = NULL;
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - int count = 0;
|
| - UStringSearch *strsrch = NULL;
|
| - memset(rules, 0, 128*sizeof(UChar));
|
| - memset(pattern, 0, 128*sizeof(UChar));
|
| - memset(text, 0, 128*sizeof(UChar));
|
| -
|
| - u_unescape(CONTRACTIONRULE, rules, 128);
|
| - collator = ucol_openRules(rules, u_strlen(rules), UCOL_ON,
|
| - UCOL_TERTIARY, NULL, &status);
|
| - if(status == U_FILE_ACCESS_ERROR) {
|
| - log_data_err("Is your data around?\n");
|
| - return;
|
| - } else if(U_FAILURE(status)) {
|
| - log_err("Error opening collator %s\n", u_errorName(status));
|
| - return;
|
| - }
|
| - strsrch = usearch_openFromCollator(pattern, 1, text, 1, collator, NULL,
|
| - &status);
|
| - usearch_setAttribute(strsrch, USEARCH_CANONICAL_MATCH, USEARCH_ON,
|
| - &status);
|
| - if (U_FAILURE(status)) {
|
| - log_err("Error opening string search %s\n", u_errorName(status));
|
| - }
|
| -
|
| - while (CONTRACTIONCANONICAL[count].text != NULL) {
|
| - u_unescape(CONTRACTIONCANONICAL[count].text, text, 128);
|
| - u_unescape(CONTRACTIONCANONICAL[count].pattern, pattern, 128);
|
| - usearch_setText(strsrch, text, -1, &status);
|
| - usearch_setPattern(strsrch, pattern, -1, &status);
|
| - if (!assertEqualWithUStringSearch(strsrch,
|
| - CONTRACTIONCANONICAL[count])) {
|
| - log_err("Error at test number %d\n", count);
|
| - }
|
| - count ++;
|
| - }
|
| - usearch_close(strsrch);
|
| - ucol_close(collator);
|
| -}
|
| -
|
| -static void TestNumeric(void) {
|
| - UCollator *coll = NULL;
|
| - UStringSearch *strsrch = NULL;
|
| - UErrorCode status = U_ZERO_ERROR;
|
| -
|
| - UChar pattern[128];
|
| - UChar text[128];
|
| - memset(pattern, 0, 128*sizeof(UChar));
|
| - memset(text, 0, 128*sizeof(UChar));
|
| -
|
| - coll = ucol_open("", &status);
|
| - if(U_FAILURE(status)) {
|
| - log_data_err("Could not open UCA. Is your data around?\n");
|
| - return;
|
| - }
|
| -
|
| - ucol_setAttribute(coll, UCOL_NUMERIC_COLLATION, UCOL_ON, &status);
|
| -
|
| - strsrch = usearch_openFromCollator(pattern, 1, text, 1, coll, NULL, &status);
|
| -
|
| - if(status != U_UNSUPPORTED_ERROR || U_SUCCESS(status)) {
|
| - log_err("Expected U_UNSUPPORTED_ERROR when trying to instantiate a search object from a CODAN collator, got %s instead\n", u_errorName(status));
|
| - if(strsrch) {
|
| - usearch_close(strsrch);
|
| - }
|
| - }
|
| -
|
| - ucol_close(coll);
|
| -
|
| -}
|
| -
|
| -/* This test is for ticket 4038 due to incorrect backward searching when certain patterns have a length > 1 */
|
| -static void TestForwardBackward(void) {
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - UCollator *coll = NULL;
|
| - UStringSearch *search = NULL;
|
| - UChar usrcstr[32], value[4];
|
| - int32_t pos= -1;
|
| - int32_t expectedPos = 9;
|
| -
|
| - coll = ucol_open("en_GB", &status);
|
| - if (U_FAILURE(status)) {
|
| - log_err_status(status, "ucol_open failed: %s\n", u_errorName(status));
|
| - goto exitTestForwardBackward;
|
| - }
|
| - ucol_setAttribute(coll, UCOL_STRENGTH, UCOL_PRIMARY, &status);
|
| - ucol_setAttribute(coll, UCOL_CASE_LEVEL, UCOL_ON, &status);
|
| - ucol_setAttribute(coll, UCOL_ALTERNATE_HANDLING, UCOL_NON_IGNORABLE, &status);
|
| -
|
| - u_uastrcpy(usrcstr, "QBitArray::bitarr_data"); /* text */
|
| - u_uastrcpy(value, "::"); /* pattern */
|
| -
|
| - search = usearch_openFromCollator(value, 2, usrcstr, 22, coll, NULL, &status);
|
| - if (U_FAILURE(status)) {
|
| - log_err("usearch_openFromCollator failed: %s\n", u_errorName(status));
|
| - goto exitTestForwardBackward;
|
| - }
|
| -
|
| - usearch_reset(search);
|
| - /* forward search */
|
| - pos = usearch_first(search, &status);
|
| - if (pos != expectedPos) {
|
| - log_err("Expected search result: %d; Got instead: %d\n", expectedPos, pos);
|
| - goto exitTestForwardBackward;
|
| - }
|
| -
|
| - pos = -1;
|
| - usearch_reset(search);
|
| - /* backward search */
|
| - pos = usearch_last(search, &status);
|
| - if (pos != expectedPos) {
|
| - log_err("Expected search result: %d; Got instead: %d\n", expectedPos, pos);
|
| - }
|
| -
|
| -exitTestForwardBackward :
|
| - if (coll != NULL) {
|
| - ucol_close(coll);
|
| - }
|
| - if (search != NULL) {
|
| - usearch_close(search);
|
| - }
|
| -}
|
| -
|
| -#define TEST_ASSERT(x) \
|
| - {if (U_FAILURE(x)) {log_err_status(x, "%s:%d: FAIL: test assertion failure \n", __FILE__, __LINE__);\
|
| - }}
|
| -
|
| -static void TestSearchForNull(void) {
|
| - UCollator *coll;
|
| - UErrorCode ec;
|
| - UStringSearch *search;
|
| - int pos;
|
| - int len;
|
| - int expectedPos;
|
| - int expectedLen;
|
| - int expectedNum;
|
| - int count = 0;
|
| - const UChar zerodigit = 0x0030; /* 0 */
|
| - const UChar nulldigit = 0x0000; /* null */
|
| -
|
| - /* static const UChar var[(length)+1]=U_DECLARE_UTF16(cs) */
|
| -#define PATTERN_LEN 4
|
| -#define TEXT_LEN 10
|
| -
|
| - U_STRING_DECL(_pattern, "IS 0", PATTERN_LEN);
|
| - U_STRING_DECL(_text, "_0IS 0 OK?", TEXT_LEN);
|
| - UChar pattern[PATTERN_LEN + 1], text[TEXT_LEN + 1];
|
| -
|
| - U_STRING_INIT(_pattern, "IS 0", PATTERN_LEN);
|
| - U_STRING_INIT(_text, "_0IS 0 OK?", TEXT_LEN);
|
| - expectedPos = 2;
|
| - expectedLen = 4;
|
| - expectedNum = 1;
|
| -
|
| - for (pos = 0; pos < PATTERN_LEN; pos++) {
|
| - if (_pattern[pos] == zerodigit) {
|
| - pattern[pos] = nulldigit;
|
| - } else {
|
| - pattern[pos] = _pattern[pos];
|
| - }
|
| - }
|
| - pattern[PATTERN_LEN] = 0x0000;
|
| -
|
| - for (pos = 0; pos < TEXT_LEN; pos++) {
|
| - if (_text[pos] == zerodigit) {
|
| - text[pos] = nulldigit;
|
| - } else {
|
| - text[pos] = _text[pos];
|
| - }
|
| - }
|
| - text[TEXT_LEN] = 0x0000;
|
| -
|
| - ec = U_ZERO_ERROR;
|
| -
|
| - /* create a US-English collator */
|
| - coll = ucol_open("en_US", &ec);
|
| -
|
| - /* make sure we didn't fail. */
|
| - TEST_ASSERT (ec);
|
| -
|
| - ucol_setStrength(coll, UCOL_IDENTICAL);
|
| -
|
| - /* open a search looking for 0 */
|
| - search = usearch_openFromCollator(pattern, PATTERN_LEN, text,
|
| - TEXT_LEN, coll, NULL, &ec);
|
| - TEST_ASSERT (ec);
|
| -
|
| - if (coll != NULL && search != NULL) {
|
| - pos = usearch_first(search, &ec);
|
| - len = usearch_getMatchedLength(search);
|
| - if (pos != expectedPos) {
|
| - log_err("Expected search result: %d; Got instead: %d\n", expectedPos,
|
| - pos);
|
| - }
|
| -
|
| - if (len != expectedLen) {
|
| - log_err("Expected search result length: %d; Got instead: %d\n",
|
| - expectedLen, len);
|
| - }
|
| -
|
| - for (pos = usearch_first(search, &ec); pos != USEARCH_DONE; pos
|
| - = usearch_next(search, &ec)) {
|
| - log_verbose("Match at %d\n", pos);
|
| - count += 1;
|
| - }
|
| -
|
| - if (count != expectedNum) {
|
| - log_err("Expected %d search hits, found %d\n", expectedNum, count);
|
| - }
|
| - }
|
| -
|
| - ucol_close(coll);
|
| - usearch_close(search);
|
| -}
|
| -
|
| -static void TestStrengthIdentical(void)
|
| -{
|
| - UCollator *coll;
|
| - UErrorCode ec = U_ZERO_ERROR;
|
| - UStringSearch *search;
|
| -
|
| - UChar pattern[] = {0x05E9, 0x0591, 0x05E9};
|
| - UChar text[] = {0x05E9, 0x0592, 0x05E9};
|
| - int32_t pLen = sizeof (pattern) / sizeof(pattern[0]);
|
| - int32_t tLen = sizeof(text) / sizeof (text[0]);
|
| - int32_t expectedPos = 0;
|
| - int32_t expectedLen = 3;
|
| -
|
| - int32_t pos;
|
| - int32_t len;
|
| -
|
| - /* create a US-English collator */
|
| - coll = ucol_open ("en_US", &ec);
|
| -
|
| - /* make sure we didn't fail. */
|
| - TEST_ASSERT (ec);
|
| -
|
| - ucol_setStrength( coll, UCOL_TERTIARY);
|
| -
|
| - /* open a search looking for 0 */
|
| - search = usearch_openFromCollator (pattern, pLen, text, tLen, coll, NULL, &ec);
|
| - TEST_ASSERT (ec);
|
| -
|
| - if (coll != NULL && search != NULL) {
|
| - pos = usearch_first(search, &ec);
|
| - len = usearch_getMatchedLength(search);
|
| -
|
| - if(pos != expectedPos) {
|
| - log_err("Expected search result: %d; Got instead: %d\n", expectedPos, pos);
|
| - }
|
| -
|
| - if(len != expectedLen) {
|
| - log_err("Expected search result length: %d; Got instead: %d\n", expectedLen, len);
|
| - }
|
| -
|
| - /* Now try it at strength == UCOL_IDENTICAL */
|
| - ucol_setStrength(coll, UCOL_IDENTICAL);
|
| - usearch_reset(search);
|
| -
|
| - pos = usearch_first(search, &ec);
|
| - len = usearch_getMatchedLength(search);
|
| -
|
| - if(pos != -1) {
|
| - log_err("Expected failure for strentgh = UCOL_IDENTICAL: got %d instead.\n", pos);
|
| - }
|
| - }
|
| -
|
| - usearch_close(search);
|
| - ucol_close(coll);
|
| -}
|
| -
|
| -/**
|
| -* TestUsingSearchCollator
|
| -*/
|
| -
|
| -#define ARRAY_LENGTH(array) (sizeof(array)/sizeof(array[0]))
|
| -
|
| -typedef struct {
|
| - const UChar * pattern;
|
| - const int32_t * offsets;
|
| - int32_t offsetsLen;
|
| -} PatternAndOffsets;
|
| -
|
| -static const UChar scKoText[] = {
|
| - 0x0020,
|
| -/*01*/ 0xAC00, 0x0020, /* simple LV Hangul */
|
| -/*03*/ 0xAC01, 0x0020, /* simple LVT Hangul */
|
| -/*05*/ 0xAC0F, 0x0020, /* LVTT, last jamo expands for search */
|
| -/*07*/ 0xAFFF, 0x0020, /* LLVVVTT, every jamo expands for search */
|
| -/*09*/ 0x1100, 0x1161, 0x11A8, 0x0020, /* 0xAC01 as conjoining jamo */
|
| -/*13*/ 0x1100, 0x1161, 0x1100, 0x0020, /* 0xAC01 as basic conjoining jamo (per search rules) */
|
| -/*17*/ 0x3131, 0x314F, 0x3131, 0x0020, /* 0xAC01 as compatibility jamo */
|
| -/*21*/ 0x1100, 0x1161, 0x11B6, 0x0020, /* 0xAC0F as conjoining jamo; last expands for search */
|
| -/*25*/ 0x1100, 0x1161, 0x1105, 0x1112, 0x0020, /* 0xAC0F as basic conjoining jamo; last expands for search */
|
| -/*30*/ 0x1101, 0x1170, 0x11B6, 0x0020, /* 0xAFFF as conjoining jamo; all expand for search */
|
| -/*34*/ 0x00E6, 0x0020, /* small letter ae, expands */
|
| -/*36*/ 0x1E4D, 0x0020, /* small letter o with tilde and acute, decomposes */
|
| - 0
|
| -};
|
| -
|
| -static const UChar scKoPat0[] = { 0xAC01, 0 };
|
| -static const UChar scKoPat1[] = { 0x1100, 0x1161, 0x11A8, 0 }; /* 0xAC01 as conjoining jamo */
|
| -static const UChar scKoPat2[] = { 0xAC0F, 0 };
|
| -static const UChar scKoPat3[] = { 0x1100, 0x1161, 0x1105, 0x1112, 0 }; /* 0xAC0F as basic conjoining jamo */
|
| -static const UChar scKoPat4[] = { 0xAFFF, 0 };
|
| -static const UChar scKoPat5[] = { 0x1101, 0x1170, 0x11B6, 0 }; /* 0xAFFF as conjoining jamo */
|
| -
|
| -static const int32_t scKoSrchOff01[] = { 3, 9, 13 };
|
| -static const int32_t scKoSrchOff23[] = { 5, 21, 25 };
|
| -static const int32_t scKoSrchOff45[] = { 7, 30 };
|
| -
|
| -static const PatternAndOffsets scKoSrchPatternsOffsets[] = {
|
| - { scKoPat0, scKoSrchOff01, ARRAY_LENGTH(scKoSrchOff01) },
|
| - { scKoPat1, scKoSrchOff01, ARRAY_LENGTH(scKoSrchOff01) },
|
| - { scKoPat2, scKoSrchOff23, ARRAY_LENGTH(scKoSrchOff23) },
|
| - { scKoPat3, scKoSrchOff23, ARRAY_LENGTH(scKoSrchOff23) },
|
| - { scKoPat4, scKoSrchOff45, ARRAY_LENGTH(scKoSrchOff45) },
|
| - { scKoPat5, scKoSrchOff45, ARRAY_LENGTH(scKoSrchOff45) },
|
| - { NULL, NULL, 0 }
|
| -};
|
| -
|
| -static const int32_t scKoStndOff01[] = { 3, 9 };
|
| -static const int32_t scKoStndOff2[] = { 5, 21 };
|
| -static const int32_t scKoStndOff3[] = { 25 };
|
| -static const int32_t scKoStndOff45[] = { 7, 30 };
|
| -
|
| -static const PatternAndOffsets scKoStndPatternsOffsets[] = {
|
| - { scKoPat0, scKoStndOff01, ARRAY_LENGTH(scKoStndOff01) },
|
| - { scKoPat1, scKoStndOff01, ARRAY_LENGTH(scKoStndOff01) },
|
| - { scKoPat2, scKoStndOff2, ARRAY_LENGTH(scKoStndOff2) },
|
| - { scKoPat3, scKoStndOff3, ARRAY_LENGTH(scKoStndOff3) },
|
| - { scKoPat4, scKoStndOff45, ARRAY_LENGTH(scKoStndOff45) },
|
| - { scKoPat5, scKoStndOff45, ARRAY_LENGTH(scKoStndOff45) },
|
| - { NULL, NULL, 0 }
|
| -};
|
| -
|
| -typedef struct {
|
| - const char * locale;
|
| - const UChar * text;
|
| - const PatternAndOffsets * patternsAndOffsets;
|
| -} TUSCItem;
|
| -
|
| -static const TUSCItem tuscItems[] = {
|
| - { "root", scKoText, scKoStndPatternsOffsets },
|
| - { "root@collation=search", scKoText, scKoSrchPatternsOffsets },
|
| - { "ko@collation=search", scKoText, scKoSrchPatternsOffsets },
|
| - { NULL, NULL, NULL }
|
| -};
|
| -
|
| -static const UChar dummyPat[] = { 0x0061, 0 };
|
| -
|
| -static void TestUsingSearchCollator(void)
|
| -{
|
| - const TUSCItem * tuscItemPtr;
|
| - for (tuscItemPtr = tuscItems; tuscItemPtr->locale != NULL; tuscItemPtr++) {
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - UCollator* ucol = ucol_open(tuscItemPtr->locale, &status);
|
| - if ( U_SUCCESS(status) ) {
|
| - UStringSearch* usrch = usearch_openFromCollator(dummyPat, -1, tuscItemPtr->text, -1, ucol, NULL, &status);
|
| - if ( U_SUCCESS(status) ) {
|
| - const PatternAndOffsets * patternsOffsetsPtr;
|
| - for ( patternsOffsetsPtr = tuscItemPtr->patternsAndOffsets; patternsOffsetsPtr->pattern != NULL; patternsOffsetsPtr++) {
|
| - usearch_setPattern(usrch, patternsOffsetsPtr->pattern, -1, &status);
|
| - if ( U_SUCCESS(status) ) {
|
| - int32_t offset;
|
| - const int32_t * nextOffsetPtr;
|
| - const int32_t * limitOffsetPtr;
|
| -
|
| - usearch_reset(usrch);
|
| - nextOffsetPtr = patternsOffsetsPtr->offsets;
|
| - limitOffsetPtr = patternsOffsetsPtr->offsets + patternsOffsetsPtr->offsetsLen;
|
| - while (TRUE) {
|
| - offset = usearch_next(usrch, &status);
|
| - if ( U_FAILURE(status) || offset == USEARCH_DONE ) {
|
| - break;
|
| - }
|
| - if ( nextOffsetPtr < limitOffsetPtr ) {
|
| - if (offset != *nextOffsetPtr) {
|
| - log_err("error, locale %s, expected usearch_next %d, got %d\n", tuscItemPtr->locale, *nextOffsetPtr, offset);
|
| - nextOffsetPtr = limitOffsetPtr;
|
| - break;
|
| - }
|
| - nextOffsetPtr++;
|
| - } else {
|
| - log_err("error, locale %s, usearch_next returned more matches than expected\n", tuscItemPtr->locale );
|
| - }
|
| - }
|
| - if ( U_FAILURE(status) ) {
|
| - log_err("error, locale %s, usearch_next failed: %s\n", tuscItemPtr->locale, u_errorName(status) );
|
| - } else if ( nextOffsetPtr < limitOffsetPtr ) {
|
| - log_err("error, locale %s, usearch_next returned fewer matches than expected\n", tuscItemPtr->locale );
|
| - }
|
| -
|
| - status = U_ZERO_ERROR;
|
| - usearch_reset(usrch);
|
| - nextOffsetPtr = patternsOffsetsPtr->offsets + patternsOffsetsPtr->offsetsLen;
|
| - limitOffsetPtr = patternsOffsetsPtr->offsets;
|
| - while (TRUE) {
|
| - offset = usearch_previous(usrch, &status);
|
| - if ( U_FAILURE(status) || offset == USEARCH_DONE ) {
|
| - break;
|
| - }
|
| - if ( nextOffsetPtr > limitOffsetPtr ) {
|
| - nextOffsetPtr--;
|
| - if (offset != *nextOffsetPtr) {
|
| - log_err("error, locale %s, expected usearch_previous %d, got %d\n", tuscItemPtr->locale, *nextOffsetPtr, offset);
|
| - nextOffsetPtr = limitOffsetPtr;
|
| - break;
|
| - }
|
| - } else {
|
| - log_err("error, locale %s, usearch_previous returned more matches than expected\n", tuscItemPtr->locale );
|
| - }
|
| - }
|
| - if ( U_FAILURE(status) ) {
|
| - log_err("error, locale %s, usearch_previous failed: %s\n", tuscItemPtr->locale, u_errorName(status) );
|
| - } else if ( nextOffsetPtr > limitOffsetPtr ) {
|
| - log_err("error, locale %s, usearch_previous returned fewer matches than expected\n", tuscItemPtr->locale );
|
| - }
|
| -
|
| - } else {
|
| - log_err("error, locale %s, usearch_setPattern failed: %s\n", tuscItemPtr->locale, u_errorName(status) );
|
| - }
|
| - }
|
| - usearch_close(usrch);
|
| - } else {
|
| - log_err("error, locale %s, usearch_openFromCollator failed: %s\n", tuscItemPtr->locale, u_errorName(status) );
|
| - }
|
| - ucol_close(ucol);
|
| - } else {
|
| - log_data_err("error, locale %s, ucol_open failed: %s\n", tuscItemPtr->locale, u_errorName(status) );
|
| - }
|
| - }
|
| -}
|
| -
|
| -
|
| -static void TestPCEBuffer_with(const UChar *search, uint32_t searchLen, const UChar *source, uint32_t sourceLen) {
|
| - UErrorCode icuStatus = U_ZERO_ERROR;
|
| - UCollator *coll;
|
| - const char *locale;
|
| - UBreakIterator *ubrk;
|
| - UStringSearch *usearch;
|
| - int32_t match = 0;
|
| -
|
| -
|
| - coll = ucol_openFromShortString( "LSK_AS_CX_EX_FX_HX_NX_S4",
|
| - FALSE,
|
| - NULL,
|
| - &icuStatus );
|
| - if ( U_FAILURE(icuStatus) )
|
| - {
|
| - log_data_err( "ucol_openFromShortString error %s\n" , u_errorName(icuStatus));
|
| - goto exit;
|
| - }
|
| -
|
| - locale = ucol_getLocaleByType( coll,
|
| - ULOC_VALID_LOCALE,
|
| - &icuStatus );
|
| - if ( U_FAILURE(icuStatus) )
|
| - {
|
| - log_err( "ucol_getLocaleByType error %s\n", u_errorName(icuStatus) );
|
| - goto exit;
|
| - }
|
| -
|
| - log_verbose("locale=%s\n", locale);
|
| -
|
| - ubrk = ubrk_open( UBRK_CHARACTER,
|
| - locale,
|
| - source,
|
| - sourceLen,
|
| - &icuStatus );
|
| - if ( U_FAILURE(icuStatus) )
|
| - {
|
| - log_err( "ubrk_open error %s\n", u_errorName(icuStatus) );
|
| - goto exit;
|
| - }
|
| -
|
| - usearch = usearch_openFromCollator( search,
|
| - searchLen,
|
| - source,
|
| - sourceLen,
|
| - coll,
|
| - ubrk,
|
| - &icuStatus );
|
| - if ( U_FAILURE(icuStatus) )
|
| - {
|
| - log_err( "usearch_openFromCollator error %s\n", u_errorName(icuStatus) );
|
| - goto exit;
|
| - }
|
| -
|
| - match = usearch_first( usearch,
|
| - &icuStatus );
|
| - if ( U_FAILURE(icuStatus) )
|
| - {
|
| - log_err( "usearch_first error %s\n", u_errorName(icuStatus) );
|
| - goto exit;
|
| - }
|
| -
|
| - if(match==0) {
|
| - log_verbose("OK: match=%d\n", match);
|
| - } else {
|
| - log_err("Err: match expected 0 got %d\n", match);
|
| - }
|
| -
|
| - usearch_close(usearch);
|
| - ubrk_close(ubrk);
|
| - ucol_close(coll);
|
| -
|
| -exit:
|
| - return;
|
| -}
|
| -
|
| -
|
| -static void TestPCEBuffer_100df(void) {
|
| - UChar search[] =
|
| - { 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 */
|
| - UChar source[] =
|
| - { 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 };
|
| - uint32_t searchLen = sizeof(search)/sizeof(UChar);
|
| - uint32_t sourceLen = sizeof(source)/sizeof(UChar);
|
| - TestPCEBuffer_with(search,searchLen,source,sourceLen);
|
| - }
|
| -
|
| -
|
| -static void TestPCEBuffer_2surr(void) {
|
| - UChar search[] =
|
| - { 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 */
|
| - UChar source[] =
|
| - { 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 };
|
| - uint32_t searchLen = sizeof(search)/sizeof(UChar);
|
| - uint32_t sourceLen = sizeof(source)/sizeof(UChar);
|
| - TestPCEBuffer_with(search,searchLen,source,sourceLen);
|
| -}
|
| -
|
| -static void TestMatchFollowedByIgnorables(void) {
|
| - /* test case for ticket#8482 */
|
| - UChar search[] = { 0x00c9 };
|
| - UChar source[] = { 0x00c9, 0x0000, 0x0041 };
|
| - int32_t searchLen;
|
| - int32_t sourceLen;
|
| - UErrorCode icuStatus = U_ZERO_ERROR;
|
| - UCollator *coll;
|
| - const char *locale;
|
| - UBreakIterator *ubrk;
|
| - UStringSearch *usearch;
|
| - int32_t match = 0;
|
| - int32_t matchLength = 0;
|
| - const int32_t expectedMatchLength = 1;
|
| -
|
| - searchLen = sizeof(search)/sizeof(UChar);
|
| - sourceLen = sizeof(source)/sizeof(UChar);
|
| -
|
| - coll = ucol_openFromShortString("LHR_AN_CX_EX_FX_HX_NX_S3",
|
| - FALSE,
|
| - NULL,
|
| - &icuStatus);
|
| - if (U_FAILURE(icuStatus)) {
|
| - log_data_err("ucol_openFromShortString error - %s\n", u_errorName(icuStatus));
|
| - }
|
| -
|
| - locale = ucol_getLocaleByType(coll,
|
| - ULOC_VALID_LOCALE,
|
| - &icuStatus);
|
| - if (U_FAILURE(icuStatus)) {
|
| - log_data_err("ucol_getLocaleByType error - %s\n", u_errorName(icuStatus));
|
| - }
|
| -
|
| - ubrk = ubrk_open(UBRK_CHARACTER,
|
| - locale,
|
| - source,
|
| - sourceLen,
|
| - &icuStatus);
|
| - if (U_FAILURE(icuStatus)) {
|
| - log_data_err("ubrk_open error - %s\n", u_errorName(icuStatus));
|
| - }
|
| -
|
| - usearch = usearch_openFromCollator(search,
|
| - searchLen,
|
| - source,
|
| - sourceLen,
|
| - coll,
|
| - ubrk,
|
| - &icuStatus);
|
| - if (U_FAILURE(icuStatus)) {
|
| - log_data_err("usearch_openFromCollator error - %s\n", u_errorName(icuStatus));
|
| - }
|
| -
|
| - match = usearch_first(usearch,
|
| - &icuStatus);
|
| - if (U_FAILURE(icuStatus)) {
|
| - log_data_err("usearch_first error - %s\n", u_errorName(icuStatus));
|
| - } else {
|
| -
|
| - log_verbose("match=%d\n", match);
|
| -
|
| - matchLength = usearch_getMatchedLength(usearch);
|
| -
|
| - if (matchLength != expectedMatchLength) {
|
| - log_err("Error: matchLength=%d, expected=%d\n", matchLength, expectedMatchLength);
|
| - }
|
| - }
|
| -
|
| - usearch_close(usearch);
|
| - ubrk_close(ubrk);
|
| - ucol_close(coll);
|
| -}
|
| -
|
| -static void TestIndicPrefixMatch(void)
|
| -{
|
| - int count = 0;
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - open(&status);
|
| - if (U_FAILURE(status)) {
|
| - log_err_status(status, "Unable to open static collators %s\n", u_errorName(status));
|
| - return;
|
| - }
|
| - while (INDICPREFIXMATCH[count].text != NULL) {
|
| - if (!assertEqual(INDICPREFIXMATCH[count])) {
|
| - log_err("Error at test number %d\n", count);
|
| - }
|
| - count ++;
|
| - }
|
| - close();
|
| -}
|
| -
|
| -/**
|
| -* addSearchTest
|
| -*/
|
| -
|
| -void addSearchTest(TestNode** root)
|
| -{
|
| - addTest(root, &TestStart, "tscoll/usrchtst/TestStart");
|
| - addTest(root, &TestOpenClose, "tscoll/usrchtst/TestOpenClose");
|
| - addTest(root, &TestInitialization, "tscoll/usrchtst/TestInitialization");
|
| - addTest(root, &TestBasic, "tscoll/usrchtst/TestBasic");
|
| - addTest(root, &TestNormExact, "tscoll/usrchtst/TestNormExact");
|
| - addTest(root, &TestStrength, "tscoll/usrchtst/TestStrength");
|
| - addTest(root, &TestBreakIterator, "tscoll/usrchtst/TestBreakIterator");
|
| - addTest(root, &TestVariable, "tscoll/usrchtst/TestVariable");
|
| - addTest(root, &TestOverlap, "tscoll/usrchtst/TestOverlap");
|
| - addTest(root, &TestCollator, "tscoll/usrchtst/TestCollator");
|
| - addTest(root, &TestPattern, "tscoll/usrchtst/TestPattern");
|
| - addTest(root, &TestText, "tscoll/usrchtst/TestText");
|
| - addTest(root, &TestCompositeBoundaries,
|
| - "tscoll/usrchtst/TestCompositeBoundaries");
|
| - addTest(root, &TestGetSetOffset, "tscoll/usrchtst/TestGetSetOffset");
|
| - addTest(root, &TestGetSetAttribute,
|
| - "tscoll/usrchtst/TestGetSetAttribute");
|
| - addTest(root, &TestGetMatch, "tscoll/usrchtst/TestGetMatch");
|
| - addTest(root, &TestSetMatch, "tscoll/usrchtst/TestSetMatch");
|
| - addTest(root, &TestReset, "tscoll/usrchtst/TestReset");
|
| - addTest(root, &TestSupplementary, "tscoll/usrchtst/TestSupplementary");
|
| - addTest(root, &TestContraction, "tscoll/usrchtst/TestContraction");
|
| - addTest(root, &TestIgnorable, "tscoll/usrchtst/TestIgnorable");
|
| - addTest(root, &TestCanonical, "tscoll/usrchtst/TestCanonical");
|
| - addTest(root, &TestNormCanonical, "tscoll/usrchtst/TestNormCanonical");
|
| - addTest(root, &TestStrengthCanonical,
|
| - "tscoll/usrchtst/TestStrengthCanonical");
|
| - addTest(root, &TestBreakIteratorCanonical,
|
| - "tscoll/usrchtst/TestBreakIteratorCanonical");
|
| - addTest(root, &TestVariableCanonical,
|
| - "tscoll/usrchtst/TestVariableCanonical");
|
| - addTest(root, &TestOverlapCanonical,
|
| - "tscoll/usrchtst/TestOverlapCanonical");
|
| - addTest(root, &TestCollatorCanonical,
|
| - "tscoll/usrchtst/TestCollatorCanonical");
|
| - addTest(root, &TestPatternCanonical,
|
| - "tscoll/usrchtst/TestPatternCanonical");
|
| - addTest(root, &TestTextCanonical, "tscoll/usrchtst/TestTextCanonical");
|
| - addTest(root, &TestCompositeBoundariesCanonical,
|
| - "tscoll/usrchtst/TestCompositeBoundariesCanonical");
|
| - addTest(root, &TestGetSetOffsetCanonical,
|
| - "tscoll/usrchtst/TestGetSetOffsetCanonical");
|
| - addTest(root, &TestSupplementaryCanonical,
|
| - "tscoll/usrchtst/TestSupplementaryCanonical");
|
| - addTest(root, &TestContractionCanonical,
|
| - "tscoll/usrchtst/TestContractionCanonical");
|
| - addTest(root, &TestEnd, "tscoll/usrchtst/TestEnd");
|
| - addTest(root, &TestNumeric, "tscoll/usrchtst/TestNumeric");
|
| - addTest(root, &TestDiacriticMatch, "tscoll/usrchtst/TestDiacriticMatch");
|
| - addTest(root, &TestForwardBackward, "tscoll/usrchtst/TestForwardBackward");
|
| - addTest(root, &TestSearchForNull, "tscoll/usrchtst/TestSearchForNull");
|
| - addTest(root, &TestStrengthIdentical, "tscoll/usrchtst/TestStrengthIdentical");
|
| - addTest(root, &TestUsingSearchCollator, "tscoll/usrchtst/TestUsingSearchCollator");
|
| - addTest(root, &TestPCEBuffer_100df, "tscoll/usrchtst/TestPCEBuffer/1_00df");
|
| - addTest(root, &TestPCEBuffer_2surr, "tscoll/usrchtst/TestPCEBuffer/2_dfff");
|
| - addTest(root, &TestMatchFollowedByIgnorables, "tscoll/usrchtst/TestMatchFollowedByIgnorables");
|
| - addTest(root, &TestIndicPrefixMatch, "tscoll/usrchtst/TestIndicPrefixMatch");
|
| -}
|
| -
|
| -#endif /* #if !UCONFIG_NO_COLLATION */
|
|
|