3 #include "gtest/gtest.h"
5 #include "boost/smart_ptr.hpp"
10 class PopulationTest :
public ::testing::Test {
18 virtual ~PopulationTest() {
25 virtual void SetUp() {
30 virtual void TearDown() {
36 boost::shared_ptr<Individual> createIndividual(
size_t num_genes) {
41 for(
size_t i=0; i < num_genes; i++) {
42 bounds.push_back(std::pair<double, double>(0.0, 10.0));
43 names.push_back(
"dvar"+std::to_string(i));
46 boost::shared_ptr<Individual> ind(
new Individual(bounds,names,constraints));
51 boost::scoped_ptr< Population<Individual> > population_;
54 TEST_F(PopulationTest, AddOneIndividual) {
56 boost::shared_ptr<Individual> ind = createIndividual(1);
57 unsigned int id = population_->add_individual(ind);
58 double gene = ind->genes_m[0];
59 double obj = ind->objectives_m[0];
61 EXPECT_EQ(static_cast<size_t>(0),
id) <<
"first individuals id should be 0";
63 boost::shared_ptr<Individual> tmp = population_->get_individual(
id);
64 EXPECT_EQ(0, tmp.get()) <<
"no committed individuals after insert";
66 tmp = population_->get_staging(
id);
67 EXPECT_EQ(gene, tmp->genes_m[0]) <<
"gene should have specified value";
68 EXPECT_EQ(obj, tmp->objectives_m[0]) <<
"objective should have specified value";
70 size_t my_size = population_->size();
71 EXPECT_EQ(static_cast<size_t>(0), my_size)
72 <<
"no committed individuals, population should still be 0";
76 TEST_F(PopulationTest, CommitOneIndividual) {
78 boost::shared_ptr<Individual> ind = createIndividual(1);
79 unsigned int id = population_->add_individual(ind);
80 double gene = ind->genes_m[0];
81 double obj = ind->objectives_m[0];
83 EXPECT_EQ(static_cast<size_t>(0),
id) <<
"first individuals id should be 0";
85 population_->commit_individuals();
87 boost::shared_ptr<Individual> tmp = population_->get_staging(
id);
88 EXPECT_EQ(0, tmp.get()) <<
"no staging individuals after commit";
90 tmp = population_->get_individual(
id);
91 EXPECT_EQ(gene, tmp->genes_m[0]);
92 EXPECT_EQ(obj, tmp->objectives_m[0]);
94 size_t my_size = population_->size();
95 EXPECT_EQ(static_cast<size_t>(1), my_size);
99 TEST_F(PopulationTest, KeepIndividuals) {
101 boost::shared_ptr<Individual> ind1 = createIndividual(1);
102 boost::shared_ptr<Individual> ind2 = createIndividual(1);
103 boost::shared_ptr<Individual> ind3 = createIndividual(1);
104 boost::shared_ptr<Individual> ind4 = createIndividual(1);
106 size_t id0 = population_->add_individual(ind1);
107 EXPECT_EQ(static_cast<size_t>(0), id0);
108 size_t id1 = population_->add_individual(ind2);
109 EXPECT_EQ(static_cast<size_t>(1), id1);
110 size_t id2 = population_->add_individual(ind3);
111 EXPECT_EQ(static_cast<size_t>(2), id2);
112 size_t id3 = population_->add_individual(ind4);
113 EXPECT_EQ(static_cast<size_t>(3), id3);
115 population_->commit_individuals();
117 std::set<unsigned int> survivors;
118 survivors.insert(id1);
119 survivors.insert(id3);
121 population_->keepSurvivors(survivors);
123 size_t size = population_->size();
124 EXPECT_EQ(survivors.size(), size);
126 boost::shared_ptr<Individual> tmp = population_->get_individual(id1);
127 EXPECT_EQ(ind2->genes_m[0], tmp->genes_m[0]);
128 EXPECT_EQ(ind2->objectives_m[0], tmp->objectives_m[0]);
131 TEST_F(PopulationTest, IDsContinuous) {
133 boost::shared_ptr<Individual> ind0 = createIndividual(1);
134 boost::shared_ptr<Individual> ind1 = createIndividual(1);
135 boost::shared_ptr<Individual> ind2 = createIndividual(1);
136 boost::shared_ptr<Individual> ind3 = createIndividual(1);
138 size_t id0 = population_->add_individual(ind0);
139 EXPECT_EQ(static_cast<size_t>(0), id0);
140 size_t id1 = population_->add_individual(ind1);
141 EXPECT_EQ(static_cast<size_t>(1), id1);
142 size_t id2 = population_->add_individual(ind2);
143 EXPECT_EQ(static_cast<size_t>(2), id2);
144 size_t id3 = population_->add_individual(ind3);
145 EXPECT_EQ(static_cast<size_t>(3), id3);
147 unsigned int individual_to_be_removed_id = 1;
148 population_->remove_individual(ind1);
150 boost::shared_ptr<Individual> newind = createIndividual(1);
151 unsigned int id_new = population_->add_individual(newind);
152 EXPECT_EQ(individual_to_be_removed_id, id_new);
154 boost::shared_ptr<Individual> tmp = population_->get_staging(id_new);
155 EXPECT_EQ(newind->genes_m[0], tmp->genes_m[0]);
156 EXPECT_EQ(newind->objectives_m[0], tmp->objectives_m[0]);
159 TEST_F(PopulationTest, FindNonExistingStaging) {
161 boost::shared_ptr<Individual> tmp = population_->get_staging(124);
162 EXPECT_EQ(0, tmp.get());
165 TEST_F(PopulationTest, FindNonExistingIndividual) {
167 boost::shared_ptr<Individual> tmp = population_->get_individual(124);
168 EXPECT_EQ(0, tmp.get());
171 TEST_F(PopulationTest, RepresentedCheck) {
173 boost::shared_ptr<Individual> ind = createIndividual(1);
174 population_->add_individual(ind);
176 population_->add_individual(ind);
177 population_->commit_individuals();
179 bool represented = population_->isRepresentedInPopulation(ind->genes_m);
180 EXPECT_TRUE(represented);
182 std::vector<double> tmp_genes;
183 tmp_genes.push_back(12312);
184 represented = population_->isRepresentedInPopulation(tmp_genes);
185 EXPECT_FALSE(represented);
190 int main(
int argc,
char **argv) {
191 ::testing::InitGoogleTest(&argc, argv);
192 return RUN_ALL_TESTS();
void bounds(const PETE_Expr< T1 > &expr, Vektor< T2, D > &minval, Vektor< T2, D > &maxval)
int main(int argc, char *argv[])
std::vector< std::string > names_t
gene names
Expressions::Named_t constraints_t
constraints
std::vector< std::pair< double, double > > bounds_t
bounds on design variables