[Test] public void testEquals() { GenericStack <string> stringStack = new GenericStack <string>(); GenericStack <string> stringStack2 = new GenericStack <string>(); GenericStack <List <string> > stringListStack = new GenericStack <List <string> >(); // System.out.println("stringStack type is " + stringStack.getClass()); // XXX What!? // Assert.True(stringStack == (stringListStack)); // see note in equals // Assert.True(stringStack == (stringStack2)); Assert.AreEqual(stringStack.GetHashCode(), stringStack2.GetHashCode()); // Assert.AreEqual(stringStack.GetHashCode(), stringListStack.GetHashCode()); // see note in equals // XXX C# doesn't do type erasure so this doesn't work anymore. Thankfully. Assert.AreNotEqual(stringStack.GetHashCode(), stringListStack.GetHashCode()); stringStack.Push("value 1"); Assert.False(stringStack == (stringStack2)); // Assert.False(stringStack == (stringListStack)); Assert.False(stringStack.GetHashCode() == stringStack2.GetHashCode()); stringStack2.Push("value 1"); Assert.True(stringStack.Equals(stringStack2)); Assert.AreEqual(stringStack.GetHashCode(), stringStack2.GetHashCode()); }