コード例 #1
0
        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));
        }