// Test random stackings. static void randomTest(const WindowVec *fromStack, const MRestacker *fromState) { if (optLearning) QSKIP("nothing to learn", SkipSingle); // Generate @nrandom random permutations of @managedWindows. MRestacker::WindowStack stack(managedWindows.toList()); for (unsigned i = 0; i < optNRandomTests; i++) { std::random_shuffle(stack.begin(), stack.end(), libcRandom); dotest(stack, fromStack, fromState); } qDebug("tested %u random permutations", optNRandomTests); printStats(); }
// Open @Dpy, create @fakeRoot and @optNWindows @managedWindows. void SuperStackerTest::initTestCase() { if (!optHeadless) { Dpy = XOpenDisplay(NULL); if (!Dpy) qWarning("couldn't connect to X, degrading to headless mode"); } // Create @managedWindows. if (Dpy != NULL) { fakeRoot = XCreateSimpleWindow(Dpy, DefaultRootWindow(Dpy), 0, 0, 100, 100, 0, 0, 0); QVERIFY(fakeRoot != None); for (int i = 0; i < optNWindows; i++) managedWindows << XCreateSimpleWindow(Dpy, fakeRoot, 0, 0, 100, 100, 0, 0, 0); QVERIFY(!managedWindows.contains(None)); // Randomize the reference order to make sure that the superstacker // doesn't depend on the XIDs. std::random_shuffle(managedWindows.begin(), managedWindows.end(), libcRandom); referenceRestack(managedWindows); } else { // Make up a bunch of unique XID:s. qDebug("initializing headless mode"); while (managedWindows.count() < optNWindows) { Window win = 1 + random(); if (!managedWindows.contains(win)) managedWindows << win; } } // Initialize MRestacker and tell it what windows are managed. testRestacker.init(Dpy, fakeRoot); testRestacker.setState(managedWindows); QVERIFY(testRestacker.verifyState(managedWindows)); if (Dpy) QVERIFY(testRestacker.verifyState()); QVERIFY(testRestacker.getState() == managedWindows.toList()); }