public virtual void TestEquals()
        {
            TreeShapedStack <string> t1 = new TreeShapedStack <string>();

            t1 = t1.Push("foo");
            t1 = t1.Push("bar");
            t1 = t1.Push("bar");
            t1 = t1.Push("diet");
            t1 = t1.Push("coke");
            TreeShapedStack <string> t2 = new TreeShapedStack <string>();

            t2 = t2.Push("foo");
            t2 = t2.Push("bar");
            t2 = t2.Push("bar");
            t2 = t2.Push("diet");
            t2 = t2.Push("coke");
            TreeShapedStack <string> t3 = t2.Pop().Push("pepsi");

            NUnit.Framework.Assert.AreEqual(t1, t2);
            NUnit.Framework.Assert.IsFalse(t1.Pop().Equals(t2));
            NUnit.Framework.Assert.IsFalse(t2.Pop().Equals(t1));
            NUnit.Framework.Assert.IsFalse(t2.Equals(t3));
        }