Commit 77ce4f3b authored by Bednárek David RNDr. Ph.D.'s avatar Bednárek David RNDr. Ph.D.
Browse files

reworked gold files to improve compilation time

parent 17a281a9
......@@ -59,3 +59,28 @@ function(MAKE_TARGET TARGET_MACRO_SUFFIX TARGET)
endif()
target_link_libraries(${TARGET} Threads::Threads)
endfunction()
if(NOT DEFINED GOLD_SUFFIX)
if(DEFINED ENV{SLURM_JOB_PARTITION})
string(REGEX REPLACE "-.*" "" MACHINE_NAME $ENV{SLURM_JOB_PARTITION})
set(GOLD_SUFFIX MACHINE_NAME CACHE STRING "Gold file suffix")
message("Using gold time file suffix ${GOLD_SUFFIX}")
else()
set(GOLD_SUFFIX "" CACHE STRING "Gold file suffix")
message("Unregistered machine")
endif()
endif()
function(TARGET_GOLD_SOURCES TARGET PREFIX)
if(${CMAKE_BUILD_TYPE} MATCHES "Debug")
message("Using gold check file ${PREFIX}debug.cpp")
target_sources(${TARGET} PUBLIC "${PREFIX}debug.cpp")
else()
message("Using gold check file ${PREFIX}.cpp")
target_sources(${TARGET} PUBLIC "${PREFIX}.cpp")
if(NOT GOLD_SUFFIX MATCHES "")
message("Using gold time file ${PREFIX}${GOLD_SUFFIX}.cpp")
target_sources(${TARGET} PUBLIC "${PREFIX}${GOLD_SUFFIX}.cpp")
endif()
endif()
endfunction()
......@@ -2,5 +2,8 @@
target_include_directories(${TARGET_MACRO} PUBLIC ".")
target_include_directories(${TARGET_LEVEN} PUBLIC ".")
target_sources(${TARGET_MACRO} PUBLIC "fmwkng.hpp" "macroasgn.hpp" "macroasgn.cpp" "macromain.cpp" "macrogolddebug.cpp" "macrogold.cpp" "macrogoldbig.cpp" "macrogoldsmall.cpp" "macrogoldphi.cpp")
target_sources(${TARGET_LEVEN} PUBLIC "fmwkng.hpp" "levenasgn.hpp" "levenmain.cpp" "levengolddebug.cpp" "levengold.cpp" "levengoldbig.cpp")
target_sources(${TARGET_MACRO} PUBLIC "fmwkng.hpp" "macroasgn.hpp" "macroasgn.cpp" "macromain.cpp")
TARGET_GOLD_SOURCES(${TARGET_MACRO} "macrogold")
target_sources(${TARGET_LEVEN} PUBLIC "fmwkng.hpp" "levenasgn.hpp" "levenmain.cpp")
TARGET_GOLD_SOURCES(${TARGET_LEVEN} "levengold")
......@@ -526,6 +526,8 @@ namespace fmwkng {
~gold_data() noexcept = default;
void insert(gold_pair p);
void append(gold_data b)
{
dm.merge(b.dm);
......@@ -715,71 +717,84 @@ namespace fmwkng {
}
}
inline void print_node_code(std::ostream& os,
inline void print_node_code(std::ostream& osdecl,
std::ostream& osinit,
const reducer_node& rn,
std::size_t depth,
element_relevance er,
std::size_t i,
const std::string opener_prefix = {},
const element_observer_vector& openers = {},
const element_observer_vector& closers = {})
{
if (depth != 0)
{
if (!(*rn.source_range.begin())->reducible())
auto op2 = opener_prefix;
if (!opener_prefix.empty())
op2 += "_";
op2 += std::to_string(i);
osdecl << " static fmwkng::gold_pair gr_" << op2 << "()" << std::endl;
osdecl << " {" << std::endl;
osdecl << " fmwkng::gold_pair rv;" << std::endl;
if (!opener_prefix.empty())
osdecl << " rv.key = gp_" << opener_prefix << "();" << std::endl;
for (auto&& a : rn.reduced_children)
{
if (a->sense() == element_sense::OPEN && a->relevant(er))
{
auto o2 = openers;
auto c2 = closers;
o2.push_back(&**rn.source_range.begin());
c2.push_back(&**(rn.source_range.end() - 1));
for (auto&& a : rn.children)
{
print_node_code(os, a, depth - 1, er, o2, c2);
}
osdecl << " rv.key.push_back(";
a->make_code(osdecl);
osdecl << ");";
osdecl << std::endl;
}
if (a->sense() == element_sense::CLOSE && a->relevant(er))
{
osdecl << " rv.value.push_back(";
a->make_code(osdecl);
osdecl << ");";
osdecl << std::endl;
}
}
else
osdecl << " return rv;" << std::endl;
osdecl << " }" << std::endl;
if (depth > 1)
{
os << " {";
os << std::endl;
os << " {";
os << std::endl;
for (auto&& a : openers)
osdecl << " static fmwkng::impl::element_list gp_" << op2 << "()" << std::endl;
osdecl << " {" << std::endl;
osdecl << " fmwkng::impl::element_list rv";
if (!opener_prefix.empty())
osdecl << " = gp_" << opener_prefix << "()";
osdecl << ";" << std::endl;
auto&& a = *rn.source_range.begin();
if (!a->reducible())
{
if (a->relevant(er))
{
os << " ";
a->make_code(os);
os << ",";
os << std::endl;
}
}
for (auto&& a : rn.reduced_children)
{
if (a->sense() == element_sense::OPEN && a->relevant(er))
{
os << " ";
a->make_code(os);
os << ",";
os << std::endl;
osdecl << " rv.push_back(";
a->make_code(osdecl);
osdecl << ");";
osdecl << std::endl;
}
}
os << " },";
os << std::endl;
os << " {";
os << std::endl;
for (auto&& a : rn.reduced_children)
osdecl << " return rv;" << std::endl;
osdecl << " }" << std::endl;
if (!(*rn.source_range.begin())->reducible())
{
if (a->sense() == element_sense::CLOSE && a->relevant(er))
auto o2 = openers;
auto c2 = closers;
o2.push_back(&**rn.source_range.begin());
c2.push_back(&**(rn.source_range.end() - 1));
std::size_t j = 0;
for (auto&& a : rn.children)
{
os << " ";
a->make_code(os);
os << ",";
os << std::endl;
++j;
print_node_code(osdecl, osinit, a, depth - 1, er, j, op2, o2, c2);
}
}
os << " }";
os << std::endl;
os << " },";
os << std::endl;
}
{
osinit << " rv.insert(gr_" + op2 + "());" << std::endl;
}
}
......@@ -831,17 +846,15 @@ namespace fmwkng {
print_all(gold_data(), el, prefix);
}
inline void print_all_code(std::ostream & os, element_list_view el, element_relevance er)
inline void print_all_code(std::ostream & osdecl, std::ostream& osinit, element_list_view el, element_relevance er)
{
auto root = reduce_list(el);
auto depth = deepest_reducible(root);
for (auto d = depth; d > 0;)
std::size_t i = 0;
for (auto&& a : root)
{
--d;
for (auto&& a : root)
{
print_node_code(os, a, d, er);
}
++i;
print_node_code(osdecl, osinit, a, depth, er, i);
}
}
......@@ -2005,17 +2018,25 @@ namespace fmwkng {
std::cout << "Generating C++ code into " << code_fn_[i] << std::endl;
std::ofstream os(code_fn_[i]);
std::ostringstream oss1;
std::ostringstream oss2;
print_all_code(oss1, oss2, all_el_, element_relevance(i));
os << "#include \"fmwkng.hpp\"" << std::endl;
os << "#include \"" << config_t::code_header_name() << "\"" << std::endl;
os << "" << std::endl;
os << "namespace " << config_t::code_namespace_name() << " {" << std::endl;
os << oss1.str();
os << " static fmwkng::gold_data gold_results_()" << std::endl;
os << " {" << std::endl;
os << " return fmwkng::gold_data{" << std::endl;
os << " fmwkng::gold_data rv;" << std::endl;
print_all_code(os, all_el_, element_relevance(i));
os << oss2.str();
os << " };" << std::endl;
os << " return rv;" << std::endl;
os << " }" << std::endl;
os << " static fmwkng::gold_holder gh_(gold_master(), gold_results_);" << std::endl;
os << "}" << std::endl;
......@@ -4119,6 +4140,8 @@ namespace fmwkng {
};
struct gold_pair {
gold_pair()
{}
gold_pair(gold_element_list&& key, gold_element_list&& value)
: key(std::move(key.el)), value(std::move(value.el))
{}
......@@ -4149,6 +4172,12 @@ namespace fmwkng {
return operator=(gold_data(b));
}
inline void gold_data::insert(gold_pair p)
{
auto rv = dm.emplace(std::move(p.key), std::move(p.value));
assert(rv.second);
}
using gold_fnc_ptr = gold_data(*)();
class gold_holder : impl::immovable {
......
This diff is collapsed.
......@@ -2,91 +2,116 @@
#include "levenasgn.hpp"
namespace levenmain {
static fmwkng::gold_data gold_results_()
{
return fmwkng::gold_data{
{
{
std::make_unique<fmwkng::impl::element_t<levenmain::a_size,fmwkng::impl::element_sense::OPEN>>(std::make_pair(128,fmwkng::logarithmic(128,2048,16))),
std::make_unique<fmwkng::impl::element_t<levenmain::b_size,fmwkng::impl::element_sense::OPEN>>(std::make_pair(128,fmwkng::logarithmic(128,2048,16))),
std::make_unique<fmwkng::impl::config_element<levenmain::repeats,fmwkng::impl::element_sense::OPEN>>(64),
},
{
std::make_unique<fmwkng::impl::element_t<levenmain::output,fmwkng::impl::element_sense::CLOSE>>(128U),
}
},
{
{
std::make_unique<fmwkng::impl::element_t<levenmain::a_size,fmwkng::impl::element_sense::OPEN>>(std::make_pair(128,fmwkng::logarithmic(128,2048,16))),
std::make_unique<fmwkng::impl::element_t<levenmain::b_size,fmwkng::impl::element_sense::OPEN>>(std::make_pair(2048,fmwkng::logarithmic(128,2048,16))),
std::make_unique<fmwkng::impl::config_element<levenmain::repeats,fmwkng::impl::element_sense::OPEN>>(4),
},
{
std::make_unique<fmwkng::impl::element_t<levenmain::output,fmwkng::impl::element_sense::CLOSE>>(1997U),
}
},
{
{
std::make_unique<fmwkng::impl::element_t<levenmain::a_size,fmwkng::impl::element_sense::OPEN>>(std::make_pair(2048,fmwkng::logarithmic(128,2048,16))),
std::make_unique<fmwkng::impl::element_t<levenmain::b_size,fmwkng::impl::element_sense::OPEN>>(std::make_pair(128,fmwkng::logarithmic(128,2048,16))),
std::make_unique<fmwkng::impl::config_element<levenmain::repeats,fmwkng::impl::element_sense::OPEN>>(4),
},
{
std::make_unique<fmwkng::impl::element_t<levenmain::output,fmwkng::impl::element_sense::CLOSE>>(1995U),
}
},
{
{
std::make_unique<fmwkng::impl::element_t<levenmain::a_size,fmwkng::impl::element_sense::OPEN>>(std::make_pair(2048,fmwkng::logarithmic(128,2048,16))),
std::make_unique<fmwkng::impl::element_t<levenmain::b_size,fmwkng::impl::element_sense::OPEN>>(std::make_pair(2048,fmwkng::logarithmic(128,2048,16))),
std::make_unique<fmwkng::impl::config_element<levenmain::repeats,fmwkng::impl::element_sense::OPEN>>(1),
},
{
std::make_unique<fmwkng::impl::element_t<levenmain::output,fmwkng::impl::element_sense::CLOSE>>(2024U),
}
},
{
{
std::make_unique<fmwkng::impl::element_t<levenmain::a_size,fmwkng::impl::element_sense::OPEN>>(std::make_pair(128,fmwkng::logarithmic(128,2048,16))),
std::make_unique<fmwkng::impl::config_element<levenmain::b_size,fmwkng::impl::element_sense::OPEN>>(fmwkng::logarithmic(128,2048,16)),
std::make_unique<fmwkng::impl::config_element<levenmain::repeats,fmwkng::impl::element_sense::OPEN>>(64),
},
{
std::make_unique<fmwkng::impl::element_t<levenmain::output,fmwkng::impl::element_sense::CLOSE>>(128U),
}
},
{
{
std::make_unique<fmwkng::impl::element_t<levenmain::a_size,fmwkng::impl::element_sense::OPEN>>(std::make_pair(2048,fmwkng::logarithmic(128,2048,16))),
std::make_unique<fmwkng::impl::config_element<levenmain::b_size,fmwkng::impl::element_sense::OPEN>>(fmwkng::logarithmic(128,2048,16)),
std::make_unique<fmwkng::impl::config_element<levenmain::repeats,fmwkng::impl::element_sense::OPEN>>(4),
},
{
std::make_unique<fmwkng::impl::element_t<levenmain::output,fmwkng::impl::element_sense::CLOSE>>(1995U),
}
},
{
{
std::make_unique<fmwkng::impl::config_element<levenmain::a_size,fmwkng::impl::element_sense::OPEN>>(fmwkng::logarithmic(128,2048,16)),
std::make_unique<fmwkng::impl::config_element<levenmain::b_size,fmwkng::impl::element_sense::OPEN>>(fmwkng::logarithmic(128,2048,16)),
std::make_unique<fmwkng::impl::config_element<levenmain::repeats,fmwkng::impl::element_sense::OPEN>>(64),
},
{
std::make_unique<fmwkng::impl::element_t<levenmain::output,fmwkng::impl::element_sense::CLOSE>>(128U),
}
},
{
{
std::make_unique<fmwkng::impl::config_element<fmwkng::all_platforms_tag,fmwkng::impl::element_sense::OPEN>>(std::monostate()),
std::make_unique<fmwkng::impl::config_element<levenmain::a_size,fmwkng::impl::element_sense::OPEN>>(fmwkng::logarithmic(128,2048,16)),
std::make_unique<fmwkng::impl::config_element<levenmain::b_size,fmwkng::impl::element_sense::OPEN>>(fmwkng::logarithmic(128,2048,16)),
std::make_unique<fmwkng::impl::config_element<levenmain::repeats,fmwkng::impl::element_sense::OPEN>>(64),
},
{
std::make_unique<fmwkng::impl::element_t<levenmain::output,fmwkng::impl::element_sense::CLOSE>>(128U),
}
},
};
}
static fmwkng::gold_holder gh_(gold_master(), gold_results_);
static fmwkng::gold_pair gr_1()
{
fmwkng::gold_pair rv;
rv.key.push_back(std::make_unique<fmwkng::impl::config_element<fmwkng::all_platforms_tag, fmwkng::impl::element_sense::OPEN>>(std::monostate()));
rv.key.push_back(std::make_unique<fmwkng::impl::config_element<levenmain::a_size, fmwkng::impl::element_sense::OPEN>>(fmwkng::logarithmic(128, 2048, 16)));
rv.key.push_back(std::make_unique<fmwkng::impl::config_element<levenmain::b_size, fmwkng::impl::element_sense::OPEN>>(fmwkng::logarithmic(128, 2048, 16)));
rv.key.push_back(std::make_unique<fmwkng::impl::config_element<levenmain::repeats, fmwkng::impl::element_sense::OPEN>>(64));
rv.value.push_back(std::make_unique<fmwkng::impl::element_t<levenmain::output, fmwkng::impl::element_sense::CLOSE>>(128U));
return rv;
}
static fmwkng::impl::element_list gp_1()
{
fmwkng::impl::element_list rv;
return rv;
}
static fmwkng::gold_pair gr_1_1()
{
fmwkng::gold_pair rv;
rv.key = gp_1();
rv.key.push_back(std::make_unique<fmwkng::impl::config_element<levenmain::a_size, fmwkng::impl::element_sense::OPEN>>(fmwkng::logarithmic(128, 2048, 16)));
rv.key.push_back(std::make_unique<fmwkng::impl::config_element<levenmain::b_size, fmwkng::impl::element_sense::OPEN>>(fmwkng::logarithmic(128, 2048, 16)));
rv.key.push_back(std::make_unique<fmwkng::impl::config_element<levenmain::repeats, fmwkng::impl::element_sense::OPEN>>(64));
rv.value.push_back(std::make_unique<fmwkng::impl::element_t<levenmain::output, fmwkng::impl::element_sense::CLOSE>>(128U));
return rv;
}
static fmwkng::impl::element_list gp_1_1()
{
fmwkng::impl::element_list rv = gp_1();
return rv;
}
static fmwkng::gold_pair gr_1_1_1()
{
fmwkng::gold_pair rv;
rv.key = gp_1_1();
rv.key.push_back(std::make_unique<fmwkng::impl::element_t<levenmain::a_size, fmwkng::impl::element_sense::OPEN>>(std::make_pair(128, fmwkng::logarithmic(128, 2048, 16))));
rv.key.push_back(std::make_unique<fmwkng::impl::config_element<levenmain::b_size, fmwkng::impl::element_sense::OPEN>>(fmwkng::logarithmic(128, 2048, 16)));
rv.key.push_back(std::make_unique<fmwkng::impl::config_element<levenmain::repeats, fmwkng::impl::element_sense::OPEN>>(64));
rv.value.push_back(std::make_unique<fmwkng::impl::element_t<levenmain::output, fmwkng::impl::element_sense::CLOSE>>(128U));
return rv;
}
static fmwkng::impl::element_list gp_1_1_1()
{
fmwkng::impl::element_list rv = gp_1_1();
rv.push_back(std::make_unique<fmwkng::impl::element_t<levenmain::a_size, fmwkng::impl::element_sense::OPEN>>(std::make_pair(128, fmwkng::logarithmic(128, 2048, 16))));
return rv;
}
static fmwkng::gold_pair gr_1_1_1_1()
{
fmwkng::gold_pair rv;
rv.key = gp_1_1_1();
rv.key.push_back(std::make_unique<fmwkng::impl::element_t<levenmain::b_size, fmwkng::impl::element_sense::OPEN>>(std::make_pair(128, fmwkng::logarithmic(128, 2048, 16))));
rv.key.push_back(std::make_unique<fmwkng::impl::config_element<levenmain::repeats, fmwkng::impl::element_sense::OPEN>>(64));
rv.value.push_back(std::make_unique<fmwkng::impl::element_t<levenmain::output, fmwkng::impl::element_sense::CLOSE>>(128U));
return rv;
}
static fmwkng::gold_pair gr_1_1_1_2()
{
fmwkng::gold_pair rv;
rv.key = gp_1_1_1();
rv.key.push_back(std::make_unique<fmwkng::impl::element_t<levenmain::b_size, fmwkng::impl::element_sense::OPEN>>(std::make_pair(2048, fmwkng::logarithmic(128, 2048, 16))));
rv.key.push_back(std::make_unique<fmwkng::impl::config_element<levenmain::repeats, fmwkng::impl::element_sense::OPEN>>(4));
rv.value.push_back(std::make_unique<fmwkng::impl::element_t<levenmain::output, fmwkng::impl::element_sense::CLOSE>>(1997U));
return rv;
}
static fmwkng::gold_pair gr_1_1_2()
{
fmwkng::gold_pair rv;
rv.key = gp_1_1();
rv.key.push_back(std::make_unique<fmwkng::impl::element_t<levenmain::a_size, fmwkng::impl::element_sense::OPEN>>(std::make_pair(2048, fmwkng::logarithmic(128, 2048, 16))));
rv.key.push_back(std::make_unique<fmwkng::impl::config_element<levenmain::b_size, fmwkng::impl::element_sense::OPEN>>(fmwkng::logarithmic(128, 2048, 16)));
rv.key.push_back(std::make_unique<fmwkng::impl::config_element<levenmain::repeats, fmwkng::impl::element_sense::OPEN>>(4));
rv.value.push_back(std::make_unique<fmwkng::impl::element_t<levenmain::output, fmwkng::impl::element_sense::CLOSE>>(1995U));
return rv;
}
static fmwkng::impl::element_list gp_1_1_2()
{
fmwkng::impl::element_list rv = gp_1_1();
rv.push_back(std::make_unique<fmwkng::impl::element_t<levenmain::a_size, fmwkng::impl::element_sense::OPEN>>(std::make_pair(2048, fmwkng::logarithmic(128, 2048, 16))));
return rv;
}
static fmwkng::gold_pair gr_1_1_2_1()
{
fmwkng::gold_pair rv;
rv.key = gp_1_1_2();
rv.key.push_back(std::make_unique<fmwkng::impl::element_t<levenmain::b_size, fmwkng::impl::element_sense::OPEN>>(std::make_pair(128, fmwkng::logarithmic(128, 2048, 16))));
rv.key.push_back(std::make_unique<fmwkng::impl::config_element<levenmain::repeats, fmwkng::impl::element_sense::OPEN>>(4));
rv.value.push_back(std::make_unique<fmwkng::impl::element_t<levenmain::output, fmwkng::impl::element_sense::CLOSE>>(1995U));
return rv;
}
static fmwkng::gold_pair gr_1_1_2_2()
{
fmwkng::gold_pair rv;
rv.key = gp_1_1_2();
rv.key.push_back(std::make_unique<fmwkng::impl::element_t<levenmain::b_size, fmwkng::impl::element_sense::OPEN>>(std::make_pair(2048, fmwkng::logarithmic(128, 2048, 16))));
rv.key.push_back(std::make_unique<fmwkng::impl::config_element<levenmain::repeats, fmwkng::impl::element_sense::OPEN>>(1));
rv.value.push_back(std::make_unique<fmwkng::impl::element_t<levenmain::output, fmwkng::impl::element_sense::CLOSE>>(2024U));
return rv;
}
static fmwkng::gold_data gold_results_()
{
fmwkng::gold_data rv;
rv.insert(gr_1_1_1_1());
rv.insert(gr_1_1_1_2());
rv.insert(gr_1_1_1());
rv.insert(gr_1_1_2_1());
rv.insert(gr_1_1_2_2());
rv.insert(gr_1_1_2());
rv.insert(gr_1_1());
rv.insert(gr_1());
return rv;
}
static fmwkng::gold_holder gh_(gold_master(), gold_results_);
}
This diff is collapsed.
......@@ -2,91 +2,116 @@
#include "macroasgn.hpp"
namespace macromain {
static fmwkng::gold_data gold_results_()
{
return fmwkng::gold_data{
{
{
std::make_unique<fmwkng::impl::element_t<macromain::nonmacro_weight,fmwkng::impl::element_sense::OPEN>>(std::make_pair(3,fmwkng::logarithmic(3,48,16))),
std::make_unique<fmwkng::impl::element_t<macromain::exp_width,fmwkng::impl::element_sense::OPEN>>(std::make_pair(3,fmwkng::logarithmic(3,12,4))),
std::make_unique<fmwkng::impl::config_element<macromain::lines,fmwkng::impl::element_sense::OPEN>>(1600),
},
{
std::make_unique<fmwkng::impl::element_t<macromain::output_hash,fmwkng::impl::element_sense::CLOSE>>(17197085183543559838U),
}
},
{
{
std::make_unique<fmwkng::impl::element_t<macromain::nonmacro_weight,fmwkng::impl::element_sense::OPEN>>(std::make_pair(3,fmwkng::logarithmic(3,48,16))),
std::make_unique<fmwkng::impl::element_t<macromain::exp_width,fmwkng::impl::element_sense::OPEN>>(std::make_pair(12,fmwkng::logarithmic(3,12,4))),
std::make_unique<fmwkng::impl::config_element<macromain::lines,fmwkng::impl::element_sense::OPEN>>(400),
},
{
std::make_unique<fmwkng::impl::element_t<macromain::output_hash,fmwkng::impl::element_sense::CLOSE>>(13220193331699835243U),
}
},
{
{
std::make_unique<fmwkng::impl::element_t<macromain::nonmacro_weight,fmwkng::impl::element_sense::OPEN>>(std::make_pair(48,fmwkng::logarithmic(3,48,16))),
std::make_unique<fmwkng::impl::element_t<macromain::exp_width,fmwkng::impl::element_sense::OPEN>>(std::make_pair(3,fmwkng::logarithmic(3,12,4))),
std::make_unique<fmwkng::impl::config_element<macromain::lines,fmwkng::impl::element_sense::OPEN>>(1600),
},
{
std::make_unique<fmwkng::impl::element_t<macromain::output_hash,fmwkng::impl::element_sense::CLOSE>>(4410665444513865852U),
}
},
{
{
std::make_unique<fmwkng::impl::element_t<macromain::nonmacro_weight,fmwkng::impl::element_sense::OPEN>>(std::make_pair(48,fmwkng::logarithmic(3,48,16))),
std::make_unique<fmwkng::impl::element_t<macromain::exp_width,fmwkng::impl::element_sense::OPEN>>(std::make_pair(12,fmwkng::logarithmic(3,12,4))),
std::make_unique<fmwkng::impl::config_element<macromain::lines,fmwkng::impl::element_sense::OPEN>>(400),
},
{
std::make_unique<fmwkng::impl::element_t<macromain::output_hash,fmwkng::impl::element_sense::CLOSE>>(16473863340873376882U),
}
},
{
{
std::make_unique<fmwkng::impl::element_t<macromain::nonmacro_weight,fmwkng::impl::element_sense::OPEN>>(std::make_pair(3,fmwkng::logarithmic(3,48,16))),
std::make_unique<fmwkng::impl::config_element<macromain::exp_width,fmwkng::impl::element_sense::OPEN>>(fmwkng::logarithmic(3,12,4)),
std::make_unique<fmwkng::impl::config_element<macromain::lines,fmwkng::impl::element_sense::OPEN>>(1600),
},
{
std::make_unique<fmwkng::impl::element_t<macromain::output_hash,fmwkng::impl::element_sense::CLOSE>>(17197085183543559838U),
}
},
{
{
std::make_unique<fmwkng::impl::element_t<macromain::nonmacro_weight,fmwkng::impl::element_sense::OPEN>>(std::make_pair(48,fmwkng::logarithmic(3,48,16))),
std::make_unique<fmwkng::impl::config_element<macromain::exp_width,fmwkng::impl::element_sense::OPEN>>(fmwkng::logarithmic(3,12,4)),
std::make_unique<fmwkng::impl::config_element<macromain::lines,fmwkng::impl::element_sense::OPEN>>(1600),
},
{
std::make_unique<fmwkng::impl::element_t<macromain::output_hash,fmwkng::impl::element_sense::CLOSE>>(4410665444513865852U),
}
},
{
{
std::make_unique<fmwkng::impl::config_element<macromain::nonmacro_weight,fmwkng::impl::element_sense::OPEN>>(fmwkng::logarithmic(3,48,16)),
std::make_unique<fmwkng::impl::config_element<macromain::exp_width,fmwkng::impl::element_sense::OPEN>>(fmwkng::logarithmic(3,12,4)),
std::make_unique<fmwkng::impl::config_element<macromain::lines,fmwkng::impl::element_sense::OPEN>>(1600),
},
{
std::make_unique<fmwkng::impl::element_t<macromain::output_hash,fmwkng::impl::element_sense::CLOSE>>(17197085183543559838U),
}
},
{
{
std::make_unique<fmwkng::impl::config_element<fmwkng::all_platforms_tag,fmwkng::impl::element_sense::OPEN>>(std::monostate()),
std::make_unique<fmwkng::impl::config_element<macromain::nonmacro_weight,fmwkng::impl::element_sense::OPEN>>(fmwkng::logarithmic(3,48,16)),
std::make_unique<fmwkng::impl::config_element<macromain::exp_width,fmwkng::impl::element_sense::OPEN>>(fmwkng::logarithmic(3,12,4)),
std::make_unique<fmwkng::impl::config_element<macromain::lines,fmwkng::impl::element_sense::OPEN>>(1600),
},
{
std::make_unique<fmwkng::impl::element_t<macromain::output_hash,fmwkng::impl::element_sense::CLOSE>>(17197085183543559838U),
}
},
};
}
static fmwkng::gold_holder gh_(gold_master(), gold_results_);
static fmwkng::gold_pair gr_1()
{
fmwkng::gold_pair rv;
rv.key.push_back(std::make_unique<fmwkng::impl::config_element<fmwkng::all_platforms_tag, fmwkng::impl::element_sense::OPEN>>(std::monostate()));
rv.key.push_back(std::make_unique<fmwkng::impl::config_element<macromain::nonmacro_weight, fmwkng::impl::element_sense::OPEN>>(fmwkng::logarithmic(3, 48, 16)));
rv.key.push_back(std::make_unique<fmwkng::impl::config_element<macromain::exp_width, fmwkng::impl::element_sense::OPEN>>(fmwkng::logarithmic(3, 12, 4)));
rv.key.push_back(std::make_unique<fmwkng::impl::config_element<macromain::lines, fmwkng::impl::element_sense::OPEN>>(1600));
rv.value.push_back(std::make_unique<fmwkng::impl::element_t<macromain::output_hash, fmwkng::impl::element_sense::CLOSE>>(17197085183543559838U));
return rv;
}
static fmwkng::impl::element_list gp_1()
{
fmwkng::impl::element_list rv;
return rv;
}
static fmwkng::gold_pair gr_1_1()
{
fmwkng::gold_pair rv;
rv.key = gp_1();
rv.key.push_back(std::make_unique<fmwkng::impl::config_element<macromain::nonmacro_weight, fmwkng::impl::element_sense