Beispiel #1
0
 public void Clear()
 {
     this._nodes = new SetHashList <T>(this._nodes.Equate, this._nodes.Hash);
     this._edges = new OmnitreeLinked <Edge, T>(
         new T[] { this._edges.Min(0), this._edges.Min(1) },
         new T[] { this._edges.Max(0), this._edges.Max(1) },
         this._edges.Locate, this._edges.Compare, this._edges.Average);
 }
Beispiel #2
0
 public GraphSetOmnitree(Equate <T> equate, Compare <T> compare, Hash <T> hash, T min, T max, Omnitree.Average <T> average)
 {
     this._nodes = new SetHashList <T>(equate, hash);
     Omnitree.Locate <Edge, T> locationFunction = (Edge a) => { return(Accessor.Get(new T[] { a.Start, a.End })); };
     this._edges = new OmnitreeLinked <Edge, T>(
         new T[] { min, min },
         new T[] { max, max },
         locationFunction, compare, average);
 }
Beispiel #3
0
        static void Main(string[] args)
        {
            Random random = new Random();
            int    test   = 10;

            Console.WriteLine("Welcome To SevenFramework! :)");
            Console.WriteLine();
            Console.WriteLine("You are runnning the Data Structures example.");
            Console.WriteLine("======================================================");
            Console.WriteLine();

            #region Link

            Console.WriteLine("  Testing Link-------------------------------");
            Console.WriteLine("   Size: 6");
            Link link = new Link <int, int, int, int, int, int>(0, 1, 2, 3, 4, 5);
            Console.Write("    Traversal: ");
            link.Stepper((dynamic current) => { Console.Write(current); });
            Console.WriteLine();
            // Saving to a file
            //string linklink_file = "link." + ToExtension(link.GetType());
            //Console.WriteLine("    File: \"" + linklink_file + "\"");
            //Console.WriteLine("    Serialized: " + Serialize(linklink_file, link));
            //Link<int, int, int, int, int, int> deserialized_linklink;
            //Console.WriteLine("    Deserialized: " + Deserialize(linklink_file, out deserialized_linklink));
            Console.WriteLine();

            #endregion

            #region Array

            Console.WriteLine("  Testing Array_Array<int>-------------------");
            Array <int> array = new ArrayArray <int>(test);
            for (int i = 0; i < test; i++)
            {
                array[i] = i;
            }
            Console.Write("    Traversal: ");
            array.Stepper((int current) => { Console.Write(current); });
            Console.WriteLine();
            // Saving to a file
            //string arrayarray_file = "array." + ToExtension(array.GetType());
            //Console.WriteLine("    File: \"" + arrayarray_file + "\"");
            //Console.WriteLine("    Serialized: " + Serialize(arrayarray_file, array));
            //ArrayArray<int> deserialized_arrayarray;
            //Console.WriteLine("    Deserialized: " + Deserialize(arrayarray_file, out deserialized_arrayarray));
            Console.WriteLine();

            #endregion

            #region List

            Console.WriteLine("  Testing List_Array<int>--------------------");
            List <int> list_array = new ListArray <int>(test);
            for (int i = 0; i < test; i++)
            {
                list_array.Add(i);
            }
            Console.Write("    Traversal: ");
            list_array.Stepper((int current) => { Console.Write(current); });
            Console.WriteLine();
            // Saving to a file
            //string listarray_file = "list_array." + ToExtension(list_array.GetType());
            //Console.WriteLine("    File: \"" + listarray_file + "\"");
            //Console.WriteLine("    Serialized: " + Serialize(listarray_file, list_array));
            //ListArray<int> deserialized_listarray;
            //Console.WriteLine("    Deserialized: " + Deserialize(listarray_file, out deserialized_listarray));
            Console.WriteLine();

            Console.WriteLine("  Testing List_Linked<int>-------------------");
            List <int> list_linked = new ListLinked <int>();
            for (int i = 0; i < test; i++)
            {
                list_linked.Add(i);
            }
            Console.Write("    Traversal: ");
            list_linked.Stepper((int current) => { Console.Write(current); });
            Console.WriteLine();
            // Saving to a file
            //string listlinked_file = "list_linked." + ToExtension(list_linked.GetType());
            //Console.WriteLine("    File: \"" + listlinked_file + "\"");
            //Console.WriteLine("    Serialized: " + Serialize(listlinked_file, list_linked));
            //ListLinked<int> deserialized_listlinked;
            //Console.WriteLine("    Deserialized: " + Deserialize(listlinked_file, out deserialized_listlinked));
            Console.WriteLine();

            #endregion

            #region Stack

            Console.WriteLine("  Testing Stack_Linked<int>------------------");
            Stack <int> stack_linked = new StackLinked <int>();
            for (int i = 0; i < test; i++)
            {
                stack_linked.Push(i);
            }
            Console.Write("    Traversal: ");
            stack_linked.Stepper((int current) => { Console.Write(current); });
            Console.WriteLine();
            // Saving to a file
            //string stacklinked_file = "stack_linked." + ToExtension(stack_linked.GetType());
            //Console.WriteLine("    File: \"" + stacklinked_file + "\"");
            //Console.WriteLine("    Serialized: " + Serialize(stacklinked_file, stack_linked));
            //StackLinked<int> deserialized_stacklinked;
            //Console.WriteLine("    Deserialized: " + Deserialize(stacklinked_file, out deserialized_stacklinked));
            Console.WriteLine();

            #endregion

            #region Queue

            Console.WriteLine("  Testing Queue_Linked<int>------------------");
            Queue <int> queue_linked = new QueueLinked <int>();
            for (int i = 0; i < test; i++)
            {
                queue_linked.Enqueue(i);
            }
            Console.Write("    Traversal: ");
            queue_linked.Stepper((int current) => { Console.Write(current); });
            Console.WriteLine();
            // Saving to a file
            //string queuelinked_file = "queue_linked." + ToExtension(queue_linked.GetType());
            //Console.WriteLine("    File: \"" + queuelinked_file + "\"");
            //Console.WriteLine("    Serialized: " + Serialize(queuelinked_file, queue_linked));
            //QueueLinked<int> deserialized_queuelinked;
            //Console.WriteLine("    Deserialized: " + Deserialize(queuelinked_file, out deserialized_queuelinked));
            Console.WriteLine();

            #endregion

            #region Heap

            Console.WriteLine("  Testing Heap_Array<int>--------------------");
            Heap <int> heap_array = new HeapArray <int>(Compute <int> .Compare);
            for (int i = 0; i < test; i++)
            {
                heap_array.Enqueue(i);
            }
            Console.Write("    Delegate: ");
            heap_array.Stepper((int current) => { Console.Write(current); });
            Console.WriteLine();
            // Saving to a file
            //string heaplinked_file = "heap_array." + ToExtension(heap_array.GetType());
            //Console.WriteLine("    File: \"" + heaplinked_file + "\"");
            //Console.WriteLine("    Serialized: " + Serialize(heaplinked_file, heap_array));
            //HeapArray<int> deserialized_heaplinked;
            //Console.WriteLine("    Deserialized: " + Deserialize(heaplinked_file, out deserialized_heaplinked));
            Console.WriteLine();

            #endregion

            #region Tree

            Console.WriteLine("  Testing Tree_Map<int>----------------------");
            Tree <int> tree_Map = new TreeMap <int>(0, Compute <int> .Equate, Hash.Default);
            for (int i = 1; i < test; i++)
            {
                tree_Map.Add(i, i / (int)System.Math.Sqrt(test));
            }
            Console.Write("    Children of 0 (root): ");
            tree_Map.Children(0, (int i) => { Console.Write(i + " "); });
            Console.WriteLine();
            Console.Write("    Children of " + ((int)System.Math.Sqrt(test) - 1) + " (root): ");
            tree_Map.Children(((int)System.Math.Sqrt(test) - 1), (int i) => { Console.Write(i + " "); });
            Console.WriteLine();
            Console.Write("    Traversal: ");
            tree_Map.Stepper((int i) => { Console.Write(i + " "); });
            Console.WriteLine();
            // Saving to a file
            //string treelinked_file = "tree_Map." + ToExtension(tree_Map.GetType());
            //Console.WriteLine("    File: \"" + treelinked_file + "\"");
            //Console.WriteLine("    Serialized: " + Serialize(treelinked_file, tree_Map));
            //TreeMap<int> deserialized_treelinked;
            //Console.WriteLine("    Deserialized: " + Deserialize(treelinked_file, out deserialized_treelinked));
            Console.WriteLine();

            #endregion

            #region AVL Tree

            //Console.WriteLine("  Testing AvlTree_Linked<int>----------------");
            //// Construction
            //AvlTree<int> avlTree_linked = new AvlTree_Linked<int>(Logic.compare);
            //// Adding Items
            //Console.Write("    Adding (0-" + test + ")...");
            //for (int i = 0; i < test; i++)
            //	avlTree_linked.Add(i);
            //Console.WriteLine();
            //// Iteration
            //Console.Write("    Traversal: ");
            //avlTree_linked.Stepper((int current) => { Console.Write(current); });
            //Console.WriteLine();
            //// Removal
            //int avl_tree_linked_removal = random.Next(0, test);
            //avlTree_linked.Remove(avl_tree_linked_removal);
            //Console.Write("    Remove(" + avl_tree_linked_removal + "): ");
            //avlTree_linked.Stepper((int current) => { Console.Write(current); });
            //Console.WriteLine();
            //// Look Up Items
            //int avl_tree_linked_lookup = random.Next(0, test);
            //while (avl_tree_linked_lookup == avl_tree_linked_removal)
            //	avl_tree_linked_lookup = random.Next(0, test);
            //Console.WriteLine("    Look Up (" + avl_tree_linked_lookup + "): " + avlTree_linked.TryGet(avl_tree_linked_lookup, Logic.compare, out temp));
            //Console.WriteLine("    Look Up (" + avl_tree_linked_removal + "): " + avlTree_linked.TryGet(avl_tree_linked_removal, Logic.compare, out temp));
            //avlTree_linked.Get(avl_tree_linked_lookup, Logic.compare);
            //// Current Min-Max Values
            //Console.WriteLine("    Least: " + avlTree_linked.CurrentLeast + " Greatest: " + avlTree_linked.CurrentGreatest);
            //// Saving to a file
            //string avltreelinked_file = "avlTree_linked." + ToExtension(avlTree_linked.GetType());
            //Console.WriteLine("    File: \"" + avltreelinked_file + "\"");
            //Console.WriteLine("    Serialized: " + Serialize(avltreelinked_file, avlTree_linked));
            //AvlTree_Linked<int> deserialized_avltreelinked;
            //Console.WriteLine("    Deserialized: " + Deserialize(avltreelinked_file, out deserialized_avltreelinked));
            //Console.WriteLine();

            #endregion

            #region Red-Black Tree

            Console.WriteLine("  Testing RedBlack_Linked<int>---------------");
            RedBlackTree <int> redBlackTree_linked = new RedBlackTreeLinked <int>(Compute <int> .Compare);
            for (int i = 0; i < test; i++)
            {
                redBlackTree_linked.Add(i);
            }
            Console.Write("    Traversal: ");
            redBlackTree_linked.Stepper((int current) => { Console.Write(current); });
            Console.WriteLine();
            // Saving to a file
            //string redblacktreelinked_file = "redBlackTree_linked." + ToExtension(redBlackTree_linked.GetType());
            //Console.WriteLine("    File: \"" + redblacktreelinked_file + "\"");
            //Console.WriteLine("    Serialized: " + Serialize(redblacktreelinked_file, redBlackTree_linked));
            //RedBlackTreeLinked<int> deserialized_redblacktreelinked;
            //Console.WriteLine("    Deserialized: " + Deserialize(redblacktreelinked_file, out deserialized_redblacktreelinked));
            Console.WriteLine();

            #endregion

            #region BTree

            //Console.WriteLine("  Testing BTree_LinkedArray<int>-------------");
            //BTree<int> btree_linked = new BTree_LinkedArray<int>(Logic.compare, 3);
            //for (int i = 0; i < test; i++)
            //	btree_linked.Add(i);
            //Console.Write("    Delegate: ");
            //btree_linked.Stepper((int current) => { Console.Write(current); });
            //Console.WriteLine();
            //Console.Write("    IEnumerator: ");
            //foreach (int current in btree_linked)
            //	Console.Write(current);
            //Console.WriteLine();
            //Console.WriteLine("  Press Enter to continue...");
            //string maplinked_file = "maplinked.quad";
            //Console.WriteLine("    File: \"" + maplinked_file + "\"");
            //Console.WriteLine("    Serialized: " + Serialize(maplinked_file, hashTable_linked));
            //Omnitree_LinkedLinkedLists<int, double> deserialized_maplinked;
            //Console.WriteLine("    Deserialized: " + Deserialize(maplinked_file, out deserialized_maplinked));
            //Console.ReadLine();
            //Console.WriteLine();

            #endregion

            #region Set

            Console.WriteLine("  Testing Set_Hash<int>----------------------");
            Set <int> set_linked = new SetHashList <int>(Compute <int> .Equate, Hash.Default);
            for (int i = 0; i < test; i++)
            {
                set_linked.Add(i);
            }
            // Traversal
            Console.Write("    Traversal: ");
            set_linked.Stepper((int current) => { Console.Write(current); });
            Console.WriteLine();
            Console.Write("    Table Size: " + (set_linked as SetHashList <int>).TableSize);
            Console.WriteLine();
            Console.WriteLine();

            #endregion

            #region Map

            Console.WriteLine("  Testing MapHashList<int, int>--------------");
            Map <int, int> map_sethash = new MapHashLinked <int, int>(Compute <int> .Equate, Hash.Default);
            for (int i = 0; i < test; i++)
            {
                map_sethash.Add(i, i);
            }
            Console.Write("    Look Ups: ");
            for (int i = 0; i < test; i++)
            {
                Console.Write(map_sethash[i]);
            }
            Console.WriteLine();
            // Traversal
            Console.Write("    Traversal: ");
            map_sethash.Stepper((int current) => { Console.Write(current); });
            Console.WriteLine();
            Console.Write("    Table Size: " + (map_sethash as MapHashLinked <int, int>).TableSize);
            Console.WriteLine();
            Console.WriteLine();

            #endregion

            #region Quad-Tree

            //Console.WriteLine("  Testing Quadtree_Array<int, double>--------");

            //// Construction
            //Quadtree<int, double> quadtree_array = new Quadtree_Array<int, double>(
            //	-test - 1, -test - 1, // minimum dimensions of the quadtree
            //	test + 1, test + 1, // maximum dimensions of the quadtree
            //	(int i, out double x, out double y) => { x = i; y = i; }, // 2D location function
            //	Logic.compare, // axis comparison function
            //	Statistics.Mean); // axis average function
            //// Adding
            //for (int i = 0; i < test; i++)
            //	quadtree_array.Add(i);
            //// Proper Traversal
            //Console.Write("    Traversal: ");
            //quadtree_array.Stepper((int current) => { Console.Write(current); });
            //Console.WriteLine();
            //// Saving to a file
            //string quadtreearray_file = "quadtree_array." + ToExtension(quadtree_array.GetType());
            //Console.WriteLine("    File: \"" + quadtreearray_file + "\"");
            //Console.WriteLine("    Serialized: " + Serialize(quadtreearray_file, quadtree_array));
            //Quadtree_Array<int, double> deserialized_quadtreearray;
            //Console.WriteLine("    Deserialized: " + Deserialize(quadtreearray_file, out deserialized_quadtreearray));
            //Console.WriteLine();

            //Console.WriteLine("  Testing Quadtree_Linked<int, double>-------");

            //// Construction
            //Quadtree<int, double> quadtree_linked = new Quadtree_Linked<int, double>(
            //	-test - 1, -test - 1, // minimum dimensions of the quadtree
            //	test + 1, test + 1, // maximum dimensions of the quadtree
            //	(int i, out double x, out double y) => { x = i; y = i; }, // 2D location function
            //	Logic.compare, // axis comparison function
            //	(Quadtree.Average<double>)Statistics.Mean<double>); // axis average function
            //// Adding
            //for (int i = 0; i < test; i++)
            //	quadtree_linked.Add(i);
            //// Proper Traversal
            //Console.Write("    Traversal: ");
            //quadtree_linked.Stepper((int current) => { Console.Write(current); });
            //Console.WriteLine();
            //// Saving to a file
            //string quadtreelinked_file = "quadtree_linked." + ToExtension(quadtree_linked.GetType());
            //Console.WriteLine("    File: \"" + quadtreelinked_file + "\"");
            //Console.WriteLine("    Serialized: " + Serialize(quadtreelinked_file, quadtree_linked));
            //Quadtree_Linked<int, double> deserialized_quadtreelinked;
            //Console.WriteLine("    Deserialized: " + Deserialize(quadtreelinked_file, out deserialized_quadtreelinked));
            //Console.WriteLine();

            #endregion

            #region Oct-Tree

            //Console.WriteLine("  Testing Octree_Linked<int, double>---------");

            //// Construction
            //Octree<int, double> octree_linked = new Octree_Linked<int, double>(
            //	-test - 1, -test - 1, -test - 1, // minimum dimensions of the octree
            //	test + 1, test + 1, test + 1, // maximum dimensions of the octree
            //	(int i, out double x, out double y, out double z) => { x = i; y = i; z = i; }, // 3D location function
            //	Logic.compare, // axis comparison function
            //	Statistics.Mean); // axis average function
            //// Addition
            //for (int i = 0; i < test; i++)
            //	octree_linked.Add(i);
            //// Proper Traversal
            //Console.Write("    Traversal: ");
            //octree_linked.Stepper((int current) => { Console.Write(current); });
            //Console.WriteLine();
            //// Saving to a file
            //string octree_file = "octree_linked." + ToExtension(octree_linked.GetType());
            //Console.WriteLine("    File: \"" + octree_file + "\"");
            //Console.WriteLine("    Serialized: " + Serialize(octree_file, octree_linked));
            //Octree_Linked<int, double> deserialized_octree;
            //Console.WriteLine("    Deserialized: " + Deserialize(octree_file, out deserialized_octree));
            //Console.WriteLine();

            #endregion

            #region Omnitree

            Console.WriteLine("  Testing OmnitreeLinkedLinked<int, double>-------");
            // Construction
            Omnitree <int, double> omnitree_linked = new OmnitreeLinked <int, double>(
                new double[] { -test - 1, -test - 1, -test - 1 },                               // minimum dimensions of the omnitree
                new double[] { test + 1, test + 1, test + 1 },                                  // maximum dimensions of the omnitree
                (int index) => { return(Accessor.Get(new double[] { index, index, index })); }, // "N-D" location function
                Compute <double> .Compare,                                                      // axis comparison function
                (double a, double b) => { return((a + b) / 2); });                              // axis average function
            // Properties
            Console.WriteLine("      Origin: [" + omnitree_linked.Origin(0) + ", " + omnitree_linked.Origin(1) + ", " + omnitree_linked.Origin(2) + "]");
            Console.WriteLine("      Minimum: [" + omnitree_linked.Min(0) + ", " + omnitree_linked.Min(1) + ", " + omnitree_linked.Min(2) + "]");
            Console.WriteLine("      Maximum: [" + omnitree_linked.Max(0) + ", " + omnitree_linked.Max(1) + ", " + omnitree_linked.Max(2) + "]");
            Console.WriteLine("      Dimensions: " + omnitree_linked.Dimensions);
            Console.WriteLine("      Count: " + omnitree_linked.Count);
            // Addition
            Console.Write("    Adding 0-" + test + ": ");
            for (int i = 0; i < test; i++)
            {
                omnitree_linked.Add(i);
            }
            omnitree_linked.Stepper((int current) => { Console.Write(current); });
            Console.WriteLine();
            Console.WriteLine("      Count: " + omnitree_linked.Count);
            // Traversal
            Console.Write("    Traversal [ALL]: ");
            omnitree_linked.Stepper((int current) => { Console.Write(current); });
            Console.WriteLine();
            // Look Up 1
            Console.Write("    Traversal [(" + (test / 2) + ", " + (test / 2) + ", " + (test / 2) + ")->(" + test + ", " + test + ", " + test + ")]: ");
            omnitree_linked.Stepper((int current) => { Console.Write(current); },
                                    new double[] { test / 2, test / 2, test / 2 },
                                    new double[] { test, test, test });
            Console.WriteLine();
            // Look Up 2
            Console.Write("    Look Up [" + (test / 3) + ", " + (test / 3) + ", " + (test / 3) + "]: ");
            omnitree_linked[(test / 3), (test / 3), (test / 3)]((int current) => { Console.Write(current); });
            Console.WriteLine();
            // Removal
            Console.Write("    Remove 0-" + test / 3 + ": ");
            omnitree_linked.Remove(
                new double[] { 0, 0, 0 },
                new double[] { test / 3, test / 3, test / 3 });
            omnitree_linked.Stepper((int current) => { Console.Write(current); });
            Console.WriteLine();
            Console.WriteLine("      Count: " + omnitree_linked.Count);
            // Clear
            Console.Write("    Clear: ");
            omnitree_linked.Clear();
            omnitree_linked.Stepper((int current) => { Console.Write(current); });
            Console.WriteLine();
            Console.WriteLine("      Count: " + omnitree_linked.Count);
            // Saving to a file
            //string omnitreelinked_file = "omnitree_linkedlinkedlists." + ToExtension(omnitree_linked.GetType());
            //Console.WriteLine("    File: \"" + omnitreelinked_file + "\"");
            //Console.WriteLine("    Serialized: " + Serialize(omnitreelinked_file, omnitree_linked));
            //OmnitreeLinkedLinkedLists<int, double> deserialized_omnitreeLinked;
            //Console.WriteLine("    Deserialized: " + Deserialize(omnitreelinked_file, out deserialized_omnitreeLinked));
            Console.WriteLine();

            //Console.WriteLine("  Testing Omnitree_LinkedArrayLists<int, double>--------");
            //// Construction
            //Omnitree<int, double> omnitree_array = new OmnitreeLinkedArray<int, double>(
            //	new double[] { -test - 1, -test - 1, -test - 1 }, // minimum dimensions of the omnitree
            //	new double[] { test + 1, test + 1, test + 1 }, // maximum dimensions of the omnitree
            //	(int index) => { return Accessor.Get(new double[] { index, index, index }); }, // "N-D" location function
            //	Compute<double>.Compare, // comparison function
            //	(double a, double b) => { return (a + b) / 2; }); // average function
            //// Properties
            //Console.WriteLine("      Origin: [" + omnitree_array.Origin(0) + ", " + omnitree_array.Origin(1) + ", " + omnitree_array.Origin(2) + "]");
            //Console.WriteLine("      Minimum: [" + omnitree_array.Min(0) + ", " + omnitree_array.Min(1) + ", " + omnitree_array.Min(2) + "]");
            //Console.WriteLine("      Maximum: [" + omnitree_array.Max(0) + ", " + omnitree_array.Max(1) + ", " + omnitree_array.Max(2) + "]");
            //Console.WriteLine("      Dimensions: " + omnitree_array.Dimensions);
            //Console.WriteLine("      Count: " + omnitree_array.Count);
            //// Addition
            //Console.Write("    Adding 0-" + test + ": ");
            //for (int i = 0; i < test; i++)
            //	omnitree_array.Add(i);
            //omnitree_array.Stepper((int current) => { Console.Write(current); });
            //Console.WriteLine();
            //Console.WriteLine("      Count: " + omnitree_array.Count);
            //// Traversal
            //Console.Write("    Traversal [ALL]: ");
            //			omnitree_array.Stepper((int current) => { Console.Write(current); });
            //Console.WriteLine();
            //// Look Up
            //Console.Write("    Traversal [" + (test / 2) + "-" + test + "]: ");
            //			omnitree_array.Stepper((int current) => { Console.Write(current); },
            //	new double[] { test / 2, test / 2, test / 2 },
            //	new double[] { test, test, test });
            //Console.WriteLine();
            //// Removal
            //Console.Write("    Remove 0-" + test / 3 + ": ");
            //omnitree_array.Remove(
            //	new double[] { 0, 0, 0 },
            //	new double[] { test / 3, test / 3, test / 3 });
            //omnitree_array.Stepper((int current) => { Console.Write(current); });
            //Console.WriteLine();
            //Console.WriteLine("      Count: " + omnitree_array.Count);
            //// Clear
            //Console.Write("    Clear: ");
            //omnitree_array.Clear();
            //			omnitree_array.Stepper((int current) => { Console.Write(current); });
            //Console.WriteLine();
            //Console.WriteLine("      Count: " + omnitree_array.Count);
            //// Saving to a file
            ////string omnitreearray_file = "omnitree_linkedarraylists." + ToExtension(omnitree_array.GetType());
            ////Console.WriteLine("    File: \"" + omnitreearray_file + "\"");
            ////Console.WriteLine("    Serialized: " + Serialize(omnitreearray_file, omnitree_array));
            ////OmnitreeLinkedLinkedLists<int, double> deserialized_omnitreearray;
            ////Console.WriteLine("    Deserialized: " + Deserialize(omnitreearray_file, out deserialized_omnitreearray));
            //Console.WriteLine();

            #endregion

            #region KD Tree

            ////List<KdTreeNode<float, string>> testNodes = new List_Linked<KdTreeNode<float, string>>();
            //KdTree_Linked<string, float> tree = new KdTree_Linked<string, float>(
            //	2,
            //	Logic.compare,
            //	float.MinValue,
            //	float.MaxValue,
            //	0,
            //	Arithmetic.Add,
            //	Arithmetic.Subtract,
            //	Arithmetic.Multiply);

            //List<KdTree_Linked<string, float>.Node> testNodes =
            //	new List_Linked<KdTree_Linked<string, float>.Node>
            //{
            //	new KdTree_Linked<string, float>.Node(new float[] { 5, 5 }, "Root"),
            //	new KdTree_Linked<string, float>.Node(new float[] { 2.5f, 2.5f }, "Root-Left"),
            //	new KdTree_Linked<string, float>.Node(new float[] { 7.5f, 7.5f }, "Root-Right"),
            //	new KdTree_Linked<string, float>.Node(new float[] { 1, 10 }, "Root-Left-Left"),
            //	new KdTree_Linked<string, float>.Node(new float[] { 10, 10 }, "Root-Right-Right")
            //};

            //foreach (var node in testNodes)
            //	if (!tree.Add(node.Point, node.Value))
            //		throw new Exception("Failed to add node to tree");

            //var nodesToRemove = new KdTreeNode<float, string>[] {
            //	testNodes[1], // Root-Left
            //	testNodes[0] // Root
            //};

            //foreach (var nodeToRemove in nodesToRemove)
            //{
            //	tree.RemoveAt(nodeToRemove.Point);
            //	testNodes.Remove(nodeToRemove);

            //	Assert.IsNull(tree.FindValue(nodeToRemove.Value));
            //	Assert.IsNull(tree.FindValueAt(nodeToRemove.Point));

            //	foreach (var testNode in testNodes)
            //	{
            //		Assert.AreEqual(testNode.Value, tree.FindValueAt(testNode.Point));
            //		Assert.AreEqual(testNode.Point, tree.FindValue(testNode.Value));
            //	}

            //	Assert.AreEqual(testNodes.Count, tree.Count);
            //}

            #endregion

            #region Graph

            Console.WriteLine("  Testing Graph_SetOmnitree<int>-------------");
            Graph <int> graph = new GraphSetOmnitree <int>(Compute <int> .Equate, Compute <int> .Compare, Hash.Default, 0, test, (int a, int b) => { return((a + b) / 2); });
            // add nodes
            for (int i = 0; i < test; i++)
            {
                graph.Add(i);
            }
            // add edges
            for (int i = 0; i < test - 1; i++)
            {
                graph.Add(i, i + 1);
            }
            Console.Write("    Traversal: ");
            graph.Stepper((int current) => { Console.Write(current); });
            Console.WriteLine();
            Console.WriteLine("    Edges: ");
            //((Graph_SetQuadtree<int>)graph)._edges.Foreach((Graph_SetQuadtree<int>.Edge e) => { Console.WriteLine("     " + e.Start + " " + e.End); });
            graph.Stepper(
                (int current) =>
            {
                Console.Write("     " + current + ": ");
                graph.Neighbors(current,
                                (int a) =>
                {
                    Console.Write(a);
                });
                Console.WriteLine();
            });
            // Saving to a file
            //string graph_file = "graph." + ToExtension(graph.GetType());
            //Console.WriteLine("    File: \"" + graph_file + "\"");
            //Console.WriteLine("    Serialized: " + Serialize(graph_file, graph));
            //GraphSetOmnitree<int> deserialized_graph;
            //Console.WriteLine("    Deserialized: " + Deserialize(graph_file, out deserialized_graph));
            Console.WriteLine();

            #endregion

            Console.WriteLine("============================================");
            Console.WriteLine("Examples Complete...");
            Console.ReadLine();
        }
Beispiel #4
0
        public static void TestOmnitree1()
        {
            #region construction

            Omnitree.Locate <TestObject, double> locate = (TestObject record) =>
            {
                return((int i) =>
                {
                    switch (i)
                    {
                    case 0:
                        return record.X;

                    case 1:
                        return record.Y;

                    case 2:
                        return record.Z;

                    default:
                        throw new System.Exception();
                    }
                });
            };

            Compute <double> .Compare(0, 0);

            Omnitree <TestObject, double> omnitree = new OmnitreeLinked <TestObject, double>(
                new double[] { 0, 0, 0 },
                new double[] { 1, 1, 1 },
                locate,
                Compute <double> .Compare,
                (double a, double b) => { return((a + b) / 2); });

            #endregion

            #region random generation

            Console.WriteLine("Generating random data...");

            Random       random  = new Random(0);
            int          count   = 100;
            TestObject[] records = new TestObject[count];
            for (int i = 0; i < count; i++)
            {
                records[i] = new TestObject(i, random.NextDouble(), random.NextDouble(), random.NextDouble());
            }

            Console.WriteLine("Generated random data.");

            #endregion

            #region adding

            Console.WriteLine("Building Omnitree...");

            for (int i = 0; i < count; i++)
            {
                omnitree.Add(records[i]);
                if (i % (count / 10) == 0)
                {
                    Console.WriteLine(((double)i / (double)count * 100D) + "%");
                }
            }

            Console.WriteLine("OmniTree.Count: " + omnitree.Count);
            //Console.WriteLine("OmniTree._top.Count: " + (omnitree as OmnitreeLinked<TestObject, double>)._top.Count);

            int test_count = 0;
            omnitree.Stepper((TestObject record) => { test_count++; });
            Console.WriteLine("OmniTree Stepper Count: " + test_count);

            #endregion

            #region validation

            SetHashArray <TestObject> setHash = new SetHashArray <TestObject>(
                (TestObject a, TestObject b) => { return(a.Id == b.Id); },
                (TestObject a) => { return(a.Id.GetHashCode()); });
            for (int i = 0; i < count; i++)
            {
                setHash.Add(records[i]);
            }

            bool validated = true;
            omnitree.Stepper((TestObject record) => { if (!setHash.Contains(record))
                                                      {
                                                          validated = false;
                                                      }
                             });
            if (validated)
            {
                Console.WriteLine("Values Validated.");
            }
            else
            {
                Console.WriteLine("Values INVALID.");
            }

            #endregion

            #region querying

            Console.WriteLine("Value Querying: ");

            bool query_test = false;
            for (int i = 0; i < count; i++)
            {
                query_test = false;
                omnitree[locate(records[i])]((TestObject record) => { query_test = true; });
                if (query_test == false)
                {
                    Console.WriteLine("Querying INVALID on value: " + i);
                    break;
                }
                if (i % (count / 10) == 0)
                {
                    Console.WriteLine(((double)i / (double)count * 100D) + "%");
                }
            }
            if (query_test == true)
            {
                Console.WriteLine("Querying Validated.");
            }
            else
            {
                Console.WriteLine("Querying INVALID.");
            }

            #endregion

            #region dynamic values (re-randomizing)

            Console.WriteLine("Moving randomized data...");

            foreach (TestObject record in records)
            {
                record.X += Math.Max(0d, Math.Min(1d, (random.NextDouble() / 100D) - .5D));
                record.Y += Math.Max(0d, Math.Min(1d, (random.NextDouble() / 100D) - .5D));
                record.Z += Math.Max(0d, Math.Min(1d, (random.NextDouble() / 100D) - .5D));
            }

            Console.WriteLine("Randomized data moved.");

            #endregion

            #region Updating

            Console.WriteLine("Updating Tree Positions...");
            //// Update Method #1
            omnitree.Update();

            //// Update Method #2
            //omnitree.Update(omnitree.Min, omnitree.Max);

            Console.WriteLine("Tree Positions Updated.");

            #endregion

            #region removal

            Console.WriteLine("Removing Values: ");
            for (int i = 0; i < count; i++)
            {
                //// Removal Method #1
                omnitree.Remove(records[i]);

                //// Removal Method #2
                //omnitree.Remove(locate(records[i]), locate(records[i]));

                //// Removal Method #3
                //omnitree.Remove(locate(records[i]), locate(records[i]), (omnitree_record step) => { return records[i].Id == step.Id; });

                //// Removal Method #4
                //double[] location = new double[] { locate(records[i])(0), locate(records[i])(1), locate(records[i])(2) };
                //omnitree.Remove(location, location);

                //// Removal Method #5
                //double[] location = new double[] { locate(records[i])(0), locate(records[i])(1), locate(records[i])(2) };
                //omnitree.Remove(location, location, (omnitree_record step) => { return records[i].Id == step.Id; });

                if (omnitree.Count != count - (i + 1))
                {
                    throw new System.Exception();
                }
                if (i % (count / 10) == 0)
                {
                    Console.WriteLine(((double)i / (double)count * 100D) + "%");
                }
            }
            Console.WriteLine("Values Removed: ");

            Console.WriteLine("OmniTree.Count: " + omnitree.Count);

            //Console.WriteLine("OmniTree._top.Count: " + (omnitree as OmnitreeLinked<TestObject, double>)._top.Count);

            test_count = 0;
            omnitree.Stepper((TestObject record) => { test_count++; });
            Console.WriteLine("OmniTree Stepper Count: " + test_count);

            #endregion

            Console.WriteLine();
            Console.WriteLine("TEST COMPLETE");
        }
Beispiel #5
0
 // constructors
 #region private Graph_SetOmnitree(Graph_SetOmnitree<T> graph)
 private GraphSetOmnitree(GraphSetOmnitree <T> graph)
 {
     this._edges = graph._edges.Clone() as OmnitreeLinked <Edge, T>;
     this._nodes = graph._nodes.Clone() as SetHashList <T>;
 }
Beispiel #6
0
        static void Main(string[] args)
        {
            #region Delegate
            //Action test1 = () => { Console.WriteLine("test 1"); };
            //Action test2 = () => { Console.WriteLine("test 2"); };

            //Action action = test1;

            ////foreach (byte b in test1.Method.GetMethodBody().GetILAsByteArray())
            ////	Console.WriteLine(b);
            ////
            ////foreach (System.Reflection.FieldInfo field in typeof(Action).GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public))
            ////	Console.WriteLine(field);

            //action();
            ////Console.WriteLine(typeof(Action).GetField("_target", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public).GetValue(action));

            //IntPtr methodPtr = (IntPtr)typeof(Action).GetField("_methodPtr", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public).GetValue(test2);
            //IntPtr methodPtrAux = (IntPtr)typeof(Action).GetField("_methodPtrAux", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public).GetValue(test2);
            //object target = typeof(Action).GetField("_target", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public).GetValue(test2);
            //object methodBase = typeof(Action).GetField("_methodBase", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public).GetValue(test2);

            ////typeof(Action).GetField("_methodPtr", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public).SetValue(action, methodPtr);
            ////typeof(Action).GetField("_methodPtrAux", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public).SetValue(action, methodPtrAux);
            ////typeof(Action).GetField("_target", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public).SetValue(action, target);
            ////typeof(Action).GetField("_methodBase", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public).SetValue(action, methodBase);

            //byte[] array = test1.Method.GetMethodBody().GetILAsByteArray();
            //System.Runtime.InteropServices.GCHandle pinnedArray = System.Runtime.InteropServices.GCHandle.Alloc(array, System.Runtime.InteropServices.GCHandleType.Pinned);
            //IntPtr pointer = pinnedArray.AddrOfPinnedObject();

            //typeof(Action).GetField("_methodPtrAux", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public).SetValue(action, pointer);

            //pinnedArray.Free();

            //action();
            ////Console.WriteLine(typeof(Action).GetField("_target", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public).GetValue(action));

            //System.Action<System.String, System.Int32, System.Double>
            //System.Action`3[System.String, System.Int32, System.Double]

            //int i = 0;
            //foreach (string s in "Action<int, double, decimal>".Split('<', '>'))
            //	Console.WriteLine(i++ + " "+ s);

            //Console.WriteLine(string.IsNullOrWhiteSpace("Action<int, double, decimal>".Split('<', '>')["Action<int, double, decimal>".Split('<', '>').Length - 1]));

            //Console.WriteLine(Type.GetType("System.Action`3[System.String, System.Int32, System.Double]"));
            //Console.WriteLine(Type.GetType("Action<int>"));
            //Console.WriteLine(typeof(Action<int>).Name);
            //Console.WriteLine(typeof(Action<float>).Name);
            //Console.WriteLine(typeof(Action<double>).Name);
            //Console.WriteLine(typeof(Action<decimal>).Name);
            //Console.WriteLine(typeof(System.Collections.Generic.List<int>).Name);
            //Console.WriteLine(typeof(System.Collections.Generic.List<float>).Name);
            //Console.WriteLine(typeof(System.Collections.Generic.List<double>).Name);
            //Console.WriteLine(typeof(System.Collections.Generic.List<decimal>).Name);

            //Console.WriteLine(Type.GetType("List'1"));

            //Action test2 = Test;

            //Console.WriteLine(typeof(Action).GetField("_methodPtr", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public).GetValue(test2));
            //Console.WriteLine(typeof(Action).GetField("_methodPtrAux", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public).GetValue(test2));
            //Console.WriteLine(typeof(Action).GetField("_target", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public).GetValue(test2));
            //Console.WriteLine(typeof(Action).GetField("_methodBase", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public).GetValue(test2));
            //Console.WriteLine(test2.Truncate().Target);
            //Console.WriteLine(test2.Truncate().Method.DeclaringType.Name);

            //Action d = (Action)Delegate.CreateDelegate(typeof(Action), test2.Method);

            //114
            //1
            //0
            //0
            //112
            //40
            //22
            //0
            //0
            //10
            //42
            //System.Object _target
            //System.Object _methodBase
            //IntPtr _methodPtr
            //IntPtr _methodPtrAux


            #endregion

            #region Random Generators

            //int iterationsperrandom = 3;
            //Action<Random> testrandom = (Random random) =>
            //	{
            //		for (int i = 0; i < iterationsperrandom; i++)
            //			Console.WriteLine(i + ": " + random.Next());
            //		Console.WriteLine();
            //	};
            //Arbitrary mcg_2pow59_13pow13 = Arbitrary.MultiplicativeCongruentGenerator_Modulus2power59_Multiplier13power13();
            //Console.WriteLine("mcg_2pow59_13pow13 randoms:");
            //testrandom(mcg_2pow59_13pow13);
            //Arbitrary mcg_2pow31m1_1132489760 = Arbitrary.MultiplicativeCongruentGenerator_Modulus2power31minus1_Multiplier1132489760();
            //Console.WriteLine("mcg_2pow31m1_1132489760 randoms:");
            //testrandom(mcg_2pow31m1_1132489760);
            //Arbitrary mersenneTwister = Arbitrary.MersenneTwister();
            //Console.WriteLine("mersenneTwister randoms:");
            //testrandom(mersenneTwister);
            //Arbitrary cmr32_c2_o3 = Arbitrary.CombinedMultipleRecursiveGenerator32bit_components2_order3();
            //Console.WriteLine("mersenneTwister randoms:");
            //testrandom(cmr32_c2_o3);
            //Arbitrary wh1982cmcg = Arbitrary.WichmannHills1982_CombinedMultiplicativeCongruentialGenerator();
            //Console.WriteLine("mersenneTwister randoms:");
            //testrandom(wh1982cmcg);
            //Arbitrary wh2006cmcg = Arbitrary.WichmannHills2006_CombinedMultiplicativeCongruentialGenerator();
            //Console.WriteLine("mersenneTwister randoms:");
            //testrandom(wh2006cmcg);
            //Arbitrary mwcxorsg = Arbitrary.MultiplyWithCarryXorshiftGenerator();
            //Console.WriteLine("mwcxorsg randoms:");
            //testrandom(mwcxorsg);

            #endregion

            #region Set Tests
            //{
            //	int iterations = int.MaxValue / 1000;

            //	HashSet<int> validation = new HashSet<int>();
            //	//for (int i = 0; i < interations; i++)
            //	//	validation.Add(i);

            //	{
            //		HashSet<int> set0 = new HashSet<int>();
            //		SetHashList<int> set1 = new SetHashList<int>();
            //		SetHashArray<int> set2 = new SetHashArray<int>();

            //		for (int i = 0; i < iterations; i++) set0.Add(i);
            //		for (int i = 0; i < iterations; i++) set1.Add(i);
            //		for (int i = 0; i < iterations; i++) set2.Add(i);
            //		for (int i = 0; i < iterations; i++)
            //			validation.Add(i);
            //		foreach (int i in set0) { validation.Remove(i); }
            //		for (int i = 0; i < iterations; i++)
            //			validation.Add(i);
            //		set1.Stepper((int i) => { validation.Remove(i); });
            //		for (int i = 0; i < iterations; i++)
            //			validation.Add(i);
            //		set2.Stepper((int i) => { validation.Remove(i); });
            //		for (int i = 0; i < iterations; i++) set0.Contains(i);
            //		for (int i = 0; i < iterations; i++) set1.Contains(i);
            //		for (int i = 0; i < iterations; i++) set2.Contains(i);
            //		for (int i = 0; i < iterations; i++) set0.Remove(i);
            //		for (int i = 0; i < iterations; i++) set1.Remove(i);
            //		for (int i = 0; i < iterations; i++) set2.Remove(i);

            //		Console.WriteLine("Adding HashSet:               " + Seven.Diagnostics.Performance.Time_DateTimNow(() => { for (int i = 0; i < iterations; i++) set0.Add(i); }));
            //		Console.WriteLine("Adding Set_HashLinkedList:    " + Seven.Diagnostics.Performance.Time_DateTimNow(() => { for (int i = 0; i < iterations; i++) set1.Add(i); }));
            //		Console.WriteLine("Adding SetHash:               " + Seven.Diagnostics.Performance.Time_DateTimNow(() => { for (int i = 0; i < iterations; i++) set2.Add(i); }));

            //		for (int i = 0; i < iterations; i++)
            //			validation.Add(i);
            //		foreach (int i in set0) { validation.Remove(i); }
            //		Console.WriteLine("Validate HashSet:             " + (validation.Count == 0));

            //		for (int i = 0; i < iterations; i++)
            //			validation.Add(i);
            //		set1.Stepper((int i) => { validation.Remove(i); });
            //		Console.WriteLine("Validate Set_HashLinkedList:  " + (validation.Count == 0));

            //		for (int i = 0; i < iterations; i++)
            //			validation.Add(i);
            //		set2.Stepper((int i) => { validation.Remove(i); });
            //		Console.WriteLine("Validate SetHas:              " + (validation.Count == 0));

            //		Console.WriteLine("Size HashSet:                 " + (typeof(HashSet<int>).GetField("m_buckets", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).GetValue(set0) as int[]).Length);
            //		Console.WriteLine("Size Set_HashLinkedList:      " + set1.TableSize);
            //		Console.WriteLine("Size SetHash:                 " + set2.TableSize);

            //		Console.WriteLine("Constains HashSet:            " + Seven.Diagnostics.Performance.Time_DateTimNow(() => { for (int i = 0; i < iterations; i++) set0.Contains(i); }));
            //		Console.WriteLine("Constains Set_HashLinkedList: " + Seven.Diagnostics.Performance.Time_DateTimNow(() => { for (int i = 0; i < iterations; i++) set1.Contains(i); }));
            //		Console.WriteLine("Constains SetHash:            " + Seven.Diagnostics.Performance.Time_DateTimNow(() => { for (int i = 0; i < iterations; i++) set2.Contains(i); }));

            //		//Console.WriteLine("Removed HashSet:              " + Seven.Diagnostics.Performance.Time(() => { for (int i = 0; i < iterations; i++) set0.Remove(i); }));
            //		//Console.WriteLine("Removed Set_HashLinkedList:   " + Seven.Diagnostics.Performance.Time(() => { for (int i = 0; i < iterations; i++) set1.Remove(i); }));
            //		//Console.WriteLine("Remove SetHash:               " + Seven.Diagnostics.Performance.Time(() => { for (int i = 0; i < iterations; i++) set2.Remove(i); }));

            //		Console.WriteLine("Removed HashSet:              " + Seven.Diagnostics.Performance.Time_DateTimNow(() => { for (int i = iterations - 1; i >= 0; i--) set0.Remove(i); }));
            //		Console.WriteLine("Removed Set_HashLinkedList:   " + Seven.Diagnostics.Performance.Time_DateTimNow(() => { for (int i = iterations - 1; i >= 0; i--) set1.Remove(i); }));
            //		Console.WriteLine("Remove SetHash:               " + Seven.Diagnostics.Performance.Time_DateTimNow(() => { for (int i = iterations - 1; i >= 0; i--) set2.Remove(i); }));

            //		Console.WriteLine("Size HashSet:                 " + (typeof(HashSet<int>).GetField("m_buckets", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).GetValue(set0) as int[]).Length);
            //		Console.WriteLine("Size Set_HashLinkedList:      " + set1.TableSize);
            //		Console.WriteLine("Size SetHash:                 " + set2.TableSize);
            //	}
            //	Console.WriteLine();
            //	{
            //		HashSet<int> set0 = new HashSet<int>();
            //		SetHashList<int> set1 = new SetHashList<int>();
            //		SetHashArray<int> set2 = new SetHashArray<int>();

            //		for (int i = 0; i < iterations; i++) set0.Add(i);
            //		for (int i = 0; i < iterations; i++) set1.Add(i);
            //		for (int i = 0; i < iterations; i++) set2.Add(i);
            //		for (int i = 0; i < iterations; i++)
            //			validation.Add(i);
            //		foreach (int i in set0) { validation.Remove(i); }
            //		for (int i = 0; i < iterations; i++)
            //			validation.Add(i);
            //		set1.Stepper((int i) => { validation.Remove(i); });
            //		for (int i = 0; i < iterations; i++)
            //			validation.Add(i);
            //		set2.Stepper((int i) => { validation.Remove(i); });
            //		for (int i = 0; i < iterations; i++) set0.Contains(i);
            //		for (int i = 0; i < iterations; i++) set1.Contains(i);
            //		for (int i = 0; i < iterations; i++) set2.Contains(i);
            //		for (int i = 0; i < iterations; i++) set0.Remove(i);
            //		for (int i = 0; i < iterations; i++) set1.Remove(i);
            //		for (int i = 0; i < iterations; i++) set2.Remove(i);

            //		Console.WriteLine("Adding HashSet:               " + Seven.Diagnostics.Performance.Time_StopWatch(() => { for (int i = 0; i < iterations; i++) set0.Add(i); }));
            //		Console.WriteLine("Adding Set_HashLinkedList:    " + Seven.Diagnostics.Performance.Time_StopWatch(() => { for (int i = 0; i < iterations; i++) set1.Add(i); }));
            //		Console.WriteLine("Adding SetHash:               " + Seven.Diagnostics.Performance.Time_StopWatch(() => { for (int i = 0; i < iterations; i++) set2.Add(i); }));

            //		for (int i = 0; i < iterations; i++)
            //			validation.Add(i);
            //		foreach (int i in set0) { validation.Remove(i); }
            //		Console.WriteLine("Validate HashSet:             " + (validation.Count == 0));

            //		for (int i = 0; i < iterations; i++)
            //			validation.Add(i);
            //		set1.Stepper((int i) => { validation.Remove(i); });
            //		Console.WriteLine("Validate Set_HashLinkedList:  " + (validation.Count == 0));

            //		for (int i = 0; i < iterations; i++)
            //			validation.Add(i);
            //		set2.Stepper((int i) => { validation.Remove(i); });
            //		Console.WriteLine("Validate SetHas:              " + (validation.Count == 0));

            //		Console.WriteLine("Size HashSet:                 " + (typeof(HashSet<int>).GetField("m_buckets", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).GetValue(set0) as int[]).Length);
            //		Console.WriteLine("Size Set_HashLinkedList:      " + set1.TableSize);
            //		Console.WriteLine("Size SetHash:                 " + set2.TableSize);

            //		Console.WriteLine("Constains HashSet:            " + Seven.Diagnostics.Performance.Time_StopWatch(() => { for (int i = 0; i < iterations; i++) set0.Contains(i); }));
            //		Console.WriteLine("Constains Set_HashLinkedList: " + Seven.Diagnostics.Performance.Time_StopWatch(() => { for (int i = 0; i < iterations; i++) set1.Contains(i); }));
            //		Console.WriteLine("Constains SetHash:            " + Seven.Diagnostics.Performance.Time_StopWatch(() => { for (int i = 0; i < iterations; i++) set2.Contains(i); }));

            //		//Console.WriteLine("Removed HashSet:              " + Seven.Diagnostics.Performance.Time2(() => { for (int i = 0; i < iterations; i++) set0.Remove(i); }));
            //		//Console.WriteLine("Removed Set_HashLinkedList:   " + Seven.Diagnostics.Performance.Time2(() => { for (int i = 0; i < iterations; i++) set1.Remove(i); }));
            //		//Console.WriteLine("Remove SetHash:               " + Seven.Diagnostics.Performance.Time2(() => { for (int i = 0; i < iterations; i++) set2.Remove(i); }));

            //		Console.WriteLine("Removed HashSet:              " + Seven.Diagnostics.Performance.Time_StopWatch(() => { for (int i = iterations - 1; i >= 0; i--) set0.Remove(i); }));
            //		Console.WriteLine("Removed Set_HashLinkedList:   " + Seven.Diagnostics.Performance.Time_StopWatch(() => { for (int i = iterations - 1; i >= 0; i--) set1.Remove(i); }));
            //		Console.WriteLine("Remove SetHash:               " + Seven.Diagnostics.Performance.Time_StopWatch(() => { for (int i = iterations - 1; i >= 0; i--) set2.Remove(i); }));

            //		Console.WriteLine("Size HashSet:                 " + (typeof(HashSet<int>).GetField("m_buckets", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).GetValue(set0) as int[]).Length);
            //		Console.WriteLine("Size Set_HashLinkedList:      " + set1.TableSize);
            //		Console.WriteLine("Size SetHash:                 " + set2.TableSize);
            //	}

            //	Console.WriteLine();
            //}
            #endregion

            #region Map/Dictionary
            //{
            //	int iterations = int.MaxValue / 10000;

            //	HashSet<int> validation = new HashSet<int>();
            //	//for (int i = 0; i < interations; i++)
            //	//	validation.Add(i);

            //	{
            //		Dictionary<int, int> map0 = new Dictionary<int, int>();
            //		//MapSetHashList<int, int> map1 = new MapSetHashList<int, int>();
            //		MapHashLinked<int, int> map2 = new MapHashLinked<int, int>();
            //		MapHashArray<int, int> map3 = new MapHashArray<int, int>();


            //		Console.WriteLine("Adding 0:    " + Seven.Diagnostics.Performance.Time(() => { for (int i = 0; i < iterations; i++) map0.Add(i, i); }));
            //		//Console.WriteLine("Adding 1:    " + Seven.Diagnostics.Performance.Time(() => { for (int i = 0; i < iterations; i++) map1.Add(i, i); }));
            //		Console.WriteLine("Adding 2:    " + Seven.Diagnostics.Performance.Time(() => { for (int i = 0; i < iterations; i++) map2.Add(i, i); }));
            //		Console.WriteLine("Adding 3:    " + Seven.Diagnostics.Performance.Time(() => { for (int i = 0; i < iterations; i++) map3.Add(i, i); }));

            //		for (int i = 0; i < iterations; i++)
            //			validation.Add(i);
            //		foreach (KeyValuePair<int, int> i in map0) { validation.Remove(i.Key); }
            //		Console.WriteLine("Validate 0:  " + (validation.Count == 0));

            //		//for (int i = 0; i < iterations; i++)
            //		//	validation.Add(i);
            //		////foreach (int i in map1) { validation.Remove(i); }
            //		//map1.Stepper((int i) => { validation.Remove(i); });
            //		//Console.WriteLine("Validate 1:  " + (validation.Count == 0));

            //		for (int i = 0; i < iterations; i++)
            //			validation.Add(i);
            //		//foreach (int i in map1) { validation.Remove(i); }
            //		map2.Stepper((int i) => { validation.Remove(i); });
            //		Console.WriteLine("Validate 2:  " + (validation.Count == 0));

            //		for (int i = 0; i < iterations; i++)
            //			validation.Add(i);
            //		//foreach (int i in map1) { validation.Remove(i); }
            //		map3.Stepper((int i) => { validation.Remove(i); });
            //		Console.WriteLine("Validate 3:  " + (validation.Count == 0));

            //		int temp;
            //		Console.WriteLine("Get 0:       " + Seven.Diagnostics.Performance.Time(() => { for (int i = 0; i < iterations; i++) temp = map0[i]; }));
            //		//Console.WriteLine("Get 1:       " + Seven.Diagnostics.Performance.Time(() => { for (int i = 0; i < iterations; i++) temp = map1[i]; }));
            //		Console.WriteLine("Get 2:       " + Seven.Diagnostics.Performance.Time(() => { for (int i = 0; i < iterations; i++) temp = map2[i]; }));
            //		Console.WriteLine("Get 3:       " + Seven.Diagnostics.Performance.Time(() => { for (int i = 0; i < iterations; i++) temp = map3[i]; }));

            //		Console.WriteLine("Removed 0:   " + Seven.Diagnostics.Performance.Time(() => { for (int i = 0; i < iterations; i++) map0.Remove(i); }));
            //		//Console.WriteLine("Removed 1:   " + Seven.Diagnostics.Performance.Time(() => { for (int i = 0; i < iterations; i++) map1.Remove(i); }));
            //		Console.WriteLine("Removed 2:   " + Seven.Diagnostics.Performance.Time(() => { for (int i = 0; i < iterations; i++) map2.Remove(i); }));
            //		Console.WriteLine("Removed 3:   " + Seven.Diagnostics.Performance.Time(() => { for (int i = 0; i < iterations; i++) map3.Remove(i); }));
            //	}
            //}
            #endregion

            #region Vector Test

            //Console.WriteLine();
            //Console.WriteLine("Vector Testing-------------------------------------");

            //Random random = new Random();
            //const int vector_size = 4;
            //const int vector_iterations = int.MaxValue / 100;

            //Vector<double> vector_a = new Vector<double>(vector_size);
            //Vector<double> vector_b = new Vector<double>(vector_size);
            //Vector<double> vector_c;

            //for (int i = 0; i < vector_size; i++)
            //{
            //	vector_a[i] = random.Next();
            //	vector_b[i] = random.Next();
            //}

            //Console.WriteLine("Compile 1: " + Seven.Diagnostics.Performance.Time(() => { vector_c = Vector<double>.Vector_Add(vector_a, vector_b); }));
            //Console.WriteLine("Compile 2: " + Seven.Diagnostics.Performance.Time(() => { vector_c = Vector<double>.Vector_Add2(vector_a, vector_b); }));
            //Console.WriteLine("Compile 3: " + Seven.Diagnostics.Performance.Time(() => { vector_c = Vector<double>.Vector_Add3(vector_a, vector_b); }));
            //Console.WriteLine("Compile 4: " + Seven.Diagnostics.Performance.Time(() => { vector_c = Vector<double>.Vector_Add4(vector_a, vector_b); }));

            //Console.WriteLine("Test 1:    " + Seven.Diagnostics.Performance.Time(() => {
            //	for (int i = 0; i < vector_iterations; i++)
            //		vector_c = Vector<double>.Vector_Add(vector_a, vector_b);
            //}));

            //Console.WriteLine("Test 2:    " + Seven.Diagnostics.Performance.Time(() =>
            //{
            //	for (int i = 0; i < vector_iterations; i++)
            //		vector_c = Vector<double>.Vector_Add2(vector_a, vector_b);
            //}));

            //Console.WriteLine("Test 3:    " + Seven.Diagnostics.Performance.Time(() =>
            //{
            //	for (int i = 0; i < vector_iterations; i++)
            //		vector_c = Vector<double>.Vector_Add3(vector_a, vector_b);
            //}));

            //Console.WriteLine("Test 4:    " + Seven.Diagnostics.Performance.Time(() =>
            //{
            //	for (int i = 0; i < vector_iterations; i++)
            //		vector_c = Vector<double>.Vector_Add4(vector_a, vector_b);
            //}));

            #endregion

            #region Sorting Speed
            //{
            //	int size = int.MaxValue / 1000000;
            //	int[] dataSet = new int[size];
            //	for (int i = 0; i < size; i++)
            //		dataSet[i] = i;

            //	Console.WriteLine("Sorting Algorithms----------------------");
            //	Console.WriteLine();

            //	//Sort<int>.Shuffle(dataSet);
            //	//Console.Write("Bubble:      " + Seven.Diagnostics.Performance.Time(() => { Sort<int>.Bubble(dataSet); }));
            //	Sort<int>.Shuffle(dataSet);
            //	Console.WriteLine("Selection:   " + Seven.Diagnostics.Performance.Time(() => { Sort<int>.Selection(dataSet); }));
            //	Sort<int>.Shuffle(dataSet);
            //	Console.WriteLine("Insertion:   " + Seven.Diagnostics.Performance.Time(() => { Sort<int>.Insertion(dataSet); }));
            //	Sort<int>.Shuffle(dataSet);
            //	Console.WriteLine("Quick:       " + Seven.Diagnostics.Performance.Time(() => { Sort<int>.Quick(dataSet); }));
            //	Sort<int>.Shuffle(dataSet);
            //	Console.WriteLine("Merge:       " + Seven.Diagnostics.Performance.Time(() => { Sort<int>.Merge(dataSet); }));
            //	Sort<int>.Shuffle(dataSet);
            //	Console.WriteLine("Heap:        " + Seven.Diagnostics.Performance.Time(() => { Sort<int>.Heap(dataSet); }));
            //	Sort<int>.Shuffle(dataSet);
            //	Console.WriteLine("OddEven:     " + Seven.Diagnostics.Performance.Time(() => { Sort<int>.OddEven(dataSet); }));

            //	Sort<int>.Shuffle(dataSet);
            //	Console.WriteLine("IEnumerable: " + Seven.Diagnostics.Performance.Time(() => { dataSet.OrderBy(item => item); }));
            //	Sort<int>.Shuffle(dataSet);
            //	Console.WriteLine("Array.Sort:  " + Seven.Diagnostics.Performance.Time(() => { Array.Sort(dataSet); }));
            //}
            #endregion

            #region Matrix Test

            //Random random = new Random();
            //const int matrix_rows = 4;
            //const int matrix_columns = 4;
            //const int matrix_iterations = int.MaxValue / 100;

            //{

            //	Seven.Mathematics.Matrix<double> matrix_a = new Seven.Mathematics.Matrix<double>(matrix_rows, matrix_columns);
            //	Seven.Mathematics.Matrix<double> matrix_b = new Seven.Mathematics.Matrix<double>(matrix_rows, matrix_columns);
            //	Seven.Mathematics.Matrix<double> matrix_c;

            //	matrix_c = matrix_a + matrix_b;
            //	matrix_c = matrix_b + matrix_a;
            //	//matrix_a = matrix_b + matrix_c;
            //	//matrix_a = matrix_c + matrix_b;

            //	for (int i = 0; i < matrix_rows; i++)
            //		for (int j = 0; j < matrix_columns; j++)
            //		{
            //			matrix_a[i, j] = random.Next();
            //			matrix_b[i, j] = random.Next();
            //		}

            //	Console.WriteLine("Test 1:    " + Seven.Diagnostics.Performance.Time(() =>
            //	{
            //		for (int i = 0; i < matrix_iterations; i++)
            //			matrix_c = matrix_a + matrix_b;
            //	}));

            //matrix_c = Matrix<double>.Matrix_Negate2(matrix_a);
            //Console.WriteLine("Test 2:    " + Seven.Diagnostics.Performance.Time(() =>
            //{
            //	for (int i = 0; i < matrix_iterations; i++)
            //		matrix_c = Matrix<double>.Matrix_Negate2(matrix_a);
            //}));

            //Console.WriteLine("Test 2:    " + Seven.Diagnostics.Performance.Time(() =>
            //{
            //	for (int i = 0; i < matrix_iterations; i++)
            //		Matrix<double>.Matrix_IsSymetric2(matrix_a);
            //}));

            //Console.WriteLine("Compile 1: " + Seven.Diagnostics.Performance.Time(() => { matrix_c = matrix_a + matrix_b; }));

            //Console.WriteLine("Test 1:    " + Seven.Diagnostics.Performance.Time(() =>
            //{
            //	for (int i = 0; i < matrix_iterations; i++)
            //		matrix_c = matrix_a + matrix_b;
            //}));

            //}

            #endregion

            #region Omnitree

            Omnitree.Locate <TestObject, double> locate = (TestObject record) =>
            {
                return((int i) =>
                {
                    switch (i)
                    {
                    case 0:
                        return record.X;

                    case 1:
                        return record.Y;

                    case 2:
                        return record.Z;

                    default:
                        throw new System.Exception();
                    }
                });
            };

            Compute <double> .Compare(0, 0);

            Omnitree <TestObject, double> omnitree = new OmnitreeLinked <TestObject, double>(
                3,
                Accessor.Get(new double[] { 0, 0, 0 }),
                Accessor.Get(new double[] { 1, 1, 1 }),
                locate,
                (double a, double b) => { return(a == b); },
                Equate.Default,
                Compute <double> .Compare,
                (double a, double b) => { return((a + b) / 2); });

            System.Collections.Generic.List <TestObject> list = new System.Collections.Generic.List <TestObject>();

            System.Collections.Generic.LinkedList <TestObject> linkedlist = new System.Collections.Generic.LinkedList <TestObject>();

            Random       random  = new Random(7);
            int          count   = 10000;
            TestObject[] records = new TestObject[count];
            for (int i = 0; i < count; i++)
            {
                records[i] = new TestObject(i, random.NextDouble(), random.NextDouble(), random.NextDouble());
            }

            Console.WriteLine("Testing with " + count + " records...");
            Console.WriteLine();

            Console.WriteLine("Adding (Omnitree):          " + Seven.Diagnostics.Performance.Time_StopWatch(() =>
            {
                for (int i = 0; i < count; i++)
                {
                    omnitree.Add(records[i]);
                }
            }));

            Console.WriteLine("Adding (List):              " + Seven.Diagnostics.Performance.Time_StopWatch(() =>
            {
                for (int i = 0; i < count; i++)
                {
                    list.Add(records[i]);
                }
            }));

            Console.WriteLine("Adding (L-List):            " + Seven.Diagnostics.Performance.Time_StopWatch(() =>
            {
                for (int i = 0; i < count; i++)
                {
                    linkedlist.AddLast(records[i]);
                }
            }));

            Console.WriteLine();

            Sort <TestObject> .Shuffle(random, Accessor.Get(records), Accessor.Assign(records), 0, records.Length);

            Console.WriteLine("Querying Single (Omnitree): " + Seven.Diagnostics.Performance.Time_StopWatch(() =>
            {
                bool query_test;
                for (int i = 0; i < count; i++)
                {
                    query_test = false;
                    omnitree[locate(records[i])]((TestObject record) => { query_test = true; });
                    //omnitree[records[i].X, records[i].Y, records[i].Z]((TestObject record) => { query_test = true; });
                    if (query_test == false)
                    {
                        throw new System.Exception();
                    }
                }
            }));

            Console.WriteLine("Querying Single (List):     " + Seven.Diagnostics.Performance.Time_StopWatch(() =>
            {
                bool query_test = false;
                for (int i = 0; i < count; i++)
                {
                    foreach (TestObject record in list)
                    {
                        if (record.X == records[i].X && record.Y == records[i].Y && record.Z == records[i].Z)
                        {
                            query_test = true;
                            break;
                        }
                    }
                    if (query_test == false)
                    {
                        throw new System.Exception();
                    }
                }
            }));

            Console.WriteLine("Querying Single (L-List):   " + Seven.Diagnostics.Performance.Time_StopWatch(() =>
            {
                bool query_test = false;
                for (int i = 0; i < count; i++)
                {
                    foreach (TestObject record in linkedlist)
                    {
                        if (record.X == records[i].X && record.Y == records[i].Y && record.Z == records[i].Z)
                        {
                            query_test = true;
                            break;
                        }
                    }
                    if (query_test == false)
                    {
                        throw new System.Exception();
                    }
                }
            }));

            Console.WriteLine();

            int        random_query_count = count / 100;
            double[][] random_mins        = new double[random_query_count][];
            for (int i = 0; i < random_query_count; i++)
            {
                random_mins[i] = new double[] { random.NextDouble(), random.NextDouble(), random.NextDouble(), }
            }
            ;
            double[][] random_maxes = new double[random_query_count][];
            for (int i = 0; i < random_query_count; i++)
            {
                random_maxes[i] = new double[] {
                    random.NextDouble() *((1 - random_mins[i][0]) + random_mins[i][0]),
                    random.NextDouble() * ((1 - random_mins[i][1]) + random_mins[i][1]),
                    random.NextDouble() * ((1 - random_mins[i][2]) + random_mins[i][2])
                }
            }
            ;

            Console.WriteLine(random_query_count + " random range queries...");

            int[] query_count_omnitree   = new int[random_query_count];
            int[] query_count_list       = new int[random_query_count];
            int[] query_count_linkedlist = new int[random_query_count];

            Console.WriteLine("Querying Range (Omnitree):  " + Seven.Diagnostics.Performance.Time_StopWatch(() =>
            {
                for (int i = 0; i < random_query_count; i++)
                {
                    omnitree.Stepper((TestObject record) => { query_count_omnitree[i]++; }, random_mins[i], random_maxes[i]);
                }
            }));

            Console.WriteLine("Querying Range (List):      " + Seven.Diagnostics.Performance.Time_StopWatch(() =>
            {
                for (int i = 0; i < random_query_count; i++)
                {
                    foreach (TestObject record in list)
                    {
                        if (record.X >= random_mins[i][0] && record.X <= random_maxes[i][0] &&
                            record.Y >= random_mins[i][1] && record.Y <= random_maxes[i][1] &&
                            record.Z >= random_mins[i][2] && record.Z <= random_maxes[i][2])
                        {
                            query_count_list[i]++;
                        }
                    }
                }
            }));

            Console.WriteLine("Querying Range (L-List):    " + Seven.Diagnostics.Performance.Time_StopWatch(() =>
            {
                for (int i = 0; i < random_query_count; i++)
                {
                    foreach (TestObject record in linkedlist)
                    {
                        if (record.X >= random_mins[i][0] && record.X <= random_maxes[i][0] &&
                            record.Y >= random_mins[i][1] && record.Y <= random_maxes[i][1] &&
                            record.Z >= random_mins[i][2] && record.Z <= random_maxes[i][2])
                        {
                            query_count_linkedlist[i]++;
                        }
                    }
                }
            }));

            for (int i = 0; i < random_query_count; i++)
            {
                if (query_count_omnitree[i] != query_count_list[i] || query_count_list[i] != query_count_linkedlist[i])
                {
                    throw new System.Exception();
                }
            }

            Console.WriteLine();

            foreach (TestObject record in records)
            {
                record.X += Math.Max(0d, Math.Min(1d, (random.NextDouble() / 100D) - .5D));
                record.Y += Math.Max(0d, Math.Min(1d, (random.NextDouble() / 100D) - .5D));
                record.Z += Math.Max(0d, Math.Min(1d, (random.NextDouble() / 100D) - .5D));
            }

            Console.WriteLine("Updating (Omnitree):        " + Seven.Diagnostics.Performance.Time_StopWatch(() =>
            {
                omnitree.Update();
            }));

            Console.WriteLine();

            Console.WriteLine("Removing Single (Omnitree): " + Seven.Diagnostics.Performance.Time_StopWatch(() =>
            {
                for (int i = 0; i < count; i++)
                {
                    //// Removal Method #1
                    omnitree.Remove(records[i]);

                    //// Removal Method #2
                    //omnitree.Remove(locate(records[i]), locate(records[i]));

                    //// Removal Method #3
                    //omnitree.Remove(locate(records[i]), locate(records[i]), (TestObject step) => { return records[i].Id == step.Id; });

                    //// Removal Method #4
                    //double[] location = new double[] { locate(records[i])(0), locate(records[i])(1), locate(records[i])(2) };
                    //omnitree.Remove(location, location);

                    //// Removal Method #5
                    //double[] location = new double[] { locate(records[i])(0), locate(records[i])(1), locate(records[i])(2) };
                    //omnitree.Remove(location, location, (omnitree_record step) => { return records[i].Id == step.Id; });
                }
            }));

            Console.WriteLine("Removing Single (List):     " + Seven.Diagnostics.Performance.Time_StopWatch(() =>
            {
                for (int i = 0; i < count; i++)
                {
                    //list.Remove(records[i]);

                    for (int j = 0; j < list.Count; j++)
                    {
                        if (list[j].X == records[i].X && list[j].Y == records[i].Y && list[j].Z == records[i].Z)
                        {
                            list.RemoveAt(j);
                            break;
                        }
                    }
                }
            }));

            Console.WriteLine("Removing Single (L-List):   " + Seven.Diagnostics.Performance.Time_StopWatch(() =>
            {
                for (int i = 0; i < count; i++)
                {
                    //linkedlist.Remove(records[i]);

                    LinkedList <TestObject> temp = new LinkedList <TestObject>();
                    foreach (TestObject record in linkedlist)
                    {
                        if (record.X == records[i].X && record.Y == records[i].Y && record.Z == records[i].Z)
                        {
                            temp.AddLast(record);
                            break;
                        }
                    }
                    foreach (TestObject record in temp)
                    {
                        linkedlist.Remove(record);
                    }
                }
            }));

            for (int i = 0; i < count; i++)
            {
                omnitree.Add(records[i]);
                list.Add(records[i]);
                linkedlist.AddLast(records[i]);
            }

            Console.WriteLine();

            TimeSpan omnitree_remove_span = TimeSpan.Zero;
            for (int i = 0; i < random_query_count; i++)
            {
                System.Collections.Generic.List <TestObject> temp = new System.Collections.Generic.List <TestObject>();
                omnitree[locate(records[i])]((TestObject record) => { temp.Add(record); });
                omnitree_remove_span += Seven.Diagnostics.Performance.Time_StopWatch(() =>
                {
                    omnitree.Remove(random_mins[i], random_maxes[i]);
                });
                foreach (TestObject record in temp)
                {
                    omnitree.Add(record);
                }
            }
            Console.WriteLine("Removing Range (Omnitree):  " + omnitree_remove_span);

            TimeSpan list_remove_span = TimeSpan.Zero;
            for (int i = 0; i < random_query_count; i++)
            {
                System.Collections.Generic.List <TestObject> temp = new System.Collections.Generic.List <TestObject>();

                foreach (TestObject record in list)
                {
                    if (record.X >= random_mins[i][0] && record.X <= random_maxes[i][0] &&
                        record.Y >= random_mins[i][1] && record.Y <= random_maxes[i][1] &&
                        record.Z >= random_mins[i][2] && record.Z <= random_maxes[i][2])
                    {
                        temp.Add(record);
                    }
                }

                list_remove_span += Seven.Diagnostics.Performance.Time_StopWatch(() =>
                {
                    list.RemoveAll((TestObject record) =>
                    {
                        return(record.X >= random_mins[i][0] && record.X <= random_maxes[i][0] &&
                               record.Y >= random_mins[i][1] && record.Y <= random_maxes[i][1] &&
                               record.Z >= random_mins[i][2] && record.Z <= random_maxes[i][2]);
                    });
                    //for (int j = 0; j < list.Count; j++)
                    //{
                    //	if (list[j].X >= random_mins[i][0] && list[j].X <= random_maxes[i][0] &&
                    //		list[j].Y >= random_mins[i][1] && list[j].Y <= random_maxes[i][1] &&
                    //		list[j].Z >= random_mins[i][2] && list[j].Z <= random_maxes[i][2])
                    //	{
                    //		list.RemoveAll.RemoveAt(i);
                    //	}
                    //}
                });
                foreach (TestObject record in temp)
                {
                    list.Add(record);
                }
            }
            Console.WriteLine("Removing Range (List):      " + list_remove_span);

            TimeSpan linkedlist_remove_span = TimeSpan.Zero;
            for (int i = 0; i < random_query_count; i++)
            {
                System.Collections.Generic.List <TestObject> temp = new System.Collections.Generic.List <TestObject>();

                foreach (TestObject record in linkedlist)
                {
                    if (record.X >= random_mins[i][0] && record.X <= random_maxes[i][0] &&
                        record.Y >= random_mins[i][1] && record.Y <= random_maxes[i][1] &&
                        record.Z >= random_mins[i][2] && record.Z <= random_maxes[i][2])
                    {
                        temp.Add(record);
                    }
                }

                linkedlist_remove_span += Seven.Diagnostics.Performance.Time_StopWatch(() =>
                {
                    System.Collections.Generic.List <TestObject> temp2 = new System.Collections.Generic.List <TestObject>();
                    foreach (TestObject record in linkedlist)
                    {
                        if (record.X >= random_mins[i][0] && record.X <= random_maxes[i][0] &&
                            record.Y >= random_mins[i][1] && record.Y <= random_maxes[i][1] &&
                            record.Z >= random_mins[i][2] && record.Z <= random_maxes[i][2])
                        {
                            temp2.Add(record);
                        }
                    }
                    foreach (TestObject record in temp2)
                    {
                        linkedlist.Remove(record);
                    }
                });
                foreach (TestObject record in temp)
                {
                    list.Add(record);
                }
            }
            Console.WriteLine("Removing Range (L-List):    " + linkedlist_remove_span);

            #endregion

            Console.WriteLine();
            Console.WriteLine("Done...");
            Console.ReadLine();
        }
    }
}