git-svn-id: svn://scm.gforge.inria.fr/svnroot/paradiseo@1746 331e1502-861f-0410-8da2-ba01fb791d7f

This commit is contained in:
jhumeau 2010-04-23 15:53:21 +00:00
commit 7e08ca9892
5 changed files with 175 additions and 8 deletions

View file

@ -31,10 +31,84 @@ Contact: paradiseo-help@lists.gforge.inria.fr
#include <cstdlib>
#include <cassert>
#include <perturb/moRestartPerturb.h>
#include <problems/permutation/moShiftNeighbor.h>
#include <problems/eval/queenFullEval.h>
#include <eoInt.h>
#include <eoInit.h>
typedef eoInt<unsigned int> QUEEN;
class dummyInit : public eoInit<QUEEN>
{
public:
dummyInit(unsigned int _size):size(_size){}
void operator()(QUEEN& _sol){
_sol.resize(0);
for(unsigned int i=0; i<size; i++)
_sol.push_back(i);
_sol.invalidate();
}
private:
unsigned int size;
};
int main(){
std::cout << "[t-moRestartPerturb] => START" << std::endl;
QUEEN queen;
moShiftNeighbor<QUEEN> n;
dummyInit initializer(4);
queenFullEval<QUEEN> eval;
moRestartPerturb<moShiftNeighbor<QUEEN> > test(initializer, eval, 3);
queen.resize(4);
queen[0]=1;
queen[1]=2;
queen[2]=0;
queen[3]=3;
test.init(queen);
test(queen);
assert(queen[0]==1 && queen[1]==2 && queen[2]==0 && queen[3]==3);
test.update(queen,n); //first noMove
test(queen);
assert(queen[0]==1 && queen[1]==2 && queen[2]==0 && queen[3]==3);
test.update(queen,n); //second noMove
test(queen);
assert(queen[0]==1 && queen[1]==2 && queen[2]==0 && queen[3]==3);
test.update(queen,n); //third noMove
test(queen);//here the perturb should be called
assert(queen[0]==0 && queen[1]==1 && queen[2]==2 && queen[3]==3);
queen[0]=1;
queen[1]=2;
queen[2]=0;
queen[3]=3;
//Retry the same test to verify counter is been reinit to 0
test(queen);
assert(queen[0]==1 && queen[1]==2 && queen[2]==0 && queen[3]==3);
test.update(queen,n); //first noMove
test(queen);
assert(queen[0]==1 && queen[1]==2 && queen[2]==0 && queen[3]==3);
test.update(queen,n); //second noMove
test(queen);
assert(queen[0]==1 && queen[1]==2 && queen[2]==0 && queen[3]==3);
test.update(queen,n); //third noMove
test(queen); //here the perturb should be called
assert(queen[0]==0 && queen[1]==1 && queen[2]==2 && queen[3]==3);
std::cout << "[t-moRestartPerturb] => OK" << std::endl;