2929//
3030// ---------------------------------------------------------------------------
3131
32-
3332#define BOOST_TEST_DYN_LINK
3433#define BOOST_TEST_MODULE Backtrack search test - set stabilization and set images
3534#include < boost/test/unit_test.hpp>
4241#include < permlib/bsgs.h>
4342#include < permlib/construct/schreier_sims_construction.h>
4443#include < permlib/generator/bsgs_generator.h>
44+ #include < permlib/generator/bsgs_random_generator.h>
4545#include < permlib/transversal/schreier_tree_transversal.h>
4646#include < permlib/construct/schreier_sims_construction.h>
4747#include < permlib/change/conjugating_base_change.h>
@@ -117,15 +117,25 @@ void checkSetImage(const GroupInformation& info, unsigned int setSize, unsigned
117117
118118 typedef typename TRANSVERSAL::PERMtype PERM;
119119 BSGS<PERM, TRANSVERSAL> bsgs = ConstructDeterministic1<PERM, TRANSVERSAL>()(info);
120-
120+
121121 for (unsigned int i = 0 ; i < numberOfSets; ++i) {
122122 std::set<dom_int> testSet1;
123123 std::set<dom_int> testSet2;
124124 while (testSet1.size () < setSize) {
125125 testSet1.insert (randomInt (info.n ));
126126 }
127- while (testSet2.size () < setSize) {
128- testSet2.insert (randomInt (info.n ));
127+ if (i < numberOfSets / 2 ) {
128+ while (testSet2.size () < setSize) {
129+ testSet2.insert (randomInt (info.n ));
130+ }
131+ } else {
132+ // Ensure that for at least have of the test cases a mapping element
133+ // exists.
134+ BSGSRandomGenerator<PERM,TRANSVERSAL> bsgsRandomGen (bsgs);
135+ const PERM p = bsgsRandomGen.next ();
136+ BOOST_FOREACH (const dom_int& x, testSet1) {
137+ testSet2.insert (p / x);
138+ }
129139 }
130140
131141 // change the base so that is prefixed by the set
@@ -172,7 +182,7 @@ BOOST_AUTO_TEST_CASE( setstabilizer )
172182 typedef Permutation PERM;
173183 // and Schreier tree transversals
174184 typedef SchreierTreeTransversal<PERM> TRANSVERSAL;
175-
185+
176186 checkStabilizer<TRANSVERSAL>(info_testThesis, 3 , 10 );
177187 checkStabilizer<TRANSVERSAL>(info_1997, 3 , 10 );
178188 checkStabilizer<TRANSVERSAL>(info_cyclic10, 2 , 30 );
@@ -186,17 +196,18 @@ BOOST_AUTO_TEST_CASE( setimage )
186196 typedef Permutation PERM;
187197 // and Schreier tree transversals
188198 typedef SchreierTreeTransversal<PERM> TRANSVERSAL;
189-
190- checkSetImage<TRANSVERSAL>(info_testThesis, 2 , 10 );
191- checkSetImage<TRANSVERSAL>(info_testThesis, 3 , 10 );
192- checkSetImage<TRANSVERSAL>(info_testThesis, 5 , 10 );
193- checkSetImage<TRANSVERSAL>(info_1997, 2 , 10 );
194- checkSetImage<TRANSVERSAL>(info_1997, 3 , 10 );
195- checkSetImage<TRANSVERSAL>(info_1997, 5 , 10 );
199+ checkSetImage<TRANSVERSAL>(info_testThesis, 1 , 20 );
200+ checkSetImage<TRANSVERSAL>(info_testThesis, 2 , 30 );
201+ checkSetImage<TRANSVERSAL>(info_testThesis, 3 , 30 );
202+ checkSetImage<TRANSVERSAL>(info_testThesis, 5 , 30 );
203+ checkSetImage<TRANSVERSAL>(info_1997, 1 , 30 );
204+ checkSetImage<TRANSVERSAL>(info_1997, 2 , 30 );
205+ checkSetImage<TRANSVERSAL>(info_1997, 3 , 30 );
206+ checkSetImage<TRANSVERSAL>(info_1997, 5 , 30 );
196207 checkSetImage<TRANSVERSAL>(info_cyclic10, 2 , 30 );
197208 checkSetImage<TRANSVERSAL>(info_S6_3, 4 , 30 );
198- checkSetImage<TRANSVERSAL>(info_e6, 4 , 15 );
199- checkSetImage<TRANSVERSAL>(info_e6, 11 , 3 );
209+ checkSetImage<TRANSVERSAL>(info_e6, 4 , 30 );
210+ checkSetImage<TRANSVERSAL>(info_e6, 11 , 10 );
200211}
201212
202213BOOST_AUTO_TEST_CASE ( vectorstabilizer_group )
0 commit comments