public void TestRun()
        {
            var stuff      = new HatinaryTree <int>(1);
            var otherstuff = new HatinaryTree <int>(2);

            WriteLine(HatinaryTree <int> .Merge(stuff, otherstuff));
        }
        public void TestMergingDifferentRank()
        {
            var          B2    = ConstructB2(new int[] { 1, 2, 3, 4 });
            TestDelegate stuff = () =>
            {
                HatinaryTree <int> .Merge(B2, new HatinaryTree <int>(5));
            };

            AssertThrow <Exception>(stuff);
        }
        /// <summary>
        /// Construct a basic B2 out of this shit.
        /// </summary>
        /// <returns></returns>
        public static HatinaryTree <int> ConstructBasicIntB2()
        {
            var B0 = new HatinaryTree <int>(65);
            var B1 = HatinaryTree <int> .Merge(B0, new HatinaryTree <int>(24));

            var B0_1 = new HatinaryTree <int>(21);
            var B1_1 = HatinaryTree <int> .Merge(B0_1, new HatinaryTree <int>(12));

            return(HatinaryTree <int> .Merge(B1, B1_1));
        }
        /// <summary>
        /// Given 4 element, method constructs a B2 binomial tree.
        /// </summary>
        /// <typeparam name="T">Comprable Type</typeparam>
        /// <param name="args">List </param>
        /// <returns>
        /// Hatinary Tree contating all the elements in it.
        /// </returns>
        public static HatinaryTree <T> ConstructB2 <T>(params T[] args)
            where T : IComparable <T>
        {
            var B0_1 = new HatinaryTree <T>(args[0]);
            var B0_2 = new HatinaryTree <T>(args[1]);
            var B1_1 = HatinaryTree <T> .Merge(B0_1, B0_2);

            var B0_3 = new HatinaryTree <T>(args[2]);
            var B0_4 = new HatinaryTree <T>(args[3]);
            var B1_2 = HatinaryTree <T> .Merge(B0_3, B0_4);

            return(HatinaryTree <T> .Merge(B1_1, B1_2));
        }