feat: initial commit
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
using MaigoLabs.NeedLe.Indexer.Han;
|
||||
|
||||
namespace MaigoLabs.NeedLe.Tests.Indexer.Han;
|
||||
|
||||
#region IsHanCharacter
|
||||
|
||||
public sealed class IsHanCharacter_ReturnsTrueForCjkCharactersTest : NeedleTestBase
|
||||
{
|
||||
[Fact]
|
||||
public void Execute()
|
||||
{
|
||||
Assert.True(HanVariantProvider.IsHanCharacter('中'));
|
||||
Assert.True(HanVariantProvider.IsHanCharacter('国'));
|
||||
Assert.True(HanVariantProvider.IsHanCharacter('日'));
|
||||
Assert.True(HanVariantProvider.IsHanCharacter('本'));
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class IsHanCharacter_ReturnsFalseForNonCjkCharactersTest : NeedleTestBase
|
||||
{
|
||||
[Fact]
|
||||
public void Execute()
|
||||
{
|
||||
Assert.False(HanVariantProvider.IsHanCharacter('a'));
|
||||
Assert.False(HanVariantProvider.IsHanCharacter('あ'));
|
||||
Assert.False(HanVariantProvider.IsHanCharacter('ア'));
|
||||
Assert.False(HanVariantProvider.IsHanCharacter('1'));
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region GetHanVariants
|
||||
|
||||
public sealed class GetHanVariants_ReturnsVariantsForSimplifiedTraditionalTest : NeedleTestBase
|
||||
{
|
||||
[Fact]
|
||||
public void Execute()
|
||||
{
|
||||
var provider = new HanVariantProvider();
|
||||
// 国 (simplified) and 國 (traditional) should be variants of each other
|
||||
var variants1 = provider.GetHanVariants('国');
|
||||
var variants2 = provider.GetHanVariants('國');
|
||||
Assert.Contains('国', variants1);
|
||||
Assert.Contains('國', variants1);
|
||||
Assert.Contains('国', variants2);
|
||||
Assert.Contains('國', variants2);
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class GetHanVariants_ReturnsCharacterItselfForNoVariantsTest : NeedleTestBase
|
||||
{
|
||||
[Fact]
|
||||
public void Execute()
|
||||
{
|
||||
var provider = new HanVariantProvider();
|
||||
var variants = provider.GetHanVariants('一');
|
||||
Assert.Contains('一', variants);
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class GetHanVariants_ReturnsEmptyForNonHanCharactersTest : NeedleTestBase
|
||||
{
|
||||
[Fact]
|
||||
public void Execute()
|
||||
{
|
||||
var provider = new HanVariantProvider();
|
||||
Assert.Empty(provider.GetHanVariants('a'));
|
||||
Assert.Empty(provider.GetHanVariants('あ'));
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
using MaigoLabs.NeedLe.Indexer.Han;
|
||||
|
||||
namespace MaigoLabs.NeedLe.Tests.Indexer.Han;
|
||||
|
||||
public sealed class GetPinyinCandidates_ReturnsPinyinForHanCharacterTest : NeedleTestBase
|
||||
{
|
||||
[Fact]
|
||||
public void Execute()
|
||||
{
|
||||
var candidates = PinyinHelper.GetPinyinCandidates('中').ToList();
|
||||
Assert.Contains("zhong", candidates);
|
||||
Assert.Contains("zh", candidates); // initial
|
||||
Assert.Contains("z", candidates); // first letter
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class GetPinyinCandidates_ReturnsMultiplePinyinForPolyphonicTest : NeedleTestBase
|
||||
{
|
||||
[Fact]
|
||||
public void Execute()
|
||||
{
|
||||
// 行 can be "xing" or "hang"
|
||||
var candidates = PinyinHelper.GetPinyinCandidates('行').ToList();
|
||||
Assert.Contains("xing", candidates);
|
||||
Assert.Contains("hang", candidates);
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class GetPinyinCandidates_IncludesFuzzyPinyinVariantsTest : NeedleTestBase
|
||||
{
|
||||
[Fact]
|
||||
public void Execute()
|
||||
{
|
||||
// 风 is "feng", should also have fuzzy variant "fen"
|
||||
var candidates = PinyinHelper.GetPinyinCandidates('风').ToList();
|
||||
Assert.Contains("feng", candidates);
|
||||
Assert.Contains("fen", candidates); // fuzzy: eng -> en
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class GetPinyinCandidates_ReturnsEmptyForNonHanCharactersTest : NeedleTestBase
|
||||
{
|
||||
[Fact]
|
||||
public void Execute()
|
||||
{
|
||||
Assert.Empty(PinyinHelper.GetPinyinCandidates('a'));
|
||||
Assert.Empty(PinyinHelper.GetPinyinCandidates('あ'));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
using MaigoLabs.NeedLe.Indexer.Han;
|
||||
|
||||
namespace MaigoLabs.NeedLe.Tests.Indexer.Han;
|
||||
|
||||
public sealed class UnionFindSet_FindsSelfAsRootInitiallyTest : NeedleTestBase
|
||||
{
|
||||
[Fact]
|
||||
public void Execute()
|
||||
{
|
||||
var ufs = new UnionFindSet();
|
||||
Assert.Equal(1, ufs.Find(1));
|
||||
Assert.Equal(2, ufs.Find(2));
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class UnionFindSet_UnionsTwoElementsTest : NeedleTestBase
|
||||
{
|
||||
[Fact]
|
||||
public void Execute()
|
||||
{
|
||||
var ufs = new UnionFindSet();
|
||||
ufs.Union(1, 2);
|
||||
Assert.Equal(ufs.Find(1), ufs.Find(2));
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class UnionFindSet_UnionsMultipleElementsTransitivelyTest : NeedleTestBase
|
||||
{
|
||||
[Fact]
|
||||
public void Execute()
|
||||
{
|
||||
var ufs = new UnionFindSet();
|
||||
ufs.Union(1, 2);
|
||||
ufs.Union(2, 3);
|
||||
ufs.Union(4, 5);
|
||||
Assert.Equal(ufs.Find(1), ufs.Find(3));
|
||||
Assert.NotEqual(ufs.Find(1), ufs.Find(4));
|
||||
ufs.Union(3, 4);
|
||||
Assert.Equal(ufs.Find(1), ufs.Find(5));
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class UnionFindSet_IteratesAllKeysTest : NeedleTestBase
|
||||
{
|
||||
[Fact]
|
||||
public void Execute()
|
||||
{
|
||||
var ufs = new UnionFindSet();
|
||||
ufs.Union(1, 2);
|
||||
ufs.Union(3, 4);
|
||||
var keys = ufs.Keys.ToList();
|
||||
Assert.Contains(1, keys);
|
||||
Assert.Contains(2, keys);
|
||||
Assert.Contains(3, keys);
|
||||
Assert.Contains(4, keys);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user