-
Notifications
You must be signed in to change notification settings - Fork 299
/
Copy pathTernarySearchTree_Tests.cs
156 lines (107 loc) · 4.51 KB
/
TernarySearchTree_Tests.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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
using System;
using System.Collections.Generic;
using System.Linq;
using Advanced.Algorithms.DataStructures;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace Advanced.Algorithms.Tests.DataStructures
{
[TestClass]
public class TernarySearchTreeTests
{
private static readonly Random Random = new Random();
[TestMethod]
public void TernarySearchTree_Smoke_Test()
{
var tree = new TernarySearchTree<char>();
tree.Insert("cat".ToCharArray());
//IEnumerable test
Assert.AreEqual(tree.Count, tree.Count());
tree.Insert("cats".ToCharArray());
//IEnumerable test
Assert.AreEqual(tree.Count, tree.Count());
tree.Insert("cut".ToCharArray());
//IEnumerable test
Assert.AreEqual(tree.Count, tree.Count());
tree.Insert("cuts".ToCharArray());
//IEnumerable test
Assert.AreEqual(tree.Count, tree.Count());
tree.Insert("up".ToCharArray());
//IEnumerable test
Assert.AreEqual(tree.Count, tree.Count());
tree.Insert("bug".ToCharArray());
//IEnumerable test
Assert.AreEqual(tree.Count, tree.Count());
tree.Insert("bugs".ToCharArray());
//IEnumerable test
Assert.AreEqual(tree.Count, tree.Count());
//IEnumerable test
Assert.AreEqual(tree.Count, tree.Count());
Assert.IsTrue(tree.Contains("cat".ToCharArray()));
Assert.IsTrue(tree.Contains("cut".ToCharArray()));
Assert.IsFalse(tree.Contains("bu".ToCharArray()));
Assert.IsTrue(tree.ContainsPrefix("bu".ToCharArray()));
tree.Delete("cuts".ToCharArray());
Assert.IsFalse(tree.Contains("cuts".ToCharArray()));
var matches = tree.StartsWith("u".ToCharArray());
Assert.IsTrue(matches.Count == 1);
//IEnumerable test
Assert.AreEqual(tree.Count, tree.Count());
matches = tree.StartsWith("cu".ToCharArray());
Assert.IsTrue(matches.Count == 1);
matches = tree.StartsWith("bu".ToCharArray());
Assert.IsTrue(matches.Count == 2);
matches = tree.StartsWith("c".ToCharArray());
Assert.IsTrue(matches.Count == 3);
matches = tree.StartsWith("ca".ToCharArray());
Assert.IsTrue(matches.Count == 2);
tree.Delete("cats".ToCharArray());
//IEnumerable test
Assert.AreEqual(tree.Count, tree.Count());
tree.Delete("up".ToCharArray());
//IEnumerable test
Assert.AreEqual(tree.Count, tree.Count());
tree.Delete("bug".ToCharArray());
//IEnumerable test
Assert.AreEqual(tree.Count, tree.Count());
tree.Delete("bugs".ToCharArray());
//IEnumerable test
Assert.AreEqual(tree.Count, tree.Count());
tree.Delete("cat".ToCharArray());
//IEnumerable test
Assert.AreEqual(tree.Count, tree.Count());
tree.Delete("cut".ToCharArray());
//IEnumerable test
Assert.AreEqual(tree.Count, tree.Count());
}
[TestMethod]
public void TernarySearchTree_Test()
{
var tree = new TernarySearchTree<char>();
var testCount = 1000;
var testStrings = new List<string>();
while (testCount > 0)
{
var testString = RandomString(3);
testStrings.Add(testString);
testCount--;
}
testStrings = new List<string>(testStrings.Distinct());
foreach (var testString in testStrings) tree.Insert(testString.ToArray());
//IEnumerable test
Assert.AreEqual(tree.Count, tree.Count());
foreach (var item in tree)
{
var existing = new string(item);
Assert.IsTrue(testStrings.Contains(existing));
}
foreach (var item in testStrings) Assert.IsTrue(tree.Contains(item.ToArray()));
foreach (var testString in testStrings) tree.Delete(testString.ToArray());
}
public static string RandomString(int length)
{
const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
return new string(Enumerable.Repeat(chars, length)
.Select(s => s[Random.Next(s.Length)]).ToArray());
}
}
}