Example #1
0
        public void OptimisedStabiliser()
        {
            //	This group is a 3x3 grid with symmetric rows and columns
            var group = new PermutationGroup(
                new Cycle(new [] { 0, 1 }, new [] { 3, 4 }, new [] { 6, 7 }),
                new Cycle(new [] { 0, 1, 2 }, new [] { 3, 4, 5 }, new [] { 6, 7, 8 }),
                new Cycle(new [] { 0, 3 }, new [] { 1, 4 }, new [] { 2, 5 }),
                new Cycle(new [] { 0, 3, 6 }, new [] { 1, 4, 7 }, new [] { 2, 5, 8 })
                );

            PermutationGroup stabilisedPointZero;

            group.OrbitStabiliser(new Points(0), out stabilisedPointZero);

            stabilisedPointZero.Optimise();

            Assert.AreEqual(2, stabilisedPointZero.GeneratorCount);

            var orbitOfZeroOnStabiliserZero = stabilisedPointZero.Orbit(0);
            var orbitOfOneOnStabiliserZero  = stabilisedPointZero.Orbit(1);
            var orbitOfFourOnStabiliserZero = stabilisedPointZero.Orbit(4);

            CollectionAssert.AreEquivalent(new [] { new [] { 0 } }, orbitOfZeroOnStabiliserZero);
            CollectionAssert.AreEquivalent(new [] { new [] { 1 }, new [] { 2 } }, orbitOfOneOnStabiliserZero);
            CollectionAssert.AreEquivalent(new [] { new [] { 4 }, new [] { 5 }, new [] { 7 }, new [] { 8 } }, orbitOfFourOnStabiliserZero);
        }
Example #2
0
        public void OrbitStabiliser()
        {
            //	This group is a 3x3 grid with symmetric rows and columns
            var group = new PermutationGroup(
                new Cycle(new [] { 0, 1 }, new [] { 3, 4 }, new [] { 6, 7 }),
                new Cycle(new [] { 0, 1, 2 }, new [] { 3, 4, 5 }, new [] { 6, 7, 8 }),
                new Cycle(new [] { 0, 3 }, new [] { 1, 4 }, new [] { 2, 5 }),
                new Cycle(new [] { 0, 3, 6 }, new [] { 1, 4, 7 }, new [] { 2, 5, 8 })
                );

            PermutationGroup stabilisedPointZero;
            var orbitZero = group.OrbitStabiliser(new Points(0), out stabilisedPointZero);

            CollectionAssert.AreEquivalent(Enumerable.Range(0, 9).Select(i => new [] { i }), orbitZero);

            var orbitOfZeroOnStabiliserZero = stabilisedPointZero.Orbit(0);
            var orbitOfOneOnStabiliserZero  = stabilisedPointZero.Orbit(1);
            var orbitOfFourOnStabiliserZero = stabilisedPointZero.Orbit(4);

            CollectionAssert.AreEquivalent(new [] { new [] { 0 } }, orbitOfZeroOnStabiliserZero);
            CollectionAssert.AreEquivalent(new [] { new [] { 1 }, new [] { 2 } }, orbitOfOneOnStabiliserZero);
            CollectionAssert.AreEquivalent(new [] { new [] { 4 }, new [] { 5 }, new [] { 7 }, new [] { 8 } }, orbitOfFourOnStabiliserZero);
        }