blob: ae88ea39a2af7bc6c8e80bdf2134ad1196926c7a [file]
#include <cstddef>
#include <memory>
#include <string>
#include <vector>
#include "CLucene.h"
#include "CLucene/analysis/AnalysisHeader.h"
#include "CLucene/analysis/icu/ICUAnalyzer.h"
#include "CLucene/analysis/icu/ICUTokenizer.h"
#include "CLucene/debug/error.h"
#include "test.h"
using namespace lucene::analysis;
void tokenize(const std::string& s, std::vector<std::string>& datas) {
try {
ICUAnalyzer analyzer;
analyzer.initDict("./icu-dict");
analyzer.set_lowercase(false);
lucene::util::SStringReader<char> reader;
reader.init(s.data(), s.size(), false);
std::unique_ptr<ICUTokenizer> tokenizer;
tokenizer.reset((ICUTokenizer*)analyzer.tokenStream(L"", &reader));
Token t;
while (tokenizer->next(&t)) {
std::string term(t.termBuffer<char>(), t.termLength<char>());
datas.emplace_back(term);
}
} catch (CLuceneError& e) {
std::cout << "error: " << e.what() << ", " << s << std::endl;
assert(false);
}
}
void testICUTokenizer(CuTest* tc) {
std::vector<std::string> datas;
// Chinese text
std::string chineseText =
"今天天气真好,我们一起去公园散步吧。人工智能正在改变我们的生活方式。这本书的内容非常有"
"趣,我推荐给你。";
tokenize(chineseText, datas);
assert(datas.size() == 27);
datas.clear();
// English text
std::string englishText =
"The quick brown fox jumps over the lazy dog. Artificial intelligence is transforming "
"various industries. Reading books can significantly enhance your knowledge.";
tokenize(englishText, datas);
assert(datas.size() == 22);
datas.clear();
// Vietnamese text
std::string vietnameseText =
"Hôm nay thời tiết thật đẹp, chúng ta cùng đi dạo công viên nhé. Trí tuệ nhân tạo đang "
"thay đổi cách sống của chúng ta. Cuốn sách này rất thú vị, tôi muốn giới thiệu cho "
"bạn.";
tokenize(vietnameseText, datas);
assert(datas.size() == 38);
datas.clear();
// Portuguese text
std::string portugueseText =
"O tempo está ótimo hoje, vamos dar um passeio no parque. A inteligência artificial "
"está transformando nossas vidas. Este livro é muito interessante, eu recomendo para "
"você.";
tokenize(portugueseText, datas);
assert(datas.size() == 27);
datas.clear();
// Indonesian text
std::string indonesianText =
"Hari ini cuaca sangat bagus, mari kita jalan-jalan ke taman. Kecerdasan buatan sedang "
"mengubah cara hidup kita. Buku ini sangat menarik, mari kita rekomendasikan.";
tokenize(indonesianText, datas);
assert(datas.size() == 25);
datas.clear();
// Spanish text
std::string spanishText =
"Hoy hace muy buen tiempo, vamos a pasear por el parque. La inteligencia artificial "
"está cambiando nuestras vidas. Este libro es muy interesante, te lo recomiendo.";
tokenize(spanishText, datas);
assert(datas.size() == 26);
datas.clear();
// Thai text
std::string thaiText =
"วันนี้อากาศดีมาก "
"เราไปเดินเล่นที่สวนสาธารณะกันเถอะปัญญาประดิษฐ์กำลังเปลี่ยนวิถีชีวิตของเราหนังสือเล่มนี้น่าสนใจมาก "
"ฉันอยากแนะนำให้คุณอ่าน";
tokenize(thaiText, datas);
assert(datas.size() == 34);
datas.clear();
// Hindi text
std::string hindiText =
"आज मौसम बहुत अच्छा है, चलो पार्क में टहलने चलते हैं। कृत्रिम बुद्धिमत्ता हमारे जीवन को बदल रही है। यह "
"किताब बहुत दिलचस्प है, मैं इसे आपको सुझाता हूं।";
tokenize(hindiText, datas);
assert(datas.size() == 29);
datas.clear();
}
void testICUTokenizerEmptyText(CuTest* tc) {
std::vector<std::string> datas;
std::string emptyText = "";
tokenize(emptyText, datas);
assert(datas.size() == 0);
}
void testICUTokenizerSingleWord(CuTest* tc) {
std::vector<std::string> datas;
// Chinese word
std::string chineseText = "天气";
tokenize(chineseText, datas);
assert(datas.size() == 1);
datas.clear();
// English word
std::string englishText = "weather";
tokenize(englishText, datas);
assert(datas.size() == 1);
datas.clear();
// Arabic word
std::string arabicText = "الذكاء";
tokenize(arabicText, datas);
assert(datas.size() == 1);
}
void testICUTokenizerMultipleSpaces(CuTest* tc) {
std::vector<std::string> datas;
std::string multipleSpacesText = "The quick brown fox";
tokenize(multipleSpacesText, datas);
assert(datas.size() == 4);
}
void testICUTokenizerPunctuation(CuTest* tc) {
std::vector<std::string> datas;
std::string textWithPunctuation = "Hello, world! How's it going?";
tokenize(textWithPunctuation, datas);
assert(datas.size() == 5);
}
void testICUTokenizerMixedLanguage(CuTest* tc) {
std::vector<std::string> datas;
std::string mixedText = "Hello, 今天天气真好!";
tokenize(mixedText, datas);
assert(datas.size() == 4);
}
void testICUTokenizerUnicode(CuTest* tc) {
std::vector<std::string> datas;
std::string unicodeText = "你好,世界! 😊🌍";
tokenize(unicodeText, datas);
assert(datas.size() == 4);
}
void testICUTokenizerNumericText(CuTest* tc) {
std::vector<std::string> datas;
std::string numericText = "The price is 100 dollars.";
tokenize(numericText, datas);
assert(datas.size() == 5);
}
void testICUTokenizerLongText(CuTest* tc) {
std::vector<std::string> datas;
std::string longText =
"Artificial intelligence is rapidly changing various industries around the world. "
"From healthcare to finance, it is transforming the way we work, live, and interact "
"with technology.";
tokenize(longText, datas);
assert(datas.size() == 26);
}
void testICUTokenizerSpecialCharacters(CuTest* tc) {
std::vector<std::string> datas;
std::string specialCharsText = "@#$%^&*()_+{}[]|:;\"'<>,.?/~`";
tokenize(specialCharsText, datas);
assert(datas.size() == 0);
}
void testICUTokenizerLongWords(CuTest* tc) {
std::vector<std::string> datas;
std::string longWordText = "hippopotomonstrosesquipedaliophobia";
tokenize(longWordText, datas);
assert(datas.size() == 1);
}
void testICUArmenian(CuTest* tc) {
std::vector<std::string> datas;
std::string longWordText =
"Վիքիպեդիայի 13 միլիոն հոդվածները (4,600` հայերեն վիքիպեդիայում) գրվել են կամավորների "
"կողմից ու համարյա բոլոր հոդվածները կարող է խմբագրել ցանկաց մարդ ով կարող է բացել "
"Վիքիպեդիայի կայքը։";
tokenize(longWordText, datas);
std::vector<std::string> result = {
"Վիքիպեդիայի", "13", "միլիոն", "հոդվածները", "4,600", "հայերեն",
"վիքիպեդիայում", "գրվել", "են", "կամավորների", "կողմից", "ու",
"համարյա", "բոլոր", "հոդվածները", "կարող", "է", "խմբագրել",
"ցանկաց", "մարդ", "ով", "կարող", "է", "բացել",
"Վիքիպեդիայի", "կայքը"};
for (size_t i = 0; i < datas.size(); i++) {
assert(datas[i] == result[i]);
}
}
void testICUAmharic(CuTest* tc) {
std::vector<std::string> datas;
std::string longWordText = "ዊኪፔድያ የባለ ብዙ ቋንቋ የተሟላ ትክክለኛና ነጻ መዝገበ ዕውቀት (ኢንሳይክሎፒዲያ) ነው። ማንኛውም";
tokenize(longWordText, datas);
std::vector<std::string> result = {"ዊኪፔድያ", "የባለ", "ብዙ", "ቋንቋ", "የተሟላ", "ትክክለኛና",
"ነጻ", "መዝገበ", "ዕውቀት", "ኢንሳይክሎፒዲያ", "ነው", "ማንኛውም"};
for (size_t i = 0; i < datas.size(); i++) {
assert(datas[i] == result[i]);
}
}
void testICUArabic(CuTest* tc) {
std::vector<std::string> datas;
std::string longWordText =
"الفيلم الوثائقي الأول عن ويكيبيديا يسمى \"الحقيقة بالأرقام: قصة ويكيبيديا\" "
"(بالإنجليزية: Truth in Numbers: The Wikipedia Story)، سيتم إطلاقه في 2008.";
tokenize(longWordText, datas);
std::vector<std::string> result = {
"الفيلم", "الوثائقي", "الأول", "عن", "ويكيبيديا", "يسمى", "الحقيقة",
"بالأرقام", "قصة", "ويكيبيديا", "بالإنجليزية", "Truth", "in", "Numbers",
"The", "Wikipedia", "Story", "سيتم", "إطلاقه", "في", "2008"};
for (size_t i = 0; i < datas.size(); i++) {
assert(datas[i] == result[i]);
}
}
void testICUAramaic(CuTest* tc) {
std::vector<std::string> datas;
std::string longWordText =
"ܘܝܩܝܦܕܝܐ (ܐܢܓܠܝܐ: Wikipedia) ܗܘ ܐܝܢܣܩܠܘܦܕܝܐ ܚܐܪܬܐ ܕܐܢܛܪܢܛ ܒܠܫܢ̈ܐ ܣܓܝܐ̈ܐ܂ ܫܡܗ ܐܬܐ ܡܢ "
"ܡ̈ܠܬܐ ܕ\"ܘܝܩܝ\" ܘ\"ܐܝܢܣܩܠܘܦܕܝܐ\"܀";
tokenize(longWordText, datas);
std::vector<std::string> result = {
"ܘܝܩܝܦܕܝܐ", "ܐܢܓܠܝܐ", "Wikipedia", "ܗܘ", "ܐܝܢܣܩܠܘܦܕܝܐ", "ܚܐܪܬܐ",
"ܕܐܢܛܪܢܛ", "ܒܠܫܢ̈ܐ", "ܣܓܝܐ̈ܐ", "ܫܡܗ", "ܐܬܐ", "ܡܢ",
"ܡ̈ܠܬܐ", "ܕ", "ܘܝܩܝ", "ܘ", "ܐܝܢܣܩܠܘܦܕܝܐ"};
for (size_t i = 0; i < datas.size(); i++) {
assert(datas[i] == result[i]);
}
}
void testICUBengali(CuTest* tc) {
std::vector<std::string> datas;
std::string longWordText =
"এই বিশ্বকোষ পরিচালনা করে উইকিমিডিয়া ফাউন্ডেশন (একটি অলাভজনক সংস্থা)। উইকিপিডিয়ার শুরু ১৫ "
"জানুয়ারি, ২০০১ সালে। এখন পর্যন্ত ২০০টিরও বেশী ভাষায় উইকিপিডিয়া রয়েছে।܀";
tokenize(longWordText, datas);
std::vector<std::string> result = {"এই", "বিশ্বকোষ", "পরিচালনা", "করে", "উইকিমিডিয়া",
"ফাউন্ডেশন", "একটি", "অলাভজনক", "সংস্থা", "উইকিপিডিয়ার",
"শুরু", "১৫", "জানুয়ারি", "২০০১", "সালে",
"এখন", "পর্যন্ত", "২০০টিরও", "বেশী", "ভাষায়",
"উইকিপিডিয়া", "রয়েছে"};
for (size_t i = 0; i < datas.size(); i++) {
assert(datas[i] == result[i]);
}
}
void testICUFarsi(CuTest* tc) {
std::vector<std::string> datas;
std::string longWordText =
"ویکی پدیای انگلیسی در تاریخ ۲۵ دی ۱۳۷۹ به صورت مکملی برای دانشنامهٔ تخصصی نوپدیا نوشته "
"شد.";
tokenize(longWordText, datas);
std::vector<std::string> result = {"ویکی", "پدیای", "انگلیسی", "در", "تاریخ", "۲۵",
"دی", "۱۳۷۹", "به", "صورت", "مکملی", "برای",
"دانشنامهٔ", "تخصصی", "نوپدیا", "نوشته", "شد"};
for (size_t i = 0; i < datas.size(); i++) {
assert(datas[i] == result[i]);
}
}
void testICUGreek(CuTest* tc) {
std::vector<std::string> datas;
std::string longWordText =
"Γράφεται σε συνεργασία από εθελοντές με το λογισμικό wiki, κάτι που σημαίνει ότι "
"άρθρα μπορεί να προστεθούν ή να αλλάξουν από τον καθένα.";
tokenize(longWordText, datas);
std::vector<std::string> result = {"Γράφεται", "σε", "συνεργασία", "από", "εθελοντές",
"με", "το", "λογισμικό", "wiki", "κάτι",
"που", "σημαίνει", "ότι", "άρθρα", "μπορεί",
"να", "προστεθούν", "ή", "να", "αλλάξουν",
"από", "τον", "καθένα"};
for (size_t i = 0; i < datas.size(); i++) {
assert(datas[i] == result[i]);
}
}
void testICUKhmer(CuTest* tc) {
std::vector<std::string> datas;
std::string longWordText = "ផ្ទះស្កឹមស្កៃបីបួនខ្នងនេះ";
tokenize(longWordText, datas);
std::vector<std::string> result = {"ផ្ទះ", "ស្កឹមស្កៃ", "បី", "បួន", "ខ្នង", "នេះ"};
for (size_t i = 0; i < datas.size(); i++) {
assert(datas[i] == result[i]);
}
}
void testICULao(CuTest* tc) {
std::vector<std::string> datas;
std::string longWordText = "ກວ່າດອກ ພາສາລາວ";
tokenize(longWordText, datas);
std::vector<std::string> result = {"ກວ່າ", "ດອກ", "ພາສາ", "ລາວ"};
for (size_t i = 0; i < datas.size(); i++) {
assert(datas[i] == result[i]);
}
}
void testICUMyanmar(CuTest* tc) {
std::vector<std::string> datas;
std::string longWordText = "သက်ဝင်လှုပ်ရှားစေပြီး";
tokenize(longWordText, datas);
std::vector<std::string> result = {"သက်ဝင်", "လှုပ်ရှား", "စေ", "ပြီး"};
for (size_t i = 0; i < datas.size(); i++) {
assert(datas[i] == result[i]);
}
}
void testICUThai(CuTest* tc) {
std::vector<std::string> datas;
std::string longWordText = "การที่ได้ต้องแสดงว่างานดี. แล้วเธอจะไปไหน? ๑๒๓๔";
tokenize(longWordText, datas);
std::vector<std::string> result = {"การ", "ที่", "ได้", "ต้อง", "แสดง", "ว่า", "งาน",
"ดี", "แล้ว", "เธอ", "จะ", "ไป", "ไหน", "๑๒๓๔"};
for (size_t i = 0; i < datas.size(); i++) {
assert(datas[i] == result[i]);
}
}
void testICUTibetan(CuTest* tc) {
std::vector<std::string> datas;
std::string longWordText = "སྣོན་མཛོད་དང་ལས་འདིས་བོད་ཡིག་མི་ཉམས་གོང་འཕེལ་དུ་གཏོང་བར་ཧ་ཅང་དགེ་མཚན་མཆིས་སོ། །";
tokenize(longWordText, datas);
std::vector<std::string> result = {"སྣོན", "མཛོད", "དང", "ལས", "འདིས", "བོད", "ཡིག",
"མི", "ཉམས", "གོང", "འཕེལ", "དུ", "གཏོང", "བར",
"ཧ", "ཅང", "དགེ", "མཚན", "མཆིས", "སོ"};
for (size_t i = 0; i < datas.size(); i++) {
assert(datas[i] == result[i]);
}
}
void testICUChinese(CuTest* tc) {
std::vector<std::string> datas;
std::string longWordText = "我是中国人。 1234 Tests ";
tokenize(longWordText, datas);
std::vector<std::string> result = {"我是", "中国人", "1234", "Tests"};
for (size_t i = 0; i < datas.size(); i++) {
assert(datas[i] == result[i]);
}
}
void testICUHebrew(CuTest* tc) {
{
std::vector<std::string> datas;
std::string longWordText = "דנקנר תקף את הדו\"ח";
tokenize(longWordText, datas);
std::vector<std::string> result = {"דנקנר", "תקף", "את", "הדו\"ח"};
for (size_t i = 0; i < datas.size(); i++) {
assert(datas[i] == result[i]);
}
}
{
std::vector<std::string> datas;
std::string longWordText = "חברת בת של מודי'ס";
tokenize(longWordText, datas);
std::vector<std::string> result = {"חברת", "בת", "של", "מודי'ס"};
for (size_t i = 0; i < datas.size(); i++) {
assert(datas[i] == result[i]);
}
}
}
void testICUEmpty(CuTest* tc) {
std::vector<std::string> datas;
std::string longWordText = " . ";
tokenize(longWordText, datas);
std::vector<std::string> result = {};
for (size_t i = 0; i < datas.size(); i++) {
assert(datas[i] == result[i]);
}
}
void testICULUCENE1545(CuTest* tc) {
std::vector<std::string> datas;
std::string longWordText = "moͤchte";
tokenize(longWordText, datas);
std::vector<std::string> result = {"moͤchte"};
for (size_t i = 0; i < datas.size(); i++) {
assert(datas[i] == result[i]);
}
}
void testICUAlphanumericSA(CuTest* tc) {
std::vector<std::string> datas;
std::string longWordText = "B2B 2B";
tokenize(longWordText, datas);
std::vector<std::string> result = {"B2B", "2B"};
for (size_t i = 0; i < datas.size(); i++) {
assert(datas[i] == result[i]);
}
}
void testICUDelimitersSA(CuTest* tc) {
std::vector<std::string> datas;
std::string longWordText = "some-dashed-phrase dogs,chase,cats ac/dc";
tokenize(longWordText, datas);
std::vector<std::string> result = {"some", "dashed", "phrase", "dogs",
"chase", "cats", "ac", "dc"};
for (size_t i = 0; i < datas.size(); i++) {
assert(datas[i] == result[i]);
}
}
void testICUApostrophesSA(CuTest* tc) {
std::vector<std::string> datas;
std::string longWordText = "O'Reilly you're she's Jim's don't O'Reilly's";
tokenize(longWordText, datas);
std::vector<std::string> result = {"O'Reilly", "you're", "she's",
"Jim's", "don't", "O'Reilly's"};
for (size_t i = 0; i < datas.size(); i++) {
assert(datas[i] == result[i]);
}
}
void testICUNumericSA(CuTest* tc) {
std::vector<std::string> datas;
std::string longWordText = "21.35 R2D2 C3PO 216.239.63.104 216.239.63.104";
tokenize(longWordText, datas);
std::vector<std::string> result = {"21.35", "R2D2", "C3PO", "216.239.63.104", "216.239.63.104"};
for (size_t i = 0; i < datas.size(); i++) {
assert(datas[i] == result[i]);
}
}
void testICUTextWithNumbersSA(CuTest* tc) {
std::vector<std::string> datas;
std::string longWordText = "David has 5000 bones";
tokenize(longWordText, datas);
std::vector<std::string> result = {"David", "has", "5000", "bones"};
for (size_t i = 0; i < datas.size(); i++) {
assert(datas[i] == result[i]);
}
}
void testICUVariousTextSA(CuTest* tc) {
std::vector<std::string> datas;
std::string longWordText =
"C embedded developers wanted foo bar FOO BAR foo bar . FOO <> BAR \"QUOTED\" "
"word";
tokenize(longWordText, datas);
std::vector<std::string> result = {"C", "embedded", "developers", "wanted", "foo",
"bar", "FOO", "BAR", "foo", "bar",
"FOO", "BAR", "QUOTED", "word"};
for (size_t i = 0; i < datas.size(); i++) {
assert(datas[i] == result[i]);
}
}
void testICUKoreanSA(CuTest* tc) {
std::vector<std::string> datas;
std::string longWordText = "안녕하세요 한글입니다";
tokenize(longWordText, datas);
std::vector<std::string> result = {"안녕하세요", "한글입니다"};
for (size_t i = 0; i < datas.size(); i++) {
assert(datas[i] == result[i]);
}
}
void testICUReusableTokenStream(CuTest* tc) {
std::vector<std::string> datas;
std::string longWordText = "སྣོན་མཛོད་དང་ལས་འདིས་བོད་ཡིག་མི་ཉམས་གོང་འཕེལ་དུ་གཏོང་བར་ཧ་ཅང་དགེ་མཚན་མཆིས་སོ། །";
tokenize(longWordText, datas);
std::vector<std::string> result = {"སྣོན", "མཛོད", "དང", "ལས", "འདིས", "བོད", "ཡིག",
"མི", "ཉམས", "གོང", "འཕེལ", "དུ", "གཏོང", "བར",
"ཧ", "ཅང", "དགེ", "མཚན", "མཆིས", "སོ"};
for (size_t i = 0; i < datas.size(); i++) {
assert(datas[i] == result[i]);
}
}
void testICUOffsets(CuTest* tc) {
std::vector<std::string> datas;
std::string longWordText = "David has 5000 bones";
tokenize(longWordText, datas);
std::vector<std::string> result = {"David", "has", "5000", "bones"};
for (size_t i = 0; i < datas.size(); i++) {
assert(datas[i] == result[i]);
}
}
void testICUKorean(CuTest* tc) {
std::vector<std::string> datas;
std::string longWordText = "훈민정음";
tokenize(longWordText, datas);
std::vector<std::string> result = {"훈민정음"};
for (size_t i = 0; i < datas.size(); i++) {
assert(datas[i] == result[i]);
}
}
void testICUJapanese(CuTest* tc) {
std::vector<std::string> datas;
std::string longWordText = "仮名遣い カタカナ";
tokenize(longWordText, datas);
std::vector<std::string> result = {"仮名遣い", "カタカナ"};
for (size_t i = 0; i < datas.size(); i++) {
assert(datas[i] == result[i]);
}
}
void testICUEmoji(CuTest* tc) {
std::vector<std::string> datas;
std::string longWordText =
"💩 💩💩 👩‍❤️‍👩 👨🏼‍⚕️ 🇺🇸🇺🇸 #️⃣ 3️⃣ "
"🏴󠁧󠁢󠁥󠁮󠁧󠁿";
tokenize(longWordText, datas);
std::vector<std::string> result = {
"💩", "💩", "💩", "👩‍❤️‍👩", "👨🏼‍⚕️", "🇺🇸",
"🇺🇸", "#️⃣", "3️⃣", "🏴󠁧󠁢󠁥󠁮󠁧󠁿"};
for (size_t i = 0; i < datas.size(); i++) {
assert(datas[i] == result[i]);
}
}
void testICUEmojiTokenization(CuTest* tc) {
std::vector<std::string> datas;
std::string longWordText = "poo💩poo 💩中國💩";
tokenize(longWordText, datas);
std::vector<std::string> result = {"poo", "💩", "poo", "💩", "中國", "💩"};
for (size_t i = 0; i < datas.size(); i++) {
assert(datas[i] == result[i]);
}
}
void testICUScriptExtensions(CuTest* tc) {
std::vector<std::string> datas;
std::string longWordText = "𑅗० 𑅗ा 𑅗᪾";
tokenize(longWordText, datas);
std::vector<std::string> result = {"𑅗०", "𑅗ा", "𑅗᪾"};
for (size_t i = 0; i < datas.size(); i++) {
assert(datas[i] == result[i]);
}
}
CuSuite* testICU(void) {
CuSuite* suite = CuSuiteNew(_T("CLucene ICU Test"));
SUITE_ADD_TEST(suite, testICUTokenizer);
SUITE_ADD_TEST(suite, testICUTokenizerEmptyText);
SUITE_ADD_TEST(suite, testICUTokenizerSingleWord);
SUITE_ADD_TEST(suite, testICUTokenizerSingleWord);
SUITE_ADD_TEST(suite, testICUTokenizerMultipleSpaces);
SUITE_ADD_TEST(suite, testICUTokenizerPunctuation);
SUITE_ADD_TEST(suite, testICUTokenizerMixedLanguage);
SUITE_ADD_TEST(suite, testICUTokenizerUnicode);
SUITE_ADD_TEST(suite, testICUTokenizerNumericText);
SUITE_ADD_TEST(suite, testICUTokenizerLongText);
SUITE_ADD_TEST(suite, testICUTokenizerSpecialCharacters);
SUITE_ADD_TEST(suite, testICUTokenizerLongWords);
SUITE_ADD_TEST(suite, testICUArmenian);
SUITE_ADD_TEST(suite, testICUAmharic);
SUITE_ADD_TEST(suite, testICUArabic);
SUITE_ADD_TEST(suite, testICUAramaic);
SUITE_ADD_TEST(suite, testICUBengali);
SUITE_ADD_TEST(suite, testICUFarsi);
SUITE_ADD_TEST(suite, testICUGreek);
SUITE_ADD_TEST(suite, testICUKhmer);
SUITE_ADD_TEST(suite, testICULao);
SUITE_ADD_TEST(suite, testICUMyanmar);
SUITE_ADD_TEST(suite, testICUThai);
SUITE_ADD_TEST(suite, testICUTibetan);
SUITE_ADD_TEST(suite, testICUChinese);
SUITE_ADD_TEST(suite, testICUHebrew);
SUITE_ADD_TEST(suite, testICUEmpty);
SUITE_ADD_TEST(suite, testICULUCENE1545);
SUITE_ADD_TEST(suite, testICUAlphanumericSA);
SUITE_ADD_TEST(suite, testICUDelimitersSA);
SUITE_ADD_TEST(suite, testICUApostrophesSA);
SUITE_ADD_TEST(suite, testICUNumericSA);
SUITE_ADD_TEST(suite, testICUTextWithNumbersSA);
SUITE_ADD_TEST(suite, testICUVariousTextSA);
SUITE_ADD_TEST(suite, testICUKoreanSA);
SUITE_ADD_TEST(suite, testICUReusableTokenStream);
SUITE_ADD_TEST(suite, testICUOffsets);
SUITE_ADD_TEST(suite, testICUKorean);
SUITE_ADD_TEST(suite, testICUJapanese);
SUITE_ADD_TEST(suite, testICUEmoji);
SUITE_ADD_TEST(suite, testICUEmojiTokenization);
SUITE_ADD_TEST(suite, testICUScriptExtensions);
return suite;
}