mirror of
https://github.com/NVIDIA/nvbench.git
synced 2026-04-26 09:48:53 +00:00
Refactor state_generator.
The old implementation was scattered and ad hoc. This one is slightly less so. More importantly, refactoring to this design will make it easier to add device traversal.
This commit is contained in:
@@ -87,8 +87,47 @@ void test_basic()
|
||||
ASSERT(!vals.has_value("String"));
|
||||
}
|
||||
|
||||
void test_append()
|
||||
{
|
||||
nvbench::named_values vals1;
|
||||
vals1.set_int64("Int1", 32);
|
||||
vals1.set_float64("Float1", 34.5);
|
||||
vals1.set_string("String1", "string1!");
|
||||
vals1.set_value("IntVar1", {nvbench::int64_t{36}});
|
||||
|
||||
nvbench::named_values vals2;
|
||||
vals2.set_int64("Int2", 42);
|
||||
vals2.set_float64("Float2", 3.14);
|
||||
vals2.set_string("String2", "string2!");
|
||||
vals2.set_value("IntVar2", {nvbench::int64_t{55}});
|
||||
|
||||
vals1.append(vals2);
|
||||
|
||||
// Order should be preserved:
|
||||
const auto &names = vals1.get_names();
|
||||
ASSERT(names.size() == 8);
|
||||
ASSERT(names[0] == "Int1");
|
||||
ASSERT(names[1] == "Float1");
|
||||
ASSERT(names[2] == "String1");
|
||||
ASSERT(names[3] == "IntVar1");
|
||||
ASSERT(names[4] == "Int2");
|
||||
ASSERT(names[5] == "Float2");
|
||||
ASSERT(names[6] == "String2");
|
||||
ASSERT(names[7] == "IntVar2");
|
||||
|
||||
ASSERT(vals1.get_int64("Int1") == 32);
|
||||
ASSERT(vals1.get_float64("Float1") == 34.5);
|
||||
ASSERT(vals1.get_string("String1") == "string1!");
|
||||
ASSERT(vals1.get_int64("IntVar1") == 36);
|
||||
ASSERT(vals1.get_int64("Int2") == 42);
|
||||
ASSERT(vals1.get_float64("Float2") == 3.14);
|
||||
ASSERT(vals1.get_string("String2") == "string2!");
|
||||
ASSERT(vals1.get_int64("IntVar2") == 55);
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test_empty();
|
||||
test_basic();
|
||||
test_append();
|
||||
}
|
||||
|
||||
@@ -23,20 +23,10 @@ void template_generator(nvbench::state &, nvbench::type_list<F, I, M>){};
|
||||
NVBENCH_DEFINE_CALLABLE_TEMPLATE(template_generator, template_callable);
|
||||
using template_bench = nvbench::benchmark<template_callable, type_axes>;
|
||||
|
||||
struct state_generator_tester : nvbench::detail::state_generator
|
||||
{
|
||||
using nvbench::detail::state_generator::add_axis;
|
||||
using nvbench::detail::state_generator::get_current_indices;
|
||||
using nvbench::detail::state_generator::get_number_of_states;
|
||||
using nvbench::detail::state_generator::init;
|
||||
using nvbench::detail::state_generator::iter_valid;
|
||||
using nvbench::detail::state_generator::next;
|
||||
};
|
||||
|
||||
void test_empty()
|
||||
{
|
||||
// no axes = one state
|
||||
state_generator_tester sg;
|
||||
nvbench::detail::state_iterator sg;
|
||||
ASSERT(sg.get_number_of_states() == 1);
|
||||
sg.init();
|
||||
ASSERT(sg.iter_valid());
|
||||
@@ -47,7 +37,7 @@ void test_empty()
|
||||
void test_single_state()
|
||||
{
|
||||
// one single-value axis = one state
|
||||
state_generator_tester sg;
|
||||
nvbench::detail::state_iterator sg;
|
||||
sg.add_axis("OnlyAxis", nvbench::axis_type::string, 1);
|
||||
ASSERT(sg.get_number_of_states() == 1);
|
||||
sg.init();
|
||||
@@ -64,7 +54,7 @@ void test_single_state()
|
||||
|
||||
void test_basic()
|
||||
{
|
||||
state_generator_tester sg;
|
||||
nvbench::detail::state_iterator sg;
|
||||
sg.add_axis("Axis1", nvbench::axis_type::string, 2);
|
||||
sg.add_axis("Axis2", nvbench::axis_type::string, 3);
|
||||
sg.add_axis("Axis3", nvbench::axis_type::string, 3);
|
||||
|
||||
Reference in New Issue
Block a user