3 #include "gtest/gtest.h"
5 #include "boost/smart_ptr.hpp"
12 class IndividualTest :
public ::testing::Test {
21 virtual ~IndividualTest() {
28 virtual void SetUp() {
33 virtual void TearDown() {
38 boost::shared_ptr<Individual> createIndividual(
size_t num_genes, std::string constraint=
"") {
43 for(
size_t i=0; i < num_genes; i++) {
45 std::pair<double, double>(lower_bound_, upper_bound_));
46 names.push_back(
"dvar"+std::to_string(i));
48 if (constraint.empty() ==
false)
49 constraints.insert(std::pair<std::string,Expressions::Expr_t*>
52 boost::shared_ptr<Individual> ind(
new Individual(bounds,names,constraints));
60 TEST_F(IndividualTest, IndividualRespectsBounds) {
63 boost::shared_ptr<Individual> ind = createIndividual(num_genes);
64 double gene = ind->genes_m[0];
66 EXPECT_LE(lower_bound_, gene) <<
"gene should respect lower bound";
67 EXPECT_GE(upper_bound_, gene) <<
"gene should respect upper bound";
69 size_t my_size = ind->genes_m.size();
70 EXPECT_EQ(static_cast<size_t>(num_genes), my_size)
71 <<
"individual should only have " << num_genes <<
" gene(s)";
75 TEST_F(IndividualTest, IndividualHasCorrectNumberOfGenes) {
77 size_t num_genes = 12;
78 boost::shared_ptr<Individual> ind = createIndividual(num_genes);
80 size_t my_size = ind->genes_m.size();
81 EXPECT_EQ(static_cast<size_t>(num_genes), my_size)
82 <<
"individual should only have " << num_genes <<
" gene(s)";
86 TEST_F(IndividualTest, IndividualRandomGene) {
89 boost::shared_ptr<Individual> ind = createIndividual(num_genes);
90 double gene = ind->genes_m[0];
91 double new_gene = ind->new_gene(0);
93 EXPECT_NE(gene, new_gene) <<
"new gene should be different";
96 TEST_F(IndividualTest, IndividualConstraint) {
99 double half = (lower_bound_ + upper_bound_) / 2.;
100 std::string constraint =
"(dvar0 + dvar1)/2. <=" + std::to_string(half);
103 for (
int i=0; i<10; i++) {
104 boost::shared_ptr<Individual> ind = createIndividual(num_genes,constraint);
105 double gene0 = ind->genes_m[0];
106 double gene1 = ind->genes_m[1];
107 EXPECT_LE((gene0+gene1)/2, half) <<
"constraint should be respected";
112 int main(
int argc,
char **argv) {
113 ::testing::InitGoogleTest(&argc, argv);
114 return RUN_ALL_TESTS();
Expression to be evaluated in the framework.
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