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); }