public void TestTransversal()
        {
            int size = 4;
            // Sym(n) : make the total symmetry group
            PermutationGroup group = PermutationGroup.MakeSymN(size);

            // Aut(G) : make the automorphism group for a graph
            Permutation p1         = new Permutation(2, 1, 0, 3);
            Permutation p2         = new Permutation(0, 3, 2, 1);
            var         generators = new List <Permutation>
            {
                p1,
                p2
            };
            PermutationGroup subgroup = new PermutationGroup(size, generators);

            // generate the traversal
            var transversal = group.Transversal(subgroup);

            int subgroupOrder   = (int)subgroup.Order();
            int groupOrder      = (int)group.Order();
            int transversalSize = transversal.Count;

            // check that |Aut(G)| / |Sym(N)| = |Transversal|
            Assert.AreEqual(Factorial(size), groupOrder);
            Assert.AreEqual(groupOrder / subgroupOrder, transversalSize);
        }
        public void OrderTest()
        {
            int size             = 5;
            PermutationGroup sym = PermutationGroup.MakeSymN(size);

            Assert.AreEqual(Factorial(size), sym.Order());
        }
        public void AllTest()
        {
            int size = 4;
            PermutationGroup group = PermutationGroup.MakeSymN(size);
            var all = group.GenerateAll();

            Assert.AreEqual(Factorial(size), all.Count);
        }
        public void ApplyTest()
        {
            var all  = new List <Permutation>();
            int size = 4;
            PermutationGroup group = PermutationGroup.MakeSymN(size);

            group.Apply(new NBacktracker(all));
            Assert.AreEqual(Factorial(size), all.Count);
        }
        public void Apply_FinishEarlyTest()
        {
            List <Permutation> all = new List <Permutation>();
            int max  = 5; // stop after this many seen
            int size = 4;
            PermutationGroup group = PermutationGroup.MakeSymN(size);

            group.Apply(new FinishEarlyBacktracker(all, max));
            Assert.AreEqual(max, all.Count);
        }