mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
[yul-phaser] Add ProgramCacheFactory class
This commit is contained in:
parent
e2ff9698d3
commit
3b49fbb8a5
@ -55,7 +55,7 @@ protected:
|
||||
};
|
||||
};
|
||||
|
||||
class FitnessMetricFactoryFixture
|
||||
class FixtureWithPrograms
|
||||
{
|
||||
protected:
|
||||
vector<CharStream> m_sourceStreams = {
|
||||
@ -68,6 +68,11 @@ protected:
|
||||
get<Program>(Program::load(m_sourceStreams[1])),
|
||||
get<Program>(Program::load(m_sourceStreams[2])),
|
||||
};
|
||||
};
|
||||
|
||||
class FitnessMetricFactoryFixture: public FixtureWithPrograms
|
||||
{
|
||||
protected:
|
||||
FitnessMetricFactory::Options m_options = {
|
||||
/* metric = */ MetricChoice::CodeSize,
|
||||
/* metricAggregator = */ MetricAggregatorChoice::Average,
|
||||
@ -317,6 +322,35 @@ BOOST_FIXTURE_TEST_CASE(build_should_combine_populations_from_all_sources, Poula
|
||||
BOOST_TEST(count(begin, end, Individual(Chromosome("fcL"), *m_fitnessMetric)) >= 2);
|
||||
}
|
||||
|
||||
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
BOOST_AUTO_TEST_SUITE(ProgramCacheFactoryTest)
|
||||
|
||||
BOOST_FIXTURE_TEST_CASE(build_should_create_cache_for_each_input_program_if_cache_enabled, FixtureWithPrograms)
|
||||
{
|
||||
ProgramCacheFactory::Options options{/* programCacheEnabled = */ true};
|
||||
vector<shared_ptr<ProgramCache>> caches = ProgramCacheFactory::build(options, m_programs);
|
||||
assert(m_programs.size() >= 2 && "There must be at least 2 programs for this test to be meaningful");
|
||||
|
||||
BOOST_TEST(caches.size() == m_programs.size());
|
||||
for (size_t i = 0; i < m_programs.size(); ++i)
|
||||
{
|
||||
BOOST_REQUIRE(caches[i] != nullptr);
|
||||
BOOST_TEST(toString(caches[i]->program()) == toString(m_programs[i]));
|
||||
}
|
||||
}
|
||||
|
||||
BOOST_FIXTURE_TEST_CASE(build_should_return_nullptr_for_each_input_program_if_cache_disabled, FixtureWithPrograms)
|
||||
{
|
||||
ProgramCacheFactory::Options options{/* programCacheEnabled = */ false};
|
||||
vector<shared_ptr<ProgramCache>> caches = ProgramCacheFactory::build(options, m_programs);
|
||||
assert(m_programs.size() >= 2 && "There must be at least 2 programs for this test to be meaningful");
|
||||
|
||||
BOOST_TEST(caches.size() == m_programs.size());
|
||||
for (size_t i = 0; i < m_programs.size(); ++i)
|
||||
BOOST_TEST(caches[i] == nullptr);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
BOOST_AUTO_TEST_SUITE(ProgramFactoryTest)
|
||||
|
||||
|
@ -283,6 +283,25 @@ Population PopulationFactory::buildFromFile(
|
||||
return buildFromStrings(readLinesFromFile(_filePath), move(_fitnessMetric));
|
||||
}
|
||||
|
||||
ProgramCacheFactory::Options ProgramCacheFactory::Options::fromCommandLine(po::variables_map const& _arguments)
|
||||
{
|
||||
return {
|
||||
_arguments["program-cache"].as<bool>(),
|
||||
};
|
||||
}
|
||||
|
||||
vector<shared_ptr<ProgramCache>> ProgramCacheFactory::build(
|
||||
Options const& _options,
|
||||
vector<Program> _programs
|
||||
)
|
||||
{
|
||||
vector<shared_ptr<ProgramCache>> programCaches;
|
||||
for (Program& program: _programs)
|
||||
programCaches.push_back(_options.programCacheEnabled ? make_shared<ProgramCache>(move(program)) : nullptr);
|
||||
|
||||
return programCaches;
|
||||
}
|
||||
|
||||
ProgramFactory::Options ProgramFactory::Options::fromCommandLine(po::variables_map const& _arguments)
|
||||
{
|
||||
return {
|
||||
|
@ -45,6 +45,7 @@ class FitnessMetric;
|
||||
class GeneticAlgorithm;
|
||||
class Population;
|
||||
class Program;
|
||||
class ProgramCache;
|
||||
|
||||
enum class Algorithm
|
||||
{
|
||||
@ -160,6 +161,25 @@ public:
|
||||
);
|
||||
};
|
||||
|
||||
/**
|
||||
* Builds and validates instances of @a ProgramCache.
|
||||
*/
|
||||
class ProgramCacheFactory
|
||||
{
|
||||
public:
|
||||
struct Options
|
||||
{
|
||||
bool programCacheEnabled;
|
||||
|
||||
static Options fromCommandLine(boost::program_options::variables_map const& _arguments);
|
||||
};
|
||||
|
||||
static std::vector<std::shared_ptr<ProgramCache>> build(
|
||||
Options const& _options,
|
||||
std::vector<Program> _programs
|
||||
);
|
||||
};
|
||||
|
||||
/**
|
||||
* Builds and validates instances of @a Program.
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user