23 #include "gtest/gtest.h"
30 class IndividualTest :
public ::testing::Test {
39 virtual ~IndividualTest() {
46 virtual void SetUp() {
51 virtual void TearDown() {
56 std::shared_ptr<Individual> createIndividual(
size_t num_genes, std::string constraint=
"") {
61 for(
size_t i=0; i < num_genes; i++) {
63 std::pair<double, double>(lower_bound_, upper_bound_));
64 names.push_back(
"dvar"+std::to_string(i));
66 if (constraint.empty() ==
false)
67 constraints.insert(std::pair<std::string,Expressions::Expr_t*>
70 std::shared_ptr<Individual> ind(
new Individual(bounds,names,constraints));
78 TEST_F(IndividualTest, IndividualRespectsBounds) {
81 std::shared_ptr<Individual> ind = createIndividual(num_genes);
82 double gene = ind->genes_m[0];
84 EXPECT_LE(lower_bound_, gene) <<
"gene should respect lower bound";
85 EXPECT_GE(upper_bound_, gene) <<
"gene should respect upper bound";
87 size_t my_size = ind->genes_m.size();
88 EXPECT_EQ(static_cast<size_t>(num_genes), my_size)
89 <<
"individual should only have " << num_genes <<
" gene(s)";
93 TEST_F(IndividualTest, IndividualHasCorrectNumberOfGenes) {
95 size_t num_genes = 12;
96 std::shared_ptr<Individual> ind = createIndividual(num_genes);
98 size_t my_size = ind->genes_m.size();
99 EXPECT_EQ(static_cast<size_t>(num_genes), my_size)
100 <<
"individual should only have " << num_genes <<
" gene(s)";
104 TEST_F(IndividualTest, IndividualRandomGene) {
106 size_t num_genes = 1;
107 std::shared_ptr<Individual> ind = createIndividual(num_genes);
108 double gene = ind->genes_m[0];
109 double new_gene = ind->new_gene(0);
111 EXPECT_NE(gene, new_gene) <<
"new gene should be different";
114 TEST_F(IndividualTest, IndividualConstraint) {
116 size_t num_genes = 2;
117 double half = (lower_bound_ + upper_bound_) / 2.;
118 std::string constraint =
"(dvar0 + dvar1)/2. <=" + std::to_string(half);
121 for (
int i=0; i<10; i++) {
122 std::shared_ptr<Individual> ind = createIndividual(num_genes,constraint);
123 double gene0 = ind->genes_m[0];
124 double gene1 = ind->genes_m[1];
125 EXPECT_LE((gene0+gene1)/2, half) <<
"constraint should be respected";
130 int main(
int argc,
char **argv) {
131 ::testing::InitGoogleTest(&argc, argv);
132 return RUN_ALL_TESTS();
int main(int argc, char *argv[])
void bounds(const PETE_Expr< T1 > &expr, Vektor< T2, D > &minval, Vektor< T2, D > &maxval)
std::vector< std::pair< double, double > > bounds_t
bounds on design variables
std::vector< std::string > names_t
gene names
Expressions::Named_t constraints_t
constraints