#include #include #include #include #include using namespace intcode; namespace { auto Compute(Machine machine, ValueType d) -> ValueType { ValueType output = -1; Run(machine, [=](){ return d; }, [&](auto o) { output = o; }); return output; } } // namespace TEST_SUITE("documented examples") { TEST_CASE("part 1") { std::vector pgm {109,1,204,-1,1001,100,1,100,1008,100,16,101,1006,101,0,99}; std::vector output; Machine machine {pgm}; Run(machine, []() -> ValueType{ REQUIRE(false); return 0; }, [&](ValueType o){ output.push_back(o);}); REQUIRE(pgm == output); } } auto Main(std::istream & in, std::ostream & out) -> void { auto machine = Machine{ParseStream(in)}; out << "Part 1: " << Compute(machine, 1) << std::endl; out << "Part 2: " << Compute(std::move(machine), 2) << std::endl; }