-
Notifications
You must be signed in to change notification settings - Fork 86
/
Copy pathStringDistanceTest.cs
137 lines (102 loc) · 3.92 KB
/
StringDistanceTest.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
namespace Signum.Test;
public class StringDistanceTest
{
StringDistance d = new StringDistance();
[Fact]
public void ResetLazy()
{
int i = 0;
ResetLazy<string> val = new ResetLazy<string>(() => "hola" + i++);
val.Reset(); //reset before initialized
var str1 = val.Value;
val.Reset(); //reset after initialized
var str2 = val.Value;
Assert.NotEqual(str1, str2);
}
[Fact]
public void LevenshteinDistance()
{
Assert.Equal(1, d.LevenshteinDistance("hi", "ho"));
Assert.Equal(1, d.LevenshteinDistance("hi", "hil"));
Assert.Equal(1, d.LevenshteinDistance("hi", "h"));
}
[Fact]
public void LevenshteinDistanceWeight()
{
Func<StringDistance.Choice<char>, int> w = c => c.HasAdded && char.IsNumber(c.Added) || c.HasRemoved && char.IsNumber(c.Removed) ? 10 : 1;
Assert.Equal(10, d.LevenshteinDistance("hola", "ho5la", weight: w));
Assert.Equal(10, d.LevenshteinDistance("ho5la", "hola", weight: w));
Assert.Equal(10, d.LevenshteinDistance("ho5la", "hojla", weight: w));
Assert.Equal(10, d.LevenshteinDistance("hojla", "ho5la", weight: w));
Assert.Equal(10, d.LevenshteinDistance("ho5la", "ho6la", weight: w));
}
[Fact]
public void LongestCommonSubsequence()
{
Assert.Equal(4, d.LongestCommonSubsequence("hallo", "halo"));
Assert.Equal(7, d.LongestCommonSubsequence("SupeMan", "SuperMan"));
Assert.Equal(0, d.LongestCommonSubsequence("aoa", ""));
}
[Fact]
public void LongestCommonSubstring()
{
Assert.Equal(3, d.LongestCommonSubstring("hallo", "halo"));
Assert.Equal(4, d.LongestCommonSubstring("SupeMan", "SuperMan"));
Assert.Equal(0, d.LongestCommonSubstring("aoa", ""));
}
[Fact]
public void Diff()
{
var result = d.Diff("en un lugar de la mancha".ToCharArray(), "in un place de la mincha".ToCharArray());
var str = result.ToString("");
Assert.Equal("-e+in un +pl-u-ga-r+c+e de la m-a+incha", str);
}
[Fact]
public void DiffWords()
{
var result = d.DiffWords(
"Soft drinks, coffees, teas, beers, and ginger ales",
"Soft drinks, coffees, teas and beers");
var str = result.ToString("");
Assert.Equal("Soft drinks, coffees, teas-,- -beers-, and -ginger- -ales+beers", str);
}
[Fact]
public void Choices()
{
var result = d.LevenshteinChoices("en un lugar de la mancha".ToCharArray(), "in un legarito de la mincha".ToCharArray());
var str = result.ToString("");
Assert.Equal("[-e+i]n un l[-u+e]gar+i+t+o de la m[-a+i]ncha", str);
}
[Fact]
public void DiffText()
{
var text1 =
@" Hola Pedro
Que tal
Bien
Adios Juan";
var text2 =
@" Hola Pedri
Que til
Adios Juani";
var result = d.DiffText(text1, text2);
var str = result.ToString(l => (l.Action == StringDistance.DiffAction.Added ? "[+]" :
l.Action == StringDistance.DiffAction.Removed ? "[-]" : "[=]") + l.Value.ToString(""), "\n");
Assert.Equal(
@"[=] Hola -Pedro+Pedri
[-]-Que tal
[-]-Bien
[=]
[+]+Que til
[=]Adios -Juan+Juani", str);
}
[Fact]
public void SmithWatermanScore()
{
Assert.Equal(4 * 2, d.SmithWatermanScore("Hola dola caracola", pattern: "dola"));
Assert.Equal(3 * 2 - 1, d.SmithWatermanScore("Hola dola caracola", pattern: "dila"));
Assert.Equal((3 * 2 - 1, "dola"), d.SmithWatermanScoreWithResult("Hola dola caracola", pattern: "dila"));
Assert.Equal((3 * 2 - 1, "dla"), d.SmithWatermanScoreWithResult("Hola dola caracola", pattern: "dla"));
Assert.Equal((7 * 2 - 1, "carcola"), d.SmithWatermanScoreWithResult("Hola dola carcola", pattern: "caracola"));
}
}