Implement generic testing for 2019.

This method reads a specific directory and applies all inputs there to
their proper implementation.
This commit is contained in:
2019-09-12 14:51:17 +02:00
parent e26c90d54a
commit 4e5b3b5a15
11 changed files with 63 additions and 15 deletions

View File

@@ -0,0 +1,4 @@
+1
-2
+3
+1

View File

@@ -0,0 +1 @@
3

View File

@@ -0,0 +1,3 @@
+1
+1
+1

View File

@@ -0,0 +1 @@
3

View File

@@ -0,0 +1,3 @@
+1
+1
-2

View File

@@ -0,0 +1 @@
0

View File

@@ -0,0 +1,3 @@
-1
-2
-3

View File

@@ -0,0 +1 @@
-6

View File

@@ -1,24 +1,53 @@
#define BOOST_TEST_MODULE solutions_tests
#include <filesystem>
#include <regex>
#include <string>
#include <tuple>
#include <boost/test/included/unit_test.hpp>
#include <boost/test/data/test_case.hpp>
#include "solutions.hpp"
static std::string run_day1_part1(std::string_view input) {
std::stringstream input_stream;
input_stream.write(input.data(), input.size());
std::vector<std::string> get_samples() {
std::vector<std::string> samples;
for (auto entry : std::filesystem::directory_iterator("./samples")) {
if (entry.path().filename().extension() == ".in") {
samples.push_back(entry.path().string());
}
}
std::stringstream output_stream;
aoc2019::day01_part1(input_stream, output_stream);
return output_stream.str();
return samples;
}
BOOST_AUTO_TEST_CASE(sample_day1_part1)
{
BOOST_TEST(run_day1_part1("+1\n-2\n+3\n+1") == "3\n");
BOOST_TEST(run_day1_part1("+1\n+1\n+1") == "3\n");
BOOST_TEST(run_day1_part1("+1\n+1\n-2") == "0\n");
static std::string read_file(const std::string &file_name) {
std::ifstream file(file_name);
return std::string(std::istreambuf_iterator<char>(file),
std::istreambuf_iterator<char>());
}
static void test_solution_impl(const std::string &input_name) {
std::regex name_parser("/(\\d{2})-(1|2).*\\.in$");
std::smatch match;
// Sanity check, is this a parseable input file?
BOOST_TEST(std::regex_search(input_name, match, name_parser));
const auto output_filename = input_name.substr(0, input_name.length() - 3) + ".out";
const int day = std::atoi(match[1].str().c_str());
const int part2 = match[2].str() == "2";
const auto desired_output = read_file(output_filename);
const auto implementation = aoc2019::get_implementation(day, part2);
std::stringstream output_buffer;
std::ifstream input(input_name);
implementation(input, output_buffer);
BOOST_TEST(desired_output == output_buffer.str());
}
BOOST_DATA_TEST_CASE(test_solution,
boost::unit_test::data::make(get_samples()),
input_name) {
test_solution_impl(input_name);
}