1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/********************************************************************
2b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * Copyright (c) 2001-2011 International Business Machines
3b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Corporation and others. All Rights Reserved.
4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ********************************************************************
5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * File USRCHDAT.H
6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Modification History:
7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Name           date            Description
8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * synwee         July 31 2001    creation
9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ********************************************************************/
10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*
13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNote: This file is included by other C and C++ files. This file should not be directly compiled.
14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/
15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifndef USRCHDAT_C
16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define USRCHDAT_C
17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ucol.h"
19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_COLLATION
21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
22c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru/* Set to 1 if matches must be on grapheme boundaries */
23c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#define GRAPHEME_BOUNDARIES 1
24c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CDECL_BEGIN
26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustruct SearchData {
27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char               *text;
28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char               *pattern;
2950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    const char               *collator; /* currently supported "fr" "es" "de", plus  NULL/other => "en" */
30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          UCollationStrength  strength;
3150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          USearchAttributeValue elemCompare; /* value for the USEARCH_ELEMENT_COMPARISON attribute */
3250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    const char               *breaker; /* currently supported "wordbreaker" for EN_WORDBREAKER_, plus NULL/other => EN_CHARACTERBREAKER_ */
33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          int8_t              offset[32];
34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          uint8_t             size[32];
35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CDECL_END
37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querutypedef struct SearchData SearchData;
39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char *TESTCOLLATORRULE = "& o,O ; p,P";
41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char *EXTRACOLLATIONRULE = " & ae ; \\u00e4 & AE ; \\u00c4 & oe ; \\u00f6 & OE ; \\u00d6 & ue ; \\u00fc & UE ; \\u00dc";
43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const SearchData BASIC[] = {
4550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"xxxxxxxxxxxxxxxxxxxx", "fisher", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
4650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"silly spring string", "string", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {13, -1},
47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {6}},
4850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"silly spring string string", "string", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL,
49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {13, 20, -1}, {6, 6}},
5050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"silly string spring string", "string", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL,
51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {6, 20, -1}, {6, 6}},
5250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"string spring string", "string", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, 14, -1},
53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {6, 6}},
5450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"Scott Ganyo", "c", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {1, -1}, {1}},
5550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"Scott Ganyo", " ", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {5, -1}, {1}},
5650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u0300\\u0325", "\\u0300", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
5750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"a\\u0300\\u0325", "\\u0300", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
58c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
59c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#if GRAPHEME_BOUNDARIES
6050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"a\\u0300\\u0325", "\\u0300\\u0325", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
6150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"a\\u0300b", "\\u0300", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
62c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#else
6350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"a\\u0300\\u0325", "\\u0300\\u0325", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {1, -1}, {2}},
6450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"a\\u0300b", "\\u0300", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {1, -1}, {1}},
65c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#endif
66c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
6750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u00c9", "e", NULL, UCOL_PRIMARY, USEARCH_STANDARD_ELEMENT_COMPARISON,  NULL, {0, -1}, {1}},
68b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    {"x a\\u0301", "a\\u0301", NULL, UCOL_PRIMARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {2, -1}, {2}},
6950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {NULL, NULL, NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}}
70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const SearchData BREAKITERATOREXACT[] = {
7350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"foxy fox", "fox", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, "characterbreaker", {0, 5, -1},
74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {3, 3}},
7550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"foxy fox", "fox", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, "wordbreaker", {5, -1}, {3}},
7650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"This is a toe T\\u00F6ne", "toe", "de", UCOL_PRIMARY, USEARCH_STANDARD_ELEMENT_COMPARISON,
77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "characterbreaker", {10, 14, -1}, {3, 2}},
7850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"This is a toe T\\u00F6ne", "toe", "de", UCOL_PRIMARY, USEARCH_STANDARD_ELEMENT_COMPARISON, "wordbreaker",
79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {10, -1}, {3}},
80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {"Channel, another channel, more channels, and one last Channel",
8150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    "Channel", "es", UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, "wordbreaker", {0, 54, -1}, {7, 7}},
82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* jitterbug 1745 */
8350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"testing that \\u00e9 does not match e", "e", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON,
84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     "characterbreaker", {1, 17, 30, -1}, {1, 1, 1}},
85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {"testing that string ab\\u00e9cd does not match e", "e", NULL,
8650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, "characterbreaker", {1, 28, 41, -1}, {1, 1, 1}},
8750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u00c9", "e", "fr", UCOL_PRIMARY, USEARCH_STANDARD_ELEMENT_COMPARISON,  "characterbreaker", {0, -1}, {1}},
88c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#if 0
89c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    /* Problem reported by Dave Bertoni, same as ticket 4279? */
9050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u0043\\u004F\\u0302\\u0054\\u00C9", "\\u004F", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, "characterbreaker", {1, -1}, {2}},
91c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#endif
9250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {NULL, NULL, NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}}
9350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho};
9450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
9550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#define PECHE_WITH_ACCENTS "un p\\u00E9ch\\u00E9, "         \
9650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                           "\\u00E7a p\\u00E8che par, "     \
9750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                           "p\\u00E9cher, "                 \
9850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                           "une p\\u00EAche, "              \
9950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                           "un p\\u00EAcher, "              \
10050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                           "j\\u2019ai p\\u00EAch\\u00E9, " \
10150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                           "un p\\u00E9cheur, "             \
10250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                           "\\u201Cp\\u00E9che\\u201D, "    \
10350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                           "decomp peche\\u0301, "          \
10450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                           "base peche"
10550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* in the above, the interesting words and their offsets are:
10650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  3 pe<301>che<301>
10750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 13 pe<300>che
10850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 24 pe<301>cher
10950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 36 pe<302>che
11050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 46 pe<302>cher
11150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 59 pe<302>che<301>
11250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 69 pe<301>cheur
11350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 79 pe<301>che
11450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 94 peche<+301>
11550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho107 peche
11650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho*/
117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const SearchData STRENGTH[] = {
11950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          /*012345678901234567890123456789012345678901234567890123456789*/
12050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*00*/{"The quick brown fox jumps over the lazy foxes", "fox", "en",
12150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho           UCOL_PRIMARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {16, 40, -1}, {3, 3}},
12250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*01*/{"The quick brown fox jumps over the lazy foxes", "fox", "en",
12350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho           UCOL_PRIMARY, USEARCH_STANDARD_ELEMENT_COMPARISON, "wordbreaker", {16, -1}, {3}},
12450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*02*/{"blackbirds Pat p\\u00E9ch\\u00E9 p\\u00EAche p\\u00E9cher p\\u00EAcher Tod T\\u00F6ne black Tofu blackbirds Ton PAT toehold blackbird black-bird pat toe big Toe",
12550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho           "peche", "fr", UCOL_PRIMARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {15, 21, 27, 34, -1}, {5, 5, 5, 5}},
12650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*03*/{"This is a toe T\\u00F6ne", "toe", "de", UCOL_PRIMARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL,
12750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho           {10, 14, -1}, {3, 2}},
12850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*04*/{"A channel, another CHANNEL, more Channels, and one last channel...",
12950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho           "channel", "es", UCOL_PRIMARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {2, 19, 33, 56, -1}, {7, 7, 7, 7}},
13050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*05*/{"\\u00c0 should match but not A", "A\\u0300", "en", UCOL_IDENTICAL, USEARCH_STANDARD_ELEMENT_COMPARISON,
13150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho           NULL, {0, -1}, {1, 0}},
13250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          /* some tests for modified element comparison, ticket #7093 */
13350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*06*/{PECHE_WITH_ACCENTS, "peche", "en", UCOL_PRIMARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {3, 13, 24, 36, 46, 59, 69, 79, 94, 107, -1}, {5, 5, 5, 5, 5, 5, 5, 5, 6, 5}},
13450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*07*/{PECHE_WITH_ACCENTS, "peche", "en", UCOL_PRIMARY, USEARCH_STANDARD_ELEMENT_COMPARISON, "wordbreaker", {3, 13, 36, 59, 79, 94, 107, -1}, {5, 5, 5, 5, 5, 6, 5}},
13550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*08*/{PECHE_WITH_ACCENTS, "peche", "en", UCOL_SECONDARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {107, -1}, {5}},
13650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*09*/{PECHE_WITH_ACCENTS, "peche", "en", UCOL_SECONDARY, USEARCH_PATTERN_BASE_WEIGHT_IS_WILDCARD, NULL, {3, 13, 24, 36, 46, 59, 69, 79, 94, 107, -1}, {5, 5, 5, 5, 5, 5, 5, 5, 6, 5}},
13750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*10*/{PECHE_WITH_ACCENTS, "peche", "en", UCOL_SECONDARY, USEARCH_PATTERN_BASE_WEIGHT_IS_WILDCARD, "wordbreaker", {3, 13, 36, 59, 79, 94, 107, -1}, {5, 5, 5, 5, 5, 6, 5}},
13850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*11*/{PECHE_WITH_ACCENTS, "p\\u00E9che", "en", UCOL_SECONDARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {24, 69, 79, -1}, {5, 5, 5}},
13950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*12*/{PECHE_WITH_ACCENTS, "p\\u00E9che", "en", UCOL_SECONDARY, USEARCH_STANDARD_ELEMENT_COMPARISON, "wordbreaker", {79, -1}, {5}},
14050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*13*/{PECHE_WITH_ACCENTS, "p\\u00E9che", "en", UCOL_SECONDARY, USEARCH_PATTERN_BASE_WEIGHT_IS_WILDCARD, NULL, {3, 24, 69, 79, -1}, {5, 5, 5, 5}},
14150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*14*/{PECHE_WITH_ACCENTS, "p\\u00E9che", "en", UCOL_SECONDARY, USEARCH_PATTERN_BASE_WEIGHT_IS_WILDCARD, "wordbreaker", {3, 79, -1}, {5, 5}},
14250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*15*/{PECHE_WITH_ACCENTS, "p\\u00E9che", "en", UCOL_SECONDARY, USEARCH_ANY_BASE_WEIGHT_IS_WILDCARD, NULL, {3, 24, 69, 79, 94, 107, -1}, {5, 5, 5, 5, 6, 5}},
14350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*16*/{PECHE_WITH_ACCENTS, "p\\u00E9che", "en", UCOL_SECONDARY, USEARCH_ANY_BASE_WEIGHT_IS_WILDCARD, "wordbreaker", {3, 79, 94, 107, -1}, {5, 5, 6, 5}},
14450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*17*/{PECHE_WITH_ACCENTS, "pech\\u00E9", "en", UCOL_SECONDARY, USEARCH_PATTERN_BASE_WEIGHT_IS_WILDCARD, NULL, {3, 59, 94, -1}, {5, 5, 6}},
14550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*18*/{PECHE_WITH_ACCENTS, "pech\\u00E9", "en", UCOL_SECONDARY, USEARCH_PATTERN_BASE_WEIGHT_IS_WILDCARD, "wordbreaker", {3, 59, 94, -1}, {5, 5, 6}},
14650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*19*/{PECHE_WITH_ACCENTS, "pech\\u00E9", "en", UCOL_SECONDARY, USEARCH_ANY_BASE_WEIGHT_IS_WILDCARD, NULL, {3, 13, 24, 36, 46, 59, 69, 79, 94, 107, -1}, {5, 5, 5, 5, 5, 5, 5, 5, 6, 5}},
14750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*20*/{PECHE_WITH_ACCENTS, "pech\\u00E9", "en", UCOL_SECONDARY, USEARCH_ANY_BASE_WEIGHT_IS_WILDCARD, "wordbreaker", {3, 13, 36, 59, 79, 94, 107, -1}, {5, 5, 5, 5, 5, 6, 5}},
14850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*21*/{PECHE_WITH_ACCENTS, "peche\\u0301", "en", UCOL_SECONDARY, USEARCH_PATTERN_BASE_WEIGHT_IS_WILDCARD, NULL, {3, 59, 94, -1}, {5, 5, 6}},
14950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*22*/{PECHE_WITH_ACCENTS, "peche\\u0301", "en", UCOL_SECONDARY, USEARCH_PATTERN_BASE_WEIGHT_IS_WILDCARD, "wordbreaker", {3, 59, 94, -1}, {5, 5, 6}},
15050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*23*/{PECHE_WITH_ACCENTS, "peche\\u0301", "en", UCOL_SECONDARY, USEARCH_ANY_BASE_WEIGHT_IS_WILDCARD, NULL, {3, 13, 24, 36, 46, 59, 69, 79, 94, 107, -1}, {5, 5, 5, 5, 5, 5, 5, 5, 6, 5}},
15150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*24*/{PECHE_WITH_ACCENTS, "peche\\u0301", "en", UCOL_SECONDARY, USEARCH_ANY_BASE_WEIGHT_IS_WILDCARD, "wordbreaker", {3, 13, 36, 59, 79, 94, 107, -1}, {5, 5, 5, 5, 5, 6, 5}},
15250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          /* more tests for modified element comparison (with fr), ticket #7093 */
15350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*25*/{PECHE_WITH_ACCENTS, "peche", "fr", UCOL_PRIMARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {3, 13, 24, 36, 46, 59, 69, 79, 94, 107, -1}, {5, 5, 5, 5, 5, 5, 5, 5, 6, 5}},
15450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*26*/{PECHE_WITH_ACCENTS, "peche", "fr", UCOL_PRIMARY, USEARCH_STANDARD_ELEMENT_COMPARISON, "wordbreaker", {3, 13, 36, 59, 79, 94, 107, -1}, {5, 5, 5, 5, 5, 6, 5}},
15550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*27*/{PECHE_WITH_ACCENTS, "peche", "fr", UCOL_SECONDARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {107, -1}, {5}},
15650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*28*/{PECHE_WITH_ACCENTS, "peche", "fr", UCOL_SECONDARY, USEARCH_PATTERN_BASE_WEIGHT_IS_WILDCARD, NULL, {3, 13, 24, 36, 46, 59, 69, 79, 94, 107, -1}, {5, 5, 5, 5, 5, 5, 5, 5, 6, 5}},
15750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*29*/{PECHE_WITH_ACCENTS, "peche", "fr", UCOL_SECONDARY, USEARCH_PATTERN_BASE_WEIGHT_IS_WILDCARD, "wordbreaker", {3, 13, 36, 59, 79, 94, 107, -1}, {5, 5, 5, 5, 5, 6, 5}},
15850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*30*/{PECHE_WITH_ACCENTS, "p\\u00E9che", "fr", UCOL_SECONDARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {24, 69, 79, -1}, {5, 5, 5}},
15950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*31*/{PECHE_WITH_ACCENTS, "p\\u00E9che", "fr", UCOL_SECONDARY, USEARCH_STANDARD_ELEMENT_COMPARISON, "wordbreaker", {79, -1}, {5}},
16050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*32*/{PECHE_WITH_ACCENTS, "p\\u00E9che", "fr", UCOL_SECONDARY, USEARCH_PATTERN_BASE_WEIGHT_IS_WILDCARD, NULL, {3, 24, 69, 79, -1}, {5, 5, 5, 5}},
16150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*33*/{PECHE_WITH_ACCENTS, "p\\u00E9che", "fr", UCOL_SECONDARY, USEARCH_PATTERN_BASE_WEIGHT_IS_WILDCARD, "wordbreaker", {3, 79, -1}, {5, 5}},
16250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*34*/{PECHE_WITH_ACCENTS, "p\\u00E9che", "fr", UCOL_SECONDARY, USEARCH_ANY_BASE_WEIGHT_IS_WILDCARD, NULL, {3, 24, 69, 79, 94, 107, -1}, {5, 5, 5, 5, 6, 5}},
16350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*35*/{PECHE_WITH_ACCENTS, "p\\u00E9che", "fr", UCOL_SECONDARY, USEARCH_ANY_BASE_WEIGHT_IS_WILDCARD, "wordbreaker", {3, 79, 94, 107, -1}, {5, 5, 6, 5}},
16450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*36*/{PECHE_WITH_ACCENTS, "pech\\u00E9", "fr", UCOL_SECONDARY, USEARCH_PATTERN_BASE_WEIGHT_IS_WILDCARD, NULL, {3, 59, 94, -1}, {5, 5, 6}},
16550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*37*/{PECHE_WITH_ACCENTS, "pech\\u00E9", "fr", UCOL_SECONDARY, USEARCH_PATTERN_BASE_WEIGHT_IS_WILDCARD, "wordbreaker", {3, 59, 94, -1}, {5, 5, 6}},
16650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*38*/{PECHE_WITH_ACCENTS, "pech\\u00E9", "fr", UCOL_SECONDARY, USEARCH_ANY_BASE_WEIGHT_IS_WILDCARD, NULL, {3, 13, 24, 36, 46, 59, 69, 79, 94, 107, -1}, {5, 5, 5, 5, 5, 5, 5, 5, 6, 5}},
16750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*39*/{PECHE_WITH_ACCENTS, "pech\\u00E9", "fr", UCOL_SECONDARY, USEARCH_ANY_BASE_WEIGHT_IS_WILDCARD, "wordbreaker", {3, 13, 36, 59, 79, 94, 107, -1}, {5, 5, 5, 5, 5, 6, 5}},
16850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*40*/{PECHE_WITH_ACCENTS, "peche\\u0301", "fr", UCOL_SECONDARY, USEARCH_PATTERN_BASE_WEIGHT_IS_WILDCARD, NULL, {3, 59, 94, -1}, {5, 5, 6}},
16950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*41*/{PECHE_WITH_ACCENTS, "peche\\u0301", "fr", UCOL_SECONDARY, USEARCH_PATTERN_BASE_WEIGHT_IS_WILDCARD, "wordbreaker", {3, 59, 94, -1}, {5, 5, 6}},
17050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*42*/{PECHE_WITH_ACCENTS, "peche\\u0301", "fr", UCOL_SECONDARY, USEARCH_ANY_BASE_WEIGHT_IS_WILDCARD, NULL, {3, 13, 24, 36, 46, 59, 69, 79, 94, 107, -1}, {5, 5, 5, 5, 5, 5, 5, 5, 6, 5}},
17150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /*43*/{PECHE_WITH_ACCENTS, "peche\\u0301", "fr", UCOL_SECONDARY, USEARCH_ANY_BASE_WEIGHT_IS_WILDCARD, "wordbreaker", {3, 13, 36, 59, 79, 94, 107, -1}, {5, 5, 5, 5, 5, 6, 5}},
172c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
173c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#if 0
174c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    /* Ticket 5382 */
17550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"12\\u0171", "\\u0170", NULL, UCOL_SECONDARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {2, -1}, {2}},
176c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#endif
177c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
17850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {NULL, NULL, NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}}
179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const SearchData VARIABLE[] = {
182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*012345678901234567890123456789012345678901234567890123456789*/
183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {"blackbirds black blackbirds blackbird black-bird",
18450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    "blackbird", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, 17, 28, 38, -1},
185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {9, 9, 9, 10}},
186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* to see that it doesn't go into an infinite loop if the start of text
187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    is a ignorable character */
18850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {" on", "go", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
18950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"abcdefghijklmnopqrstuvwxyz", "   ", NULL, UCOL_PRIMARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL,
190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    20, 21, 22, 23, 24, 25, -1}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* testing tightest match */
19450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {" abc  a bc   ab c    a  bc     ab  c", "abc", NULL, UCOL_QUATERNARY, USEARCH_STANDARD_ELEMENT_COMPARISON,
195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    NULL, {1, -1}, {3}},
196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*012345678901234567890123456789012345678901234567890123456789 */
19750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {" abc  a bc   ab c    a  bc     ab  c", "abc", NULL, UCOL_SECONDARY, USEARCH_STANDARD_ELEMENT_COMPARISON,
198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    NULL, {1, 6, 13, 21, 31, -1}, {3, 4, 4, 5, 5}},
199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* totally ignorable text */
20050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"           ---------------", "abc", NULL, UCOL_SECONDARY, USEARCH_STANDARD_ELEMENT_COMPARISON,
201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    NULL, {-1}, {0}},
20250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {NULL, NULL, NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}}
203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const SearchData NORMEXACT[] = {
20650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"a\\u0300\\u0325", "a\\u0325\\u0300", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {3}},
207c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
208c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#if GRAPHEME_BOUNDARIES
20950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"a\\u0300\\u0325", "\\u0325\\u0300", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
210c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#else
21150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"a\\u0300\\u0325", "\\u0325\\u0300", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {1, -1}, {2}},
212c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#endif
213c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
21450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {NULL, NULL, NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}}
215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const SearchData NONNORMEXACT[] = {
21850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"a\\u0300\\u0325", "\\u0325\\u0300", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
21950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {NULL, NULL, NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}}
220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const SearchData OVERLAP[] = {
22350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"abababab", "abab", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, 2, 4, -1},
224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {4, 4, 4}},
22550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {NULL, NULL, NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}}
226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const SearchData NONOVERLAP[] = {
22950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"abababab", "abab", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, 4, -1}, {4, 4}},
23050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {NULL, NULL, NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}}
231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const SearchData COLLATOR[] = {
234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* english */
23550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"fox fpx", "fox", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {3}},
236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* tailored */
23750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"fox fpx", "fox", NULL, UCOL_PRIMARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, 4, -1}, {3, 3}},
23850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {NULL, NULL, NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}}
239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const SearchData PATTERN[] = {
242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {"The quick brown fox jumps over the lazy foxes", "the", NULL,
24350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        UCOL_PRIMARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, 31, -1}, {3, 3}},
244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {"The quick brown fox jumps over the lazy foxes", "fox", NULL,
24550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        UCOL_PRIMARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {16, 40, -1}, {3, 3}},
24650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {NULL, NULL, NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}}
247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const SearchData TEXT[] = {
25050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"the foxy brown fox", "fox", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {4, 15, -1},
251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {3, 3}},
25250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"the quick brown fox", "fox", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {16, -1},
253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {3}},
25450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {NULL, NULL, NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}}
255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const SearchData COMPOSITEBOUNDARIES[] = {
258c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#if GRAPHEME_BOUNDARIES
25950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u00C0", "A", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
26050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"A\\u00C0C", "A", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {1}},
26150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u00C0A", "A", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {1, -1}, {1}},
26250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"B\\u00C0", "A", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
26350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u00C0B", "A", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
26450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u00C0", "\\u0300", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
26550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u0300\\u00C0", "\\u0300", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {1}},
266c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#else
26750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u00C0", "A", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {1}},
26850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"A\\u00C0C", "A", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, 1, -1}, {1, 1}},
26950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u00C0A", "A", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, 1, -1}, {1, 1}},
27050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"B\\u00C0", "A", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {1, -1}, {1}},
27150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u00C0B", "A", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {1}},
27250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u00C0", "\\u0300", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {1}},
27350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u0300\\u00C0", "\\u0300", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, 1, -1},
274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {1, 1}},
275c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#endif
276c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
27750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u00C0\\u0300", "\\u0300", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* A + 030A + 0301 */
27950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u01FA", "\\u01FA", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {1}},
28050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u01FA", "A\\u030A\\u0301", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {1}},
28150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u01FA", "\\u030A", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
28250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u01FA", "A\\u030A", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
28350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u01FA", "\\u030AA", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
28450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u01FA", "\\u0301", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
28550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u01FA", "A\\u0301", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
28650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u01FA", "\\u0301A", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
287c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
288c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#if GRAPHEME_BOUNDARIES
28950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u01FA", "\\u030A\\u0301", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
290c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#else
29150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u01FA", "\\u030A\\u0301", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {1}},
292c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#endif
293c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
29450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"A\\u01FA", "A\\u030A", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
29550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u01FAA", "\\u0301A", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
29650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u0F73", "\\u0F73", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {1}},
29750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u0F73", "\\u0F71", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
29850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u0F73", "\\u0F72", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
29950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u0F73", "\\u0F71\\u0F72", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {1}},
30050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"A\\u0F73", "A\\u0F71", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
30150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u0F73A", "\\u0F72A", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
302c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
303c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    /* Ticket 5024  */
30450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"a\\u00e1", "a\\u00e1", NULL, UCOL_SECONDARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {2}},
305c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
306c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    /* Ticket 5420  */
30750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"fu\\u00dfball", "fu\\u00df", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {3}},
30850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"fu\\u00dfball", "fuss", NULL, UCOL_PRIMARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {3}},
30950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"fu\\u00dfball", "uss", NULL, UCOL_PRIMARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {1, -1}, {2}},
310c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
31150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {NULL, NULL, NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}}
312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const SearchData MATCH[] = {
31550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"a busy bee is a very busy beeee", "bee", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL,
316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {7, 26, -1}, {3, 3}},
317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* 012345678901234567890123456789012345678901234567890 */
318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {"a busy bee is a very busy beeee with no bee life", "bee", NULL,
31950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {7, 26, 40, -1}, {3, 3, 3}},
32050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {NULL, NULL, NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}}
321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const SearchData SUPPLEMENTARY[] = {
324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* 012345678901234567890123456789012345678901234567890012345678901234567890123456789012345678901234567890012345678901234567890123456789 */
325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {"abc \\uD800\\uDC00 \\uD800\\uDC01 \\uD801\\uDC00 \\uD800\\uDC00abc abc\\uD800\\uDC00 \\uD800\\uD800\\uDC00 \\uD800\\uDC00\\uDC00",
32650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     "\\uD800\\uDC00", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {4, 13, 22, 26, 29, -1},
327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {2, 2, 2, 2, 2}},
328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {"and\\uD834\\uDDB9this sentence", "\\uD834\\uDDB9", NULL,
32950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {3, -1}, {2}},
330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {"and \\uD834\\uDDB9 this sentence", " \\uD834\\uDDB9 ", NULL,
33150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {3, -1}, {4}},
332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {"and-\\uD834\\uDDB9-this sentence", "-\\uD834\\uDDB9-", NULL,
33350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {3, -1}, {4}},
334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {"and,\\uD834\\uDDB9,this sentence", ",\\uD834\\uDDB9,", NULL,
33550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {3, -1}, {4}},
336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {"and?\\uD834\\uDDB9?this sentence", "?\\uD834\\uDDB9?", NULL,
33750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {3, -1}, {4}},
33850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {NULL, NULL, NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}}
339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char *CONTRACTIONRULE =
342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "&z = ab/c < AB < X\\u0300 < ABC < X\\u0300\\u0315";
343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const SearchData CONTRACTION[] = {
345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* common discontiguous */
34650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"A\\u0300\\u0315", "\\u0300", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
347c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
348c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#if GRAPHEME_BOUNDARIES
34950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"A\\u0300\\u0315", "\\u0300\\u0315", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
350c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#else
35150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"A\\u0300\\u0315", "\\u0300\\u0315", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {1, -1}, {2}},
352c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#endif
353c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* contraction prefix */
35550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"AB\\u0315C", "A", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
356c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
357c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#if GRAPHEME_BOUNDARIES
35850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"AB\\u0315C", "AB", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
35950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"AB\\u0315C", "\\u0315", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
360c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#else
36150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"AB\\u0315C", "AB", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {2}},
36250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"AB\\u0315C", "\\u0315", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {2, -1}, {1}},
363c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#endif
364c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* discontiguous problem here for backwards iteration.
366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    accents not found because discontiguous stores all information */
36750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"X\\u0300\\u0319\\u0315", "\\u0319", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1},
368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {0}},
369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     /* ends not with a contraction character */
37050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"X\\u0315\\u0300D", "\\u0300\\u0315", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1},
371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {0}},
37250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"X\\u0315\\u0300D", "X\\u0300\\u0315", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL,
373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {0, -1}, {3}},
37450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"X\\u0300\\u031A\\u0315D", "X\\u0300", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1},
375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {0}},
376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* blocked discontiguous */
37750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"X\\u0300\\u031A\\u0315D", "\\u031A\\u0315D", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL,
378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {-1}, {0}},
379c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
380c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#if GRAPHEME_BOUNDARIES
381c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    /*
382c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     * "ab" generates a contraction that's an expansion. The "z" matches the
383c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     * first CE of the expansion but the match fails because it ends in the
384c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     * middle of an expansion...
385c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     */
38650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"ab", "z", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
387c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#else
38850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"ab", "z", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {2}},
389c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#endif
390c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
39150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {NULL, NULL, NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}}
392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char *IGNORABLERULE = "&a = \\u0300";
395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const SearchData IGNORABLE[] = {
397c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#if GRAPHEME_BOUNDARIES
398c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    /*
399c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     * This isn't much of a test when matches have to be on
400c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     * grapheme boundiaries. The match at 0 only works because
401c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     * it's at the start of the text.
402c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     */
40350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u0300\\u0315 \\u0300\\u0315 ", "\\u0300", NULL, UCOL_PRIMARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL,
404c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    {0, -1}, {2}},
405c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#else
40650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u0300\\u0315 \\u0300\\u0315 ", "\\u0300", NULL, UCOL_PRIMARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL,
407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {0, 3, -1}, {2, 2}},
408c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#endif
409c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
41050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {NULL, NULL, NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}}
411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const SearchData BASICCANONICAL[] = {
41450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"xxxxxxxxxxxxxxxxxxxx", "fisher", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
41550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"silly spring string", "string", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {13, -1},
416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {6}},
41750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"silly spring string string", "string", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL,
418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {13, 20, -1}, {6, 6}},
41950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"silly string spring string", "string", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL,
420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {6, 20, -1}, {6, 6}},
42150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"string spring string", "string", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, 14, -1},
422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {6, 6}},
42350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"Scott Ganyo", "c", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {1, -1}, {1}},
42450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"Scott Ganyo", " ", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {5, -1}, {1}},
425c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
426c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#if GRAPHEME_BOUNDARIES
42750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u0300\\u0325", "\\u0300", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
42850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"a\\u0300\\u0325", "\\u0300", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
42950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"a\\u0300\\u0325", "\\u0300\\u0325", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
43050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"a\\u0300b", "\\u0300", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
43150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"a\\u0300\\u0325b", "\\u0300b", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
43250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u0325\\u0300A\\u0325\\u0300", "\\u0300A\\u0300", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON,
433c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    NULL, {-1}, {0}},
43450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u0325\\u0300A\\u0325\\u0300", "\\u0325A\\u0325", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON,
435c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    NULL, {-1}, {0}},
436c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    {"a\\u0300\\u0325b\\u0300\\u0325c \\u0325b\\u0300 \\u0300b\\u0325",
43750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    "\\u0300b\\u0325", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
438c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#else
43950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u0300\\u0325", "\\u0300", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {2}},
44050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"a\\u0300\\u0325", "\\u0300", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {1, -1}, {2}},
44150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"a\\u0300\\u0325", "\\u0300\\u0325", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {1, -1},
442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {2}},
44350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"a\\u0300b", "\\u0300", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {1, -1}, {1}},
44450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"a\\u0300\\u0325b", "\\u0300b", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {1, -1}, {3}},
44550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u0325\\u0300A\\u0325\\u0300", "\\u0300A\\u0300", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON,
446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    NULL, {0, -1}, {5}},
44750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u0325\\u0300A\\u0325\\u0300", "\\u0325A\\u0325", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON,
448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    NULL, {0, -1}, {5}},
449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {"a\\u0300\\u0325b\\u0300\\u0325c \\u0325b\\u0300 \\u0300b\\u0325",
45050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    "\\u0300b\\u0325", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {1, 12, -1}, {5, 3}},
451c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#endif
452c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
45350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u00c4\\u0323", "A\\u0323\\u0308", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {2}},
45450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u0308\\u0323", "\\u0323\\u0308", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {2}},
45550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {NULL, NULL, NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}}
456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
458c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const SearchData NORMCANONICAL[] = {
460c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#if GRAPHEME_BOUNDARIES
461c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    /*
462c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     * These tests don't really mean anything. With matches restricted to grapheme
463c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     * boundaries, isCanonicalMatch doesn't mean anything unless normalization is
464c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     * also turned on...
465c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     */
46650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u0300\\u0325", "\\u0300", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
46750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u0300\\u0325", "\\u0325", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
46850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"a\\u0300\\u0325", "\\u0325\\u0300", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
46950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"a\\u0300\\u0325", "\\u0300\\u0325", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
47050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"a\\u0300\\u0325", "\\u0325", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
47150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"a\\u0300\\u0325", "\\u0300", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
472c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#else
47350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u0300\\u0325", "\\u0300", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {2}},
47450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u0300\\u0325", "\\u0325", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {2}},
47550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"a\\u0300\\u0325", "\\u0325\\u0300", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {1, -1},
476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {2}},
47750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"a\\u0300\\u0325", "\\u0300\\u0325", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {1, -1},
478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {2}},
47950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"a\\u0300\\u0325", "\\u0325", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {1, -1}, {2}},
48050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"a\\u0300\\u0325", "\\u0300", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {1, -1}, {2}},
481c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#endif
482c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
48350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {NULL, NULL, NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}}
484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const SearchData BREAKITERATORCANONICAL[] = {
48750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"foxy fox", "fox", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, "characterbreaker", {0, 5, -1},
488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {3, 3}},
48950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"foxy fox", "fox", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, "wordbreaker", {5, -1}, {3}},
49050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"This is a toe T\\u00F6ne", "toe", "de", UCOL_PRIMARY, USEARCH_STANDARD_ELEMENT_COMPARISON,
491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "characterbreaker", {10, 14, -1}, {3, 2}},
49250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"This is a toe T\\u00F6ne", "toe", "de", UCOL_PRIMARY, USEARCH_STANDARD_ELEMENT_COMPARISON, "wordbreaker",
493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {10, -1}, {3}},
494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {"Channel, another channel, more channels, and one last Channel",
49550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    "Channel", "es", UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, "wordbreaker", {0, 54, -1}, {7, 7}},
496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* jitterbug 1745 */
49750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"testing that \\u00e9 does not match e", "e", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON,
498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     "characterbreaker", {1, 17, 30, -1}, {1, 1, 1}},
499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {"testing that string ab\\u00e9cd does not match e", "e", NULL,
50050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, "characterbreaker", {1, 28, 41, -1}, {1, 1, 1}},
50150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u00c9", "e", "fr", UCOL_PRIMARY, USEARCH_STANDARD_ELEMENT_COMPARISON,  "characterbreaker", {0, -1}, {1}},
50250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {NULL, NULL, NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}}
503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const SearchData STRENGTHCANONICAL[] = {
506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*012345678901234567890123456789012345678901234567890123456789 */
507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {"The quick brown fox jumps over the lazy foxes", "fox", "en",
50850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        UCOL_PRIMARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {16, 40, -1}, {3, 3}},
509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {"The quick brown fox jumps over the lazy foxes", "fox", "en",
51050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UCOL_PRIMARY, USEARCH_STANDARD_ELEMENT_COMPARISON, "wordbreaker", {16, -1}, {3}},
511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {"blackbirds Pat p\\u00E9ch\\u00E9 p\\u00EAche p\\u00E9cher p\\u00EAcher Tod T\\u00F6ne black Tofu blackbirds Ton PAT toehold blackbird black-bird pat toe big Toe",
51250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    "peche", "fr", UCOL_PRIMARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {15, 21, 27, 34, -1}, {5, 5, 5, 5}},
51350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"This is a toe T\\u00F6ne", "toe", "de", UCOL_PRIMARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL,
514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {10, 14, -1}, {3, 2}},
515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {"A channel, another CHANNEL, more Channels, and one last channel...",
51650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    "channel", "es", UCOL_PRIMARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {2, 19, 33, 56, -1},
517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {7, 7, 7, 7}},
51850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {NULL, NULL, NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}}
519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const SearchData VARIABLECANONICAL[] = {
522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*012345678901234567890123456789012345678901234567890123456789 */
523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {"blackbirds black blackbirds blackbird black-bird",
52450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    "blackbird", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, 17, 28, 38, -1},
525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {9, 9, 9, 10}},
526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* to see that it doesn't go into an infinite loop if the start of text
527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    is a ignorable character */
52850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {" on", "go", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
52950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"abcdefghijklmnopqrstuvwxyz", "   ", NULL, UCOL_PRIMARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL,
530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    20, 21, 22, 23, 24, 25, -1}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* testing tightest match */
53450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {" abc  a bc   ab c    a  bc     ab  c", "abc", NULL, UCOL_QUATERNARY, USEARCH_STANDARD_ELEMENT_COMPARISON,
535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    NULL, {1, -1}, {3}},
536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*012345678901234567890123456789012345678901234567890123456789 */
53750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {" abc  a bc   ab c    a  bc     ab  c", "abc", NULL, UCOL_SECONDARY, USEARCH_STANDARD_ELEMENT_COMPARISON,
538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    NULL, {1, 6, 13, 21, 31, -1}, {3, 4, 4, 5, 5}},
539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* totally ignorable text */
54050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"           ---------------", "abc", NULL, UCOL_SECONDARY, USEARCH_STANDARD_ELEMENT_COMPARISON,
541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    NULL, {-1}, {0}},
54250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {NULL, NULL, NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}}
543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const SearchData OVERLAPCANONICAL[] = {
54650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"abababab", "abab", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, 2, 4, -1},
547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {4, 4, 4}},
54850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {NULL, NULL, NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}}
549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const SearchData NONOVERLAPCANONICAL[] = {
55250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"abababab", "abab", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, 4, -1}, {4, 4}},
55350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {NULL, NULL, NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}}
554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const SearchData COLLATORCANONICAL[] = {
557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* english */
55850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"fox fpx", "fox", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {3}},
559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* tailored */
56050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"fox fpx", "fox", NULL, UCOL_PRIMARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, 4, -1}, {3, 3}},
56150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {NULL, NULL, NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}}
562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const SearchData PATTERNCANONICAL[] = {
565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {"The quick brown fox jumps over the lazy foxes", "the", NULL,
56650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        UCOL_PRIMARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, 31, -1}, {3, 3}},
567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {"The quick brown fox jumps over the lazy foxes", "fox", NULL,
56850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        UCOL_PRIMARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {16, 40, -1}, {3, 3}},
56950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {NULL, NULL, NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}}
570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const SearchData TEXTCANONICAL[] = {
57350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"the foxy brown fox", "fox", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {4, 15, -1},
574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {3, 3}},
57550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"the quick brown fox", "fox", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {16, -1},
576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {3}},
57750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {NULL, NULL, NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}}
578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const SearchData COMPOSITEBOUNDARIESCANONICAL[] = {
581c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#if GRAPHEME_BOUNDARIES
58250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u00C0", "A", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
58350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"A\\u00C0C", "A", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {1}},
58450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u00C0A", "A", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {1, -1}, {1}},
58550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"B\\u00C0", "A", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
58650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u00C0B", "A", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
58750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u00C0", "\\u0300", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
588c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
589c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    /* first one matches only because it's at the start of the text */
59050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u0300\\u00C0", "\\u0300", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {1}},
591c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
592c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    /* \\u0300 blocked by \\u0300 */
59350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u00C0\\u0300", "\\u0300", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
594c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#else
59550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u00C0", "A", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {1}},
59650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"A\\u00C0C", "A", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, 1, -1}, {1, 1}},
59750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u00C0A", "A", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, 1, -1}, {1, 1}},
59850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"B\\u00C0", "A", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {1, -1}, {1}},
59950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u00C0B", "A", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {1}},
60050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u00C0", "\\u0300", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {1}},
60150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u0300\\u00C0", "\\u0300", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, 1, -1},
602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {1, 1}},
603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* \\u0300 blocked by \\u0300 */
60450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u00C0\\u0300", "\\u0300", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {2}},
605c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#endif
606c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* A + 030A + 0301 */
60850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u01FA", "\\u01FA", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {1}},
60950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u01FA", "A\\u030A\\u0301", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {1}},
610c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
611c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#if GRAPHEME_BOUNDARIES
61250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u01FA", "\\u030A", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
61350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u01FA", "A\\u030A", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
614c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#else
61550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u01FA", "\\u030A", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {1}},
61650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u01FA", "A\\u030A", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {1}},
617c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#endif
618c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
61950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u01FA", "\\u030AA", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
620c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
621c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#if GRAPHEME_BOUNDARIES
62250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u01FA", "\\u0301", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
623c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#else
62450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u01FA", "\\u0301", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {1}},
625c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#endif
626c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* blocked accent */
62850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u01FA", "A\\u0301", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
62950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u01FA", "\\u0301A", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
630c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
631c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#if GRAPHEME_BOUNDARIES
63250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u01FA", "\\u030A\\u0301", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
63350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"A\\u01FA", "A\\u030A", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
63450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u01FAA", "\\u0301A", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
635c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#else
63650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u01FA", "\\u030A\\u0301", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {1}},
63750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"A\\u01FA", "A\\u030A", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {1, -1}, {1}},
63850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u01FAA", "\\u0301A", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {2}},
639c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#endif
640c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
64150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u0F73", "\\u0F73", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {1}},
642c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
643c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#if GRAPHEME_BOUNDARIES
64450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u0F73", "\\u0F71", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
64550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u0F73", "\\u0F72", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
646c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#else
64750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u0F73", "\\u0F71", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {1}},
64850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u0F73", "\\u0F72", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {1}},
649c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#endif
650c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
65150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u0F73", "\\u0F71\\u0F72", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {1}},
652c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
653c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#if GRAPHEME_BOUNDARIES
65450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"A\\u0F73", "A\\u0F71", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
65550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u0F73A", "\\u0F72A", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
656c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    {"\\u01FA A\\u0301\\u030A A\\u030A\\u0301 A\\u030A \\u01FA", "A\\u030A",
65750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho      NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {10, -1}, {2}},
658c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#else
65950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"A\\u0F73", "A\\u0F71", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {2}},
66050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"\\u0F73A", "\\u0F72A", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {2}},
661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {"\\u01FA A\\u0301\\u030A A\\u030A\\u0301 A\\u030A \\u01FA", "A\\u030A",
66250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, 6, 10, 13, -1}, {1, 3, 2, 1}},
663c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#endif
664c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
66550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {NULL, NULL, NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}}
666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const SearchData MATCHCANONICAL[] = {
66950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"a busy bee is a very busy beeee", "bee", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL,
670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {7, 26, -1}, {3, 3}},
671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*012345678901234567890123456789012345678901234567890 */
672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {"a busy bee is a very busy beeee with no bee life", "bee", NULL,
67350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {7, 26, 40, -1}, {3, 3, 3}},
67450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {NULL, NULL, NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}}
675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const SearchData SUPPLEMENTARYCANONICAL[] = {
678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*012345678901234567890123456789012345678901234567890012345678901234567890123456789012345678901234567890012345678901234567890123456789 */
679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {"abc \\uD800\\uDC00 \\uD800\\uDC01 \\uD801\\uDC00 \\uD800\\uDC00abc abc\\uD800\\uDC00 \\uD800\\uD800\\uDC00 \\uD800\\uDC00\\uDC00",
68050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     "\\uD800\\uDC00", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {4, 13, 22, 26, 29, -1},
681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {2, 2, 2, 2, 2}},
682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {"and\\uD834\\uDDB9this sentence", "\\uD834\\uDDB9", NULL,
68350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {3, -1}, {2}},
684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {"and \\uD834\\uDDB9 this sentence", " \\uD834\\uDDB9 ", NULL,
68550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {3, -1}, {4}},
686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {"and-\\uD834\\uDDB9-this sentence", "-\\uD834\\uDDB9-", NULL,
68750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {3, -1}, {4}},
688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {"and,\\uD834\\uDDB9,this sentence", ",\\uD834\\uDDB9,", NULL,
68950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {3, -1}, {4}},
690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {"and?\\uD834\\uDDB9?this sentence", "?\\uD834\\uDDB9?", NULL,
69150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {3, -1}, {4}},
69250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {NULL, NULL, NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}}
693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const SearchData CONTRACTIONCANONICAL[] = {
696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* common discontiguous */
697c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#if GRAPHEME_BOUNDARIES
69850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"A\\u0300\\u0315", "\\u0300", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
69950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"A\\u0300\\u0315", "\\u0300\\u0315", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
700c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#else
70150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"A\\u0300\\u0315", "\\u0300", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {1, -1}, {2}},
70250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"A\\u0300\\u0315", "\\u0300\\u0315", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {1, -1}, {2}},
703c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#endif
704c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* contraction prefix */
70650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"AB\\u0315C", "A", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
707c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
708c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#if GRAPHEME_BOUNDARIES
70950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"AB\\u0315C", "AB", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
71050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"AB\\u0315C", "\\u0315", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
711c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#else
71250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"AB\\u0315C", "AB", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {2}},
71350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"AB\\u0315C", "\\u0315", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {2, -1}, {1}},
714c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#endif
715c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* discontiguous problem here for backwards iteration.
717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    forwards gives 0, 4 but backwards give 1, 3 */
71850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /* {"X\\u0300\\u0319\\u0315", "\\u0319", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1},
719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {4}}, */
720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     /* ends not with a contraction character */
72250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"X\\u0315\\u0300D", "\\u0300\\u0315", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
72350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"X\\u0315\\u0300D", "X\\u0300\\u0315", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {3}},
724c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
725c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#if GRAPHEME_BOUNDARIES
72650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"X\\u0300\\u031A\\u0315D", "X\\u0300", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
727c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* blocked discontiguous */
72950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"X\\u0300\\u031A\\u0315D", "\\u031A\\u0315D", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}},
730c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
731c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    /*
732c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     * "ab" generates a contraction that's an expansion. The "z" matches the
733c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     * first CE of the expansion but the match fails because it ends in the
734c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     * middle of an expansion...
735c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     */
73650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"ab", "z", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {2}},
737c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#else
73850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"X\\u0300\\u031A\\u0315D", "X\\u0300", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {4}},
739c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
740c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    /* blocked discontiguous */
74150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"X\\u0300\\u031A\\u0315D", "\\u031A\\u0315D", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {1, -1}, {4}},
742c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
74350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {"ab", "z", NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, -1}, {2}},
744c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#endif
745c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
74650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {NULL, NULL, NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}}
747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
749c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Querustatic const SearchData DIACRITICMATCH[] = {
750b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    {"\\u03BA\\u03B1\\u03B9\\u0300\\u0020\\u03BA\\u03B1\\u1F76", "\\u03BA\\u03B1\\u03B9", NULL, UCOL_PRIMARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {0, 5,-1}, {4, 3}},
751b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    {"\\u0061\\u0061\\u00E1", "\\u0061\\u00E1", NULL, UCOL_SECONDARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {1, -1}, {2}},
752b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    {"\\u0020\\u00C2\\u0303\\u0020\\u0041\\u0061\\u1EAA\\u0041\\u0302\\u0303\\u00C2\\u0303\\u1EAB\\u0061\\u0302\\u0303\\u00E2\\u0303\\uD806\\uDC01\\u0300\\u0020",
753b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     "\\u00C2\\u0303", "LDE_AN_CX_EX_FX_HX_NX_S1", UCOL_PRIMARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {1, 4, 5, 6, 7, 10, 12, 13, 16,-1}, {2, 1, 1, 1, 3, 2, 1, 3, 2}},
754b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    {NULL, NULL, NULL, UCOL_TERTIARY, USEARCH_STANDARD_ELEMENT_COMPARISON, NULL, {-1}, {0}}
755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_COLLATION */
758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
760