67 lines
2.2 KiB
C#
67 lines
2.2 KiB
C#
using MaigoLabs.NeedLe.Common;
|
|
using MaigoLabs.NeedLe.Common.Extensions;
|
|
using MaigoLabs.NeedLe.Indexer.Trie;
|
|
|
|
namespace MaigoLabs.NeedLe.Tests.Indexer;
|
|
|
|
#region GraftTriePaths
|
|
|
|
public sealed class GraftTriePaths_GraftsPathsAccordingToNormalizationRulesTest : NeedleTestBase
|
|
{
|
|
[Fact]
|
|
public void Execute()
|
|
{
|
|
// Build a trie with tokens containing normalized forms
|
|
var trie = TrieBuilder.BuildTrie([
|
|
(0, "sya".ToCodePoints()), // normalized form of "sha"
|
|
(1, "tu".ToCodePoints()), // normalized form of "tsu"
|
|
]);
|
|
|
|
// Graft paths so that "sha" -> "sya" and "tsu" -> "tu"
|
|
TrieBuilder.GraftTriePaths(trie, [
|
|
("sha".ToCodePoints().ToArray(), "sya".ToCodePoints().ToArray()),
|
|
("tsu".ToCodePoints().ToArray(), "tu".ToCodePoints().ToArray()),
|
|
]);
|
|
|
|
// Now we should be able to traverse using both the original and grafted paths
|
|
var syaNode = trie.Traverse("sya".ToCodePoints().ToArray());
|
|
var shaNode = trie.Traverse("sha".ToCodePoints().ToArray());
|
|
Assert.NotNull(syaNode);
|
|
Assert.NotNull(shaNode);
|
|
Assert.Same(syaNode, shaNode); // Both paths should lead to the same node
|
|
|
|
var tuNode = trie.Traverse("tu".ToCodePoints().ToArray());
|
|
var tsuNode = trie.Traverse("tsu".ToCodePoints().ToArray());
|
|
Assert.NotNull(tuNode);
|
|
Assert.NotNull(tsuNode);
|
|
Assert.Same(tuNode, tsuNode);
|
|
}
|
|
}
|
|
|
|
public sealed class GraftTriePaths_HandlesChainedGraftRulesTest : NeedleTestBase
|
|
{
|
|
[Fact]
|
|
public void Execute()
|
|
{
|
|
var trie = TrieBuilder.BuildTrie([
|
|
(0, "o".ToCodePoints()), // normalized vowel
|
|
]);
|
|
|
|
// Chain: "ou" -> "o", "oo" -> "o"
|
|
TrieBuilder.GraftTriePaths(trie, [
|
|
("ou".ToCodePoints().ToArray(), "o".ToCodePoints().ToArray()),
|
|
("oo".ToCodePoints().ToArray(), "o".ToCodePoints().ToArray()),
|
|
]);
|
|
|
|
var oNode = trie.Traverse("o".ToCodePoints().ToArray());
|
|
var ouNode = trie.Traverse("ou".ToCodePoints().ToArray());
|
|
var ooNode = trie.Traverse("oo".ToCodePoints().ToArray());
|
|
|
|
Assert.NotNull(oNode);
|
|
Assert.Same(oNode, ouNode);
|
|
Assert.Same(oNode, ooNode);
|
|
}
|
|
}
|
|
|
|
#endregion
|