public void TestEquality(string firstMoveStringNotation, GameMove second, bool expectedEquals) { var first = GameMove.FromStringNotation(firstMoveStringNotation); Assert.That(first, Is.Not.Null); Assert.That(second, Is.Not.Null); Assert.That(first.Equals(second), Is.EqualTo(expectedEquals)); Assert.That(second.Equals(first), Is.EqualTo(expectedEquals)); Assert.That(Equals(first, second), Is.EqualTo(expectedEquals)); Assert.That(EqualityComparer <GameMove> .Default.Equals(first, second), Is.EqualTo(expectedEquals)); Assert.That(first == second, Is.EqualTo(expectedEquals)); Assert.That(first != second, Is.EqualTo(!expectedEquals)); if (expectedEquals) { Assert.That(first.GetHashCode(), Is.EqualTo(second.GetHashCode())); } }