#pragma once #include #include #include #include #include namespace utf_data = boost::unit_test::data; /// [Custom command line /// arguments](https://www.boost.org/doc/libs/1_73_0/libs/test/doc/html/boost_test/runtime_config/custom_command_line_arguments.html) class dataset_loader { public: explicit dataset_loader(std::string_view testcase_group) {} virtual ~dataset_loader() = default; public: enum { arity = 2 }; struct iterator { using iterator_type = std::vector::const_iterator; iterator(iterator_type input_iter_, iterator_type expected_iter_) : input_iter{input_iter_}, expected_iter{expected_iter_} {} std::tuple operator*() const { return {*input_iter, *expected_iter}; } void operator++() { ++input_iter; ++expected_iter; } private: iterator_type input_iter; iterator_type expected_iter; }; utf_data::size_t size() const { return dataset.input.size(); } iterator begin() const { // in real, read data from filesystem into datasets depend on testcase_group // and argc/argv return iterator(dataset.input.begin(), dataset.expected.begin()); } private: struct test_dataset { std::vector input; std::vector expected; }; test_dataset mutable dataset; };