Пример #1
0
        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");
        }
Пример #2
0
 //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;
 }
Пример #3
0
        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");
        }
Пример #4
0
        //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);
        }