#include #include #include #include "real_value.h" typedef eoReal realVec; double test( eoPop& pop, double target_value ) { eoEvalFuncPtr&> eval( real_value ); eoPopLoopEval pop_eval(eval); pop_eval(pop,pop); eoInterquartileRangeStat iqr_stat(0.0, "IQR"); iqr_stat( pop ); std::cout << iqr_stat.longName() << "=" << iqr_stat.value() << " should be " << target_value << std::endl; return iqr_stat.value(); } int main() { eoPop pop; // fixed test realVec sol1(2,-1); realVec sol2(2,-1); realVec sol3(2,1); realVec sol4(2,1); pop.push_back( sol1 ); pop.push_back( sol2 ); pop.push_back( sol3 ); pop.push_back( sol4 ); // on the sphere function everyone has the same fitness of 1 if( test(pop, 0) != 0 ) { exit(1); } pop.erase(pop.begin(),pop.end()); // fixed test sol1 = realVec(2,0); sol2 = realVec(2,0); sol3 = realVec(2,1); sol4 = realVec(2,1); pop.push_back( sol1 ); pop.push_back( sol2 ); pop.push_back( sol3 ); pop.push_back( sol4 ); if( test(pop, 1) != 1 ) { exit(1); } // test on a random normal distribution eoNormalGenerator normal(1,rng); eoInitFixedLength init_N(2, normal); pop = eoPop( 1000000, init_N ); double iqr = test(pop, 1.09); if( iqr < 1.08 || iqr > 1.11 ) { exit(1); } }