void testEraseRanges(Var< IntSet > set, int nElems, int nTests) { for (int i = 1; i < (int)sqrt(nTests); i++) { int elem = (int)((double) nElems * (rand() / (double)RAND_MAX)); set.domain().insert(elem); } std::set<int> toErase; for (int i = 1; i <= nElems; i++) { toErase.insert(i); } for (int i = 1; i < (int)sqrt(nTests); i++) { /* int startPos = (int)((double) set.domain().possSize() * (rand() / (double)RAND_MAX)); int finishPos = min((int)((double) (set.domain().possSize() - startPos) * (rand() / (double)RAND_MAX)),10); CurSetFD<int>::PIterator b = set.domain().beginPoss(); while (startPos-- > 0) b++; CurSetFD<int>::PIterator start = b; while (finishPos-- > 0) b++; CurSetFD<int>::PIterator finish = b; */ int start = max(1,(int)((double) nElems * (rand() / (double)RAND_MAX))); int finish = min(start + min((int)((double) nElems * (rand() / (double)RAND_MAX)),(int)(nElems / sqrt(nTests))),nElems); std::set<int>::iterator b = toErase.find(start), e = toErase.find(finish); timer.resume(); Detail::setEraseRange(set.domain(), b, e); timer.pause(); } }
void testFindLUB(Var< IntSet > set, int nElems, int nTests) { for (int i = 1; i <= nTests / 2; i++) { int elem = (int)((double) set.domain().possSize() * (rand() / (double)RAND_MAX)); set.domain().insert(elem); } timer.resume(); for (int i = 1; i <= nTests; i++) { int elem = (int)((double)nElems * (rand() / (double)RAND_MAX)); if (set.domain().findInIn(elem) == set.domain().endIn()) set.domain().findInPoss(elem); } timer.pause(); }
void testInserts(Var< IntSet > set, int nElems, int nTests) { timer.resume(); for (int i = 1; i <= min(nTests,nElems); i++) { int elem = (int)((double) nElems * (rand() / (double)RAND_MAX)); set.domain().insert(elem); } timer.pause(); }
void testFindPoss(Var< IntSet > set, int nElems, int nTests) { timer.resume(); for (int i = 1; i <= nTests; i++) { int elem = (int)((double)nElems * (rand() / (double)RAND_MAX)); set.domain().findInPoss(elem); } timer.pause(); }
void testFindGLB(Var< IntSet > set, int nElems, int nTests) { set.solver().post(cardinal(set) == nElems); set.solver().solve(setLabel(set,true)); timer.resume(); for (int i = 1; i <= nTests; i++) { int elem = (int)((double)nElems * (rand() / (double)RAND_MAX)); set.domain().findInIn(elem); } timer.pause(); }