[yul-phaser] Add FitnessMetricCombination and derived classes for average, sum, min and max

This commit is contained in:
Kamil Śliwak
2020-03-18 16:28:16 +01:00
parent 0e03839e62
commit e4a360947b
3 changed files with 154 additions and 0 deletions
+54
View File
@@ -78,6 +78,21 @@ protected:
Program m_optimisedProgram = optimisedProgram(m_program);
};
class FitnessMetricCombinationFixture: public ProgramBasedMetricFixture
{
protected:
vector<shared_ptr<FitnessMetric>> m_simpleMetrics = {
make_shared<ProgramSize>(m_program, 1),
make_shared<ProgramSize>(m_program, 2),
make_shared<ProgramSize>(m_program, 3),
};
vector<size_t> m_fitness = {
m_simpleMetrics[0]->evaluate(m_chromosome),
m_simpleMetrics[1]->evaluate(m_chromosome),
m_simpleMetrics[2]->evaluate(m_chromosome),
};
};
BOOST_AUTO_TEST_SUITE(Phaser)
BOOST_AUTO_TEST_SUITE(FitnessMetricsTest)
BOOST_AUTO_TEST_SUITE(ProgramBasedMetricTest)
@@ -173,6 +188,45 @@ BOOST_FIXTURE_TEST_CASE(evaluate_should_multiply_the_result_by_scaling_factor, P
BOOST_TEST(RelativeProgramSize(m_program, 4).evaluate(m_chromosome) == round(10000.0 * sizeRatio));
}
BOOST_AUTO_TEST_SUITE_END()
BOOST_AUTO_TEST_SUITE(FitnessMetricCombinationTest)
BOOST_FIXTURE_TEST_CASE(FitnessMetricAverage_evaluate_should_compute_average_of_values_returned_by_metrics_passed_to_it, FitnessMetricCombinationFixture)
{
FitnessMetricAverage metric(m_simpleMetrics);
assert(m_simpleMetrics.size() == 3);
BOOST_TEST(metric.evaluate(m_chromosome) == (m_fitness[0] + m_fitness[1] + m_fitness[2]) / 3);
BOOST_TEST(metric.metrics() == m_simpleMetrics);
}
BOOST_FIXTURE_TEST_CASE(FitnessMetricSum_evaluate_should_compute_sum_of_values_returned_by_metrics_passed_to_it, FitnessMetricCombinationFixture)
{
FitnessMetricSum metric(m_simpleMetrics);
assert(m_simpleMetrics.size() == 3);
BOOST_TEST(metric.evaluate(m_chromosome) == m_fitness[0] + m_fitness[1] + m_fitness[2]);
BOOST_TEST(metric.metrics() == m_simpleMetrics);
}
BOOST_FIXTURE_TEST_CASE(FitnessMetricMaximum_evaluate_should_compute_maximum_of_values_returned_by_metrics_passed_to_it, FitnessMetricCombinationFixture)
{
FitnessMetricMaximum metric(m_simpleMetrics);
assert(m_simpleMetrics.size() == 3);
BOOST_TEST(metric.evaluate(m_chromosome) == max(m_fitness[0], max(m_fitness[1], m_fitness[2])));
BOOST_TEST(metric.metrics() == m_simpleMetrics);
}
BOOST_FIXTURE_TEST_CASE(FitnessMetricMinimum_evaluate_should_compute_minimum_of_values_returned_by_metrics_passed_to_it, FitnessMetricCombinationFixture)
{
FitnessMetricMinimum metric(m_simpleMetrics);
assert(m_simpleMetrics.size() == 3);
BOOST_TEST(metric.evaluate(m_chromosome) == min(m_fitness[0], min(m_fitness[1], m_fitness[2])));
BOOST_TEST(metric.metrics() == m_simpleMetrics);
}
BOOST_AUTO_TEST_SUITE_END()
BOOST_AUTO_TEST_SUITE_END()
BOOST_AUTO_TEST_SUITE_END()