test-fts-filter.c revision bf698b98d3a3a1eced66cc682c449f23bf2b67d0
bcb4e51a409d94ae670de96afb8483a4f7855294Stephan Bosch/* Copyright (c) 2014-2015 Dovecot authors, see the included COPYING file */
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomistatic const char *const stopword_settings[] = {"stopwords_dir", TEST_STOPWORDS_DIR, NULL};
4fbe0d10901a80b27aacc9d9e6848e30e5fe727dAki Tuomistatic struct fts_language english_language = { .name = "en" };
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomistatic void test_fts_filter_find(void)
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi test_assert(fts_filter_find("stopwords") == fts_filter_stopwords);
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi test_assert(fts_filter_find("snowball") == fts_filter_stemmer_snowball);
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi test_assert(fts_filter_find("normalizer-icu") == fts_filter_normalizer_icu);
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi test_assert(fts_filter_find("lowercase") == fts_filter_lowercase);
98bc2ecdbfd4f2f20c3a5e96ae445072fbe22223Aki Tuomi const char *input;
98bc2ecdbfd4f2f20c3a5e96ae445072fbe22223Aki Tuomi const char *output;
03c6532fe7aa3ddae23c99ff6bec78d8dd2e8165Aki Tuomi const char *error;
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi const char *token;
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi unsigned int i;
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi test_assert(fts_filter_create(fts_filter_lowercase, NULL, &english_language, NULL, &filter, &error) == 0);
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi test_assert_idx(fts_filter_filter(filter, &token, &error) > 0 &&
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi const char *error;
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi const char *input[] = {"an", "elephant", "and", "a", "bear",
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi const char *output[] = {NULL, "elephant", NULL, NULL, "bear",
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi const char *token;
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi test_assert(fts_filter_create(fts_filter_stopwords, NULL, &english_language, stopword_settings, &filter, &error) == 0);
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi if (ret <= 0) {
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi const struct fts_language finnish = { .name = "fi" };
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi const char *error;
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi const char *input[] = {"olla", "vaiko", "eik\xC3\xB6", "olla",
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi const char *output[] = {NULL, "vaiko", "eik\xC3\xB6", NULL, NULL,
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi const char *input2[] =
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi {"kuka", "kenet", "keneen", "testi", "eiv\xC3\xA4t", NULL};
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi const char *output2[] = {NULL, NULL, NULL, "testi", NULL};
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi const char *token;
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi test_assert(fts_filter_create(fts_filter_stopwords, NULL, &finnish, stopword_settings, &filter, &error) == 0);
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi if (ret <= 0) {
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi test_assert(fts_filter_create(fts_filter_stopwords, NULL, &finnish, stopword_settings, &filter, &error) == 0);
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi if (ret <= 0) {
097dbdf543bc5d1689c5570f5faaec1e864e3a87Aki Tuomi const struct fts_language french = { .name = "fr" };
097dbdf543bc5d1689c5570f5faaec1e864e3a87Aki Tuomi const char *error;
097dbdf543bc5d1689c5570f5faaec1e864e3a87Aki Tuomi const char *input[] = {"e\xC3\xBBt", "soyez", "soi", "peut", "que",
097dbdf543bc5d1689c5570f5faaec1e864e3a87Aki Tuomi const char *output[] = {NULL, NULL, NULL, "peut", NULL,
097dbdf543bc5d1689c5570f5faaec1e864e3a87Aki Tuomi const char *token;
097dbdf543bc5d1689c5570f5faaec1e864e3a87Aki Tuomi test_assert(fts_filter_create(fts_filter_stopwords, NULL, &french, stopword_settings, &filter, &error) == 0);
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi if (ret <= 0) {
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomistatic void test_fts_filter_stopwords_fail_lazy_init(void)
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi const struct fts_language unknown = { .name = "bebobidoop" };
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi test_begin("fts filter stopwords, fail filter() (lazy init)");
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi test_assert(fts_filter_create(fts_filter_stopwords, NULL, &unknown, stopword_settings, &filter, &error) == 0);
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi test_assert(fts_filter_filter(filter, &token, &error) < 0 && error != NULL);
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomistatic void test_fts_filter_stemmer_snowball_stem_english(void)
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi const char *error;
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi const char * const tokens[] = {
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi "dries" ,"friendlies", "All", "human", "beings", "are",
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi "born", "free", "and", "equal", "in", "dignity", "and",
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi "rights", "They", "are", "endowed", "with", "reason", "and",
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi "conscience", "and", "should", "act", "towards", "one",
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi "another", "in", "a", "spirit", "of", "brotherhood", NULL};
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi const char * const bases[] = {
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi "dri" ,"friend", "All", "human", "be", "are", "born", "free",
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi "and", "equal", "in", "digniti", "and", "right", "They", "are",
097dbdf543bc5d1689c5570f5faaec1e864e3a87Aki Tuomi "endow", "with", "reason", "and", "conscienc", "and", "should",
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi "act", "toward", "one", "anoth", "in", "a", "spirit", "of",
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi const char * const *tpp;
a371ea8bd48d45548cd7aa16d4f5aeb38ba48c91Aki Tuomi const char * const *bpp;
a371ea8bd48d45548cd7aa16d4f5aeb38ba48c91Aki Tuomi test_assert(fts_filter_create(fts_filter_stemmer_snowball, NULL, &english_language, NULL, &stemmer, &error) == 0);
a371ea8bd48d45548cd7aa16d4f5aeb38ba48c91Aki Tuomi test_assert(fts_filter_filter(stemmer, &token, &error) > 0);
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomistatic void test_fts_filter_stemmer_snowball_stem_french(void)
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi const char *error;
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi const char * const tokens[] = {
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi "Tous", "les", "\xC3\xAAtres", "humains", "naissent",
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi "libres", "et", "\xC3\xA9gaux", "en", "dignit\xC3\xA9",
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi const char * const bases[] = {
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi "Tous" ,"le", "\xC3\xAAtre", "humain", "naissent", "libr", "et",
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi "\xC3\xA9gal", "en", "dignit", "et", "en", "droit", NULL};
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi const char * const *tpp;
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi const char * const *bpp;
e6ba63471b1451b48e1185492c33d7bf58be884dAki Tuomi test_assert(fts_filter_create(fts_filter_stemmer_snowball, NULL, &language, NULL, &stemmer, &error) == 0);
824ca2373b872449b6b6ce29707c02c0d810eb74Stephan Bosch test_assert(fts_filter_filter(stemmer, &token, &error) > 0);
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomistatic void test_fts_filter_stopwords_stemmer_eng(void)
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi const char *error;
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi const char * const tokens[] = {
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi "dries" ,"friendlies", "All", "human", "beings", "are",
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi "born", "free", "and", "equal", "in", "dignity", "and",
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi "rights", "They", "are", "endowed", "with", "reason", "and",
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi "conscience", "and", "should", "act", "towards", "one",
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi "another", "in", "a", "spirit", "of", "brotherhood", NULL};
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi const char * const bases[] = {
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi "dri" ,"friend", "All", "human", "be", NULL, "born", "free",
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi NULL, "equal", NULL, "digniti", NULL, "right", "They", NULL,
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi "endow", NULL, "reason", NULL, "conscienc", NULL, "should",
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi "act", "toward", "one", "anoth", NULL, NULL, "spirit", NULL,
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi const char * const *tpp;
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi const char * const *bpp;
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi test_begin("fts filters stopwords and stemming chained, English");
03c6532fe7aa3ddae23c99ff6bec78d8dd2e8165Aki Tuomi test_assert(fts_filter_create(fts_filter_stopwords, NULL, &english_language, stopword_settings, &filter, &error) == 0);
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi test_assert(fts_filter_create(fts_filter_stemmer_snowball, filter, &english_language, NULL, &stemmer, &error) == 0);
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomistatic void test_fts_filter_normalizer_swedish_short(void)
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi const char *input[] = {
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi "Vem kan segla f\xC3\xB6rutan vind?\n"
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi "\xC3\x85\xC3\x84\xC3\x96\xC3\xB6\xC3\xA4\xC3\xA5"
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi const char *expected_output[] = {
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi "vem kan segla forutan vind?\naaooaa"
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi const char * const settings[] =
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi {"id", "Any-Lower; NFKD; [: Nonspacing Mark :] Remove; NFC", NULL};
d9b6d24bfa1354757fe9bc68205c0323e40abce3Stephan Bosch unsigned int i;
d9b6d24bfa1354757fe9bc68205c0323e40abce3Stephan Bosch test_begin("fts filter normalizer Swedish short text");
d9b6d24bfa1354757fe9bc68205c0323e40abce3Stephan Bosch test_assert(fts_filter_create(fts_filter_normalizer_icu, NULL, NULL, settings, &norm, &error) == 0);
d9b6d24bfa1354757fe9bc68205c0323e40abce3Stephan Bosch test_assert_idx(fts_filter_filter(norm, &token, &error) == 1, i);
d9b6d24bfa1354757fe9bc68205c0323e40abce3Stephan Bosch test_assert_idx(null_strcmp(token, expected_output[i]) == 0, i);
824ca2373b872449b6b6ce29707c02c0d810eb74Stephan Boschstatic void test_fts_filter_normalizer_swedish_short_default_id(void)
824ca2373b872449b6b6ce29707c02c0d810eb74Stephan Bosch const char *input[] = {
824ca2373b872449b6b6ce29707c02c0d810eb74Stephan Bosch "Vem kan segla f\xC3\xB6rutan vind?\n"
824ca2373b872449b6b6ce29707c02c0d810eb74Stephan Bosch "\xC3\x85\xC3\x84\xC3\x96\xC3\xB6\xC3\xA4\xC3\xA5"
097dbdf543bc5d1689c5570f5faaec1e864e3a87Aki Tuomi const char *expected_output[] = {
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi "vem kan segla forutan vind?\naaooaa"
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi unsigned int i;
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi test_begin("fts filter normalizer Swedish short text using default ID");
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi test_assert(fts_filter_create(fts_filter_normalizer_icu, NULL, NULL, NULL, &norm, &error) == 0);
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi test_assert_idx(fts_filter_filter(norm, &token, &error) == 1, i);
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi test_assert_idx(null_strcmp(token, expected_output[i]) == 0, i);
0d1b8b6bec79746c5d89d57dd8c1688946bd9237Josef 'Jeff' Sipek/* UDHRDIR comes from Automake AM_CPPFLAGS */
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomistatic void test_fts_filter_normalizer_french(void)
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi const char * const settings[] =
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi {"id", "Any-Lower; NFKD; [: Nonspacing Mark :] Remove", NULL};
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi const char *tokens;
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi const unsigned char correct_digest[] = {
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi udhr_path = t_strconcat(UDHRDIR, UDHR_FRA_NAME, NULL);
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi test_assert(fts_filter_create(fts_filter_normalizer_icu, NULL, NULL, settings, &norm, &error) == 0);
1be27c35ea17fccd83c54e2acc66eb8c44d1a8feAki Tuomi if (fts_filter_filter(norm, &tokens, &error) != 1){
204ee6ed414f5e4eeb6f6c10763b55daf56f11acJosef 'Jeff' Sipek sha512_loop(&ctx, tokens, strlen(tokens));
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi sizeof(sha512_digest)) == 0);
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi /* test just a couple of these */
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi static const char *empty_tokens[] = {
204ee6ed414f5e4eeb6f6c10763b55daf56f11acJosef 'Jeff' Sipek const char * const settings[] =
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi {"id", "Any-Lower; NFKD; [: Nonspacing Mark :] Remove", NULL};
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi const char *error;
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi unsigned int i;
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi test_assert(fts_filter_create(fts_filter_normalizer_icu, NULL, NULL, settings, &norm, &error) == 0);
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi test_assert_idx(fts_filter_filter(norm, &token, &error) == 0, i);
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomistatic void test_fts_filter_normalizer_baddata(void)
1be27c35ea17fccd83c54e2acc66eb8c44d1a8feAki Tuomi const char * const settings[] =
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi {"id", "Any-Lower; NFKD; [: Nonspacing Mark :] Remove", NULL};
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi unsigned int i;
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi test_assert(fts_filter_create(fts_filter_normalizer_icu, NULL, NULL, settings, &norm, &error) == 0);
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi test_assert_idx(fts_filter_filter(norm, &token, &error) >= 0, i);
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi test_assert(fts_filter_filter(norm, &token, &error) >= 0);
1be27c35ea17fccd83c54e2acc66eb8c44d1a8feAki Tuomistatic void test_fts_filter_normalizer_invalid_id(void)
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi const char *settings[] =
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi {"id", "Any-One-Out-There; DKFN; [: Nonspacing Mark :] Remove",
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi test_assert(fts_filter_create(fts_filter_normalizer_icu, NULL, NULL, settings, &norm, &error) == 0);
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi test_assert(fts_filter_filter(norm, &token, &error) < 0 && error != NULL);
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomistatic void test_fts_filter_normalizer_stopwords_stemmer_eng(void)
a371ea8bd48d45548cd7aa16d4f5aeb38ba48c91Aki Tuomi const char *error;
a371ea8bd48d45548cd7aa16d4f5aeb38ba48c91Aki Tuomi const char * const id_settings[] =
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi //{"id", "Any-Lower; NFKD; [: Nonspacing Mark :] Remove; NFC", NULL};
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi const char * const tokens[] = {
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi "dries" ,"friendlies", "All", "human", "beings", "are",
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi "born", "free", "and", "equal", "in", "dignity", "and",
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi "rights", "They", "are", "endowed", "with", "reason", "and",
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi "conscience", "and", "should", "act", "towards", "one",
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi "another", "in", "a", "spirit", "of", "brotherhood", "ABCFoo",
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi const char * const bases[] = {
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi "dri" ,"friend", "all", "human", "be", NULL, "born", "free",
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi NULL, "equal", NULL, "digniti", NULL, "right", NULL, NULL,
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi "endow", NULL, "reason", NULL, "conscienc", NULL, "should",
03c6532fe7aa3ddae23c99ff6bec78d8dd2e8165Aki Tuomi "act", "toward", "one", "anoth", NULL, NULL, "spirit", NULL,
03c6532fe7aa3ddae23c99ff6bec78d8dd2e8165Aki Tuomi const char * const *tpp;
03c6532fe7aa3ddae23c99ff6bec78d8dd2e8165Aki Tuomi const char * const *bpp;
1be27c35ea17fccd83c54e2acc66eb8c44d1a8feAki Tuomi test_begin("fts filters normalizer, stopwords and stemming chained, English");
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi test_assert(fts_filter_create(fts_filter_normalizer_icu, NULL, NULL, id_settings, &normalizer, &error) == 0);
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi test_assert(fts_filter_create(fts_filter_stopwords, normalizer, &english_language, stopword_settings, &filter, &error) == 0);
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi test_assert(fts_filter_create(fts_filter_stemmer_snowball, filter, &english_language, NULL, &stemmer, &error) == 0);
f207fb0f2fd3113aa9a9f7911fb12d94dce19dffAki Tuomi if (ret <= 0) {
097dbdf543bc5d1689c5570f5faaec1e864e3a87Aki Tuomi/* TODO: Functions to test 1. ref-unref pairs 2. multiple registers +
4036c1ca99d2c517f68a5b67a419ae7fdfd45300Aki Tuomi an unregister + find */
98bc2ecdbfd4f2f20c3a5e96ae445072fbe22223Aki Tuomi static void (*test_functions[])(void) = {
98bc2ecdbfd4f2f20c3a5e96ae445072fbe22223Aki Tuomi test_fts_filter_normalizer_swedish_short_default_id,