public static void Main(string[] args) { const int threads = 4; const int per_thread = 1000000; const int DataSize = threads * per_thread; SearchTree mySearchTree = new SearchTree(); var random = new Random(); var added = new int[DataSize]; Console.Out.WriteLine("Inserting into tree"); var stopWatch = new Stopwatch(); stopWatch.Start(); Parallel.For(0, threads, (int thread) => { for (int i = 0; i < per_thread; i++) { mySearchTree.Insert(added[thread * per_thread + i] = random.Next(DataSize)); } }); stopWatch.Stop(); var ts = stopWatch.Elapsed; string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10); Console.Out.WriteLine(DataSize + " insertions completed in " + elapsedTime + " on " + threads + " threads"); Debug.Assert(!mySearchTree.Contains(-1), "Tree had -1, which was not inserted"); foreach (var item in added) { Debug.Assert(mySearchTree.Contains(item), "Tree couldn't find " + item); } //remove ~ 1/2 of the nodes, check for validity var removed = new System.Collections.Generic.HashSet <int>(); for (var index = 0; index < DataSize; index += 2) { var val = added[index]; if (!removed.Contains(val)) { removed.Add(val); Debug.Assert(mySearchTree.Remove(val), "Couldn't remove " + val); Debug.Assert(!mySearchTree.Contains(val), "Found " + val + " after removal"); } } Console.Out.WriteLine("Test completed successfully"); }
//Returns a new SearchTree and populates data param with the data used public SearchTree buildTreeAndData(int[] data) { Assert.That(data.Length == DataSize); var tree = new SearchTree(); var added = new System.Collections.Generic.HashSet<int>(); int data_index = 0; while(added.Count < DataSize){ var val = random.Next(DataSize); if(added.Add(val)){ data[data_index] = val; data_index++; } } InParallel(data, (int item) => { Assert.That(tree.Insert(item), "Couldn't insert unique item " + item); Assert.IsFalse(tree.Insert(item), "Inserted same item twice. item = " + item); }); return tree; }
public static void Main(string[] args) { const int threads = 4; const int per_thread = 1000000; const int DataSize = threads * per_thread; SearchTree mySearchTree = new SearchTree(); var random = new Random(); var added = new int[DataSize]; Console.Out.WriteLine("Inserting into tree"); var stopWatch = new Stopwatch(); stopWatch.Start(); Parallel.For(0, threads, (int thread) => { for(int i = 0; i < per_thread; i++){ mySearchTree.Insert(added[thread * per_thread + i] = random.Next(DataSize)); } }); stopWatch.Stop(); var ts = stopWatch.Elapsed; string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10); Console.Out.WriteLine(DataSize + " insertions completed in " + elapsedTime + " on " + threads + " threads"); Debug.Assert(!mySearchTree.Contains(-1), "Tree had -1, which was not inserted"); foreach(var item in added){ Debug.Assert(mySearchTree.Contains(item), "Tree couldn't find " + item); } //remove ~ 1/2 of the nodes, check for validity var removed = new System.Collections.Generic.HashSet<int>(); for(var index = 0; index < DataSize; index+=2){ var val = added[index]; if(!removed.Contains(val)){ removed.Add(val); Debug.Assert(mySearchTree.Remove(val), "Couldn't remove " + val); Debug.Assert(!mySearchTree.Contains(val), "Found " + val + " after removal"); } } Console.Out.WriteLine("Test completed successfully"); }
//Returns a new SearchTree and populates data param with the data used public SearchTree buildTreeAndData(int[] data) { Assert.That(data.Length == DataSize); var tree = new SearchTree(); var added = new System.Collections.Generic.HashSet <int>(); int data_index = 0; while (added.Count < DataSize) { var val = random.Next(DataSize); if (added.Add(val)) { data[data_index] = val; data_index++; } } InParallel(data, (int item) => { Assert.That(tree.Insert(item), "Couldn't insert unique item " + item); Assert.IsFalse(tree.Insert(item), "Inserted same item twice. item = " + item); }); return(tree); }