static void Main(string[] args) { long count = 0; trie = new Trie(); dict = new Dictionary<string, bool>(); foreach (var word in Random.Words(10, 40)) { trie.Add(word); dict[word] = true; count++; } Console.Clear(); // 123 test bench("123", 0); // test an early find on list bench("car", 30); // test the last one on list bench("caterpillar", 60); Console.WriteLine(); Console.WriteLine(count); Console.Read(); }
public void testMatches() { Dictionary dict = new Dictionary(); dict.words.Add("abcdef"); dict.words.Add("bbcdezg"); dict.words.Add("acc"); dict.words.Add("bac"); TrieNode root = TrieNode.createRootNode(dict); List<WordMatch> matches; root.parseText("abcdefghi", out matches); Assert.AreEqual(3, matches.Count); Assert.AreEqual(dict.words[2], matches[0].Word); //acc Assert.AreEqual(1, matches[0].LeftmostChange); Assert.AreEqual(1, matches[0].RightmostChange); Assert.AreEqual(dict.words[0], matches[1].Word); //abcdef Assert.AreEqual(0, matches[1].NumChanges); Assert.AreEqual(dict.words[1], matches[2].Word); //bbcdezg Assert.AreEqual(0, matches[2].LeftmostChange); Assert.AreEqual(1, matches[2].RightmostChange); }
public dynamic Get(int count) { while (words.Count < count) words.AddRange(Trie.Random.Words(5, 10)); DateTime sTime; var trie = new Trie.Trie(); var dict = new Dictionary<string, bool>(); var testWords = new List<string> {"123", "car", "caterpillar" }; var trieData = new List<List<int>>(); var dictData = new List<List<int>>(); int x = 0; int jumps = 5000; while (x < count) { foreach (var word in words.Take(jumps).Skip(x)) { trie.Add(word); dict[word] = true; } int dictZum = 0; int trieZum = 0; foreach (var word in testWords) { for (int J = 0; J < TESTS; J++) { sTime = DateTime.Now; for (int i = 0; i < LOOPS; i++) trie.Contains(word); trieZum += sTime.Diff(); sTime = DateTime.Now; for (int i = 0; i < LOOPS; i++) dict.ContainsKey(word); dictZum += sTime.Diff(); } } x += jumps; trieData.Add(new List<int> { x, trieZum / (TESTS * testWords.Count) }); dictData.Add(new List<int> { x, dictZum / (TESTS * testWords.Count) }); } dynamic chart = new ExpandoObject(); chart.Label = "TrieBenchmark"; chart.TrieData = trieData; chart.DictData = dictData; return Json(chart); }
public void testBasicMatches() { Dictionary dict = new Dictionary(); dict.words.Add("abc"); dict.words.Add("bccd"); dict.words.Add("abcc"); dict.words.Add("bab"); TrieNode root = TrieNode.createRootNode(dict); List<WordMatch> matches; root.parseText("abccd", out matches); Assert.AreEqual(2, matches.Count); Assert.AreEqual(dict.words[0], matches[0].Word); Assert.AreEqual(dict.words[2], matches[1].Word); }
public void testAddWord() { Dictionary dict = new Dictionary(); dict.words.Add("abc"); dict.words.Add("acc"); TrieNode root = TrieNode.createRootNode(dict); Assert.AreEqual(1, root.childrenList.Count); TrieNode nodeA = root.children[0]; Assert.AreSame(root.childrenList[0].Item2, nodeA); Assert.AreEqual(2, nodeA.childrenList.Count); TrieNode nodeB = nodeA.children[1]; TrieNode nodeC = nodeA.children[2]; Assert.AreEqual(1, nodeB.childrenList.Count); Assert.AreEqual(1, nodeC.childrenList.Count); }
public static TrieNode createRootNode(Dictionary dict) { TrieNode root = new TrieNode(); root.CurrentLength = 0; for (int dIdx = 0; dIdx < dict.words.Count; ++dIdx) { root.addWord(dict.words[dIdx]); } return root; }