public virtual void TestSupplementaryCharacters()
{
string s = TestUtil.RandomUnicodeString(Random(), 10);
int codePointCount = Character.CodePointCount(s, 0, s.Length);
int minGram = TestUtil.NextInt(Random(), 1, 3);
int maxGram = TestUtil.NextInt(Random(), minGram, 10);
TokenStream tk = new KeywordTokenizer(new StringReader(s));
tk = new NGramTokenFilter(TEST_VERSION_CURRENT, tk, minGram, maxGram);
ICharTermAttribute termAtt = tk.AddAttribute<ICharTermAttribute>();
IOffsetAttribute offsetAtt = tk.AddAttribute<IOffsetAttribute>();
tk.Reset();
for (int start = 0; start < codePointCount; ++start)
{
for (int end = start + minGram; end <= Math.Min(codePointCount, start + maxGram); ++end)
{
assertTrue(tk.IncrementToken());
assertEquals(0, offsetAtt.StartOffset());
assertEquals(s.Length, offsetAtt.EndOffset());
int startIndex = Character.OffsetByCodePoints(s, 0, start);
int endIndex = Character.OffsetByCodePoints(s, 0, end);
assertEquals(s.Substring(startIndex, endIndex - startIndex), termAtt.ToString());
}
}
assertFalse(tk.IncrementToken());
}
}