public void TestHashSet() { int[] goal = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; NPuzzleState <int[]> goalState = new NPuzzleState <int[]>(goal); //! -1 (from goal), md = 1 int[] s1 = { 1, 2, 3, 4, 5, 6, 7, 9, 8 }; NPuzzleState <int[]> s1State = new NPuzzleState <int[]>(s1); //! md = 1 int[] s7 = { 1, 2, 3, 4, 5, 9, 7, 8, 6 }; NPuzzleState <int[]> s7State = new NPuzzleState <int[]>(s7); //! 2, md = 2 int[] s2 = { 1, 2, 3, 4, 9, 6, 7, 5, 8 }; NPuzzleState <int[]> s2State = new NPuzzleState <int[]>(s2); //! 1, md 3 int[] s3 = { 1, 2, 3, 4, 6, 9, 7, 5, 8 }; NPuzzleState <int[]> s3State = new NPuzzleState <int[]>(s3); //! 2 md = 4 int[] s4 = { 1, 2, 9, 4, 6, 3, 7, 5, 8 }; NPuzzleState <int[]> s4State = new NPuzzleState <int[]>(s4); //! -1 md = 5 int[] s5 = { 1, 9, 2, 4, 6, 3, 7, 5, 8 }; NPuzzleState <int[]> s5State = new NPuzzleState <int[]>(s5); //! -1 md = 6 int[] s6 = { 9, 1, 2, 4, 6, 3, 7, 5, 8 }; NPuzzleState <int[]> s6State = new NPuzzleState <int[]>(s6); int[] s8 = { 9, 1, 2, 4, 6, 3, 7, 5, 8 }; NPuzzleState <int[]> s8State = new NPuzzleState <int[]>(s8); HashSet <NPuzzleState <int[]> > explored = new HashSet <NPuzzleState <int[]> >(); Assert.NotNull(explored.Comparer); Console.WriteLine(explored.Comparer.ToString()); explored.Add(goalState); explored.Add(s1State); explored.Add(s2State); explored.Add(s3State); //explored.Add(s4); //explored.Add(s5State); explored.Add(s6State); explored.Add(s7State); Assert.True(explored.Contains(goalState)); Assert.True(explored.Contains(s1State)); Assert.True(explored.Contains(s7State)); Assert.True(explored.Contains(s2State)); Assert.True(explored.Contains(s3State)); Assert.True(s8State.Equals(s6State)); Assert.AreEqual(s8State.GetHashCode(), s6State.GetHashCode()); Assert.True(explored.Contains(s8State)); Assert.False(explored.Contains(s4State)); Assert.False(explored.Contains(s5State)); }