예제 #1
0
        public void CpCoordTest() //Tests GetCpCoord, SetCpCoord
        {
            Random random = new Random(7777777);
            int    length = 50;

            //if applying GetCpCoord and SetCpCoord results in the same array as at the beginning
            CubieCube expected = CubieCube.FromAlg(Alg.FromRandomMoves(length, random));
            CubieCube result   = CubieCube.CreateSolved();

            int coord = Coordinates.GetCornerPermutation(expected);

            Coordinates.SetCornerPermutation(result, coord);

            CollectionAssert.AreEqual(expected.CornerPermutation, result.CornerPermutation);

            //apply R2 to a solved cube
            CubieCube cube = CubieCube.CreateSolved();

            cube.ApplyMove(Move.R2);

            int expectedCoord = 36177;
            int resultCoord   = Coordinates.GetCornerPermutation(cube);

            Assert.AreEqual(expectedCoord, resultCoord);

            expected = CubieCube.CreateSolved();
            expected.ApplyMove(Move.R2);

            result = CubieCube.CreateSolved();
            Coordinates.SetCornerPermutation(result, expectedCoord);

            CollectionAssert.AreEqual(expected.CornerPermutation, result.CornerPermutation);

            //if solved permutation corresponds to the coordinate 0
            expected = CubieCube.CreateSolved();
            result   = CubieCube.FromAlg(Alg.FromRandomMoves(length, random));
            Coordinates.SetCornerPermutation(result, 0);

            CollectionAssert.AreEqual(expected.CornerPermutation, result.CornerPermutation);

            result = CubieCube.CreateSolved();

            Assert.AreEqual(0, Coordinates.GetCornerPermutation(result));

            //example from http://kociemba.org/math/coordlevel
            Corner[] cp = new Corner[] { Corner.DFR, Corner.UFL, Corner.ULB, Corner.URF, Corner.DRB, Corner.DLF, Corner.DBL, Corner.UBR };
            cube          = CubieCube.Create(cp, CubieCube.SolvedCO, CubieCube.SolvedEP, CubieCube.SolvedEO, CubieCube.SolvedCenters);
            resultCoord   = Coordinates.GetCornerPermutation(cube);
            expectedCoord = 21021;
            Assert.AreEqual(expectedCoord, resultCoord);

            //exceptions
            Assert.ThrowsException <ArgumentNullException>(() => Coordinates.GetCornerPermutation(null));

            Assert.ThrowsException <ArgumentNullException>(() => Coordinates.SetCornerPermutation(null, 0));
            Assert.ThrowsException <ArgumentOutOfRangeException>(() => Coordinates.SetCornerPermutation(CubieCube.CreateSolved(), -1));
            Assert.ThrowsException <ArgumentOutOfRangeException>(() => Coordinates.SetCornerPermutation(CubieCube.CreateSolved(), Coordinates.NumCornerPermutations));
        }
예제 #2
0
        public void CreateTest()
        {
            Assert.AreEqual(
                CubieCube.CreateSolved(), CubieCube.Create(
                    CubieCube.SolvedCP, CubieCube.SolvedCO,
                    CubieCube.SolvedEP, CubieCube.SolvedEO,
                    CubieCube.SolvedCenters));

            #region test exceptions
            Assert.ThrowsException <ArgumentNullException>(()
                                                           => CubieCube.Create(null, CubieCube.SolvedCO,
                                                                               CubieCube.SolvedEP, CubieCube.SolvedEO,
                                                                               CubieCube.SolvedCenters));
            Assert.ThrowsException <ArgumentNullException>(()
                                                           => CubieCube.Create(CubieCube.SolvedCP, null,
                                                                               CubieCube.SolvedEP, CubieCube.SolvedEO,
                                                                               CubieCube.SolvedCenters));
            Assert.ThrowsException <ArgumentNullException>(()
                                                           => CubieCube.Create(CubieCube.SolvedCP,
                                                                               CubieCube.SolvedCO, null, CubieCube.SolvedEO,
                                                                               CubieCube.SolvedCenters));
            Assert.ThrowsException <ArgumentNullException>(()
                                                           => CubieCube.Create(CubieCube.SolvedCP,
                                                                               CubieCube.SolvedCO, CubieCube.SolvedEP, null,
                                                                               CubieCube.SolvedCenters));
            Assert.ThrowsException <ArgumentNullException>(()
                                                           => CubieCube.Create(CubieCube.SolvedCP,
                                                                               CubieCube.SolvedCO, CubieCube.SolvedEP,
                                                                               CubieCube.SolvedEO, null));

            Assert.ThrowsException <ArgumentException>(()
                                                       => CubieCube.Create(new Corner[NumCorners + 1],
                                                                           CubieCube.SolvedCO, CubieCube.SolvedEP,
                                                                           CubieCube.SolvedEO, CubieCube.SolvedCenters));
            Assert.ThrowsException <ArgumentException>(()
                                                       => CubieCube.Create(CubieCube.SolvedCP,
                                                                           new int[NumCorners + 1], CubieCube.SolvedEP,
                                                                           CubieCube.SolvedEO, CubieCube.SolvedCenters));
            Assert.ThrowsException <ArgumentException>(()
                                                       => CubieCube.Create(CubieCube.SolvedCP,
                                                                           CubieCube.SolvedCO, new Edge[NumEdges + 1],
                                                                           CubieCube.SolvedEO, CubieCube.SolvedCenters));
            Assert.ThrowsException <ArgumentException>(()
                                                       => CubieCube.Create(CubieCube.SolvedCP,
                                                                           CubieCube.SolvedCO, CubieCube.SolvedEP,
                                                                           new int[NumEdges + 1], CubieCube.SolvedCenters));
            Assert.ThrowsException <ArgumentException>(()
                                                       => CubieCube.Create(CubieCube.SolvedCP,
                                                                           CubieCube.SolvedCO, CubieCube.SolvedEP,
                                                                           CubieCube.SolvedEO, new Face[NumFaces + 1]));
            #endregion test exceptions
        }