AoC code coverage
Current view: top level - puzzles - Tests.cpp (source / functions) Coverage Total Hit
Test: master Lines: 100.0 % 27 27
Test Date: 2026-05-24 23:46:10 Functions: 100.0 % 8 8

            Line data    Source code
       1              : #include "Puzzle.h"
       2              : 
       3              : #include <gtest/gtest.h>
       4              : 
       5              : #include <algorithm>
       6              : 
       7              : class PuzzleTest : public testing::Test {
       8              : public:
       9          156 :   PuzzleTest(std::shared_ptr<Puzzle> const &puzzle) : _puzzle(puzzle) {}
      10              : 
      11              : protected:
      12          312 :   Puzzle const &puzzle() { return *_puzzle; }
      13              : 
      14              : private:
      15              :   std::shared_ptr<Puzzle> _puzzle;
      16              : };
      17              : 
      18              : class PuzzleTestPt1 : public PuzzleTest {
      19              : public:
      20              :   using PuzzleTest::PuzzleTest;
      21              : 
      22           78 :   void TestBody() override {
      23           78 :     std::string const result = puzzle().runPart1();
      24           78 :     ASSERT_EQ(result, puzzle().solutionPart1());
      25           78 :   }
      26              : };
      27              : 
      28              : class PuzzleTestPt2 : public PuzzleTest {
      29              : public:
      30              :   using PuzzleTest::PuzzleTest;
      31              : 
      32           78 :   void TestBody() override {
      33           78 :     std::string const result = puzzle().runPart2();
      34           78 :     ASSERT_EQ(result, puzzle().solutionPart2());
      35           78 :   }
      36              : };
      37              : 
      38          157 : void registerTests() {
      39          157 :   std::vector<std::unique_ptr<Puzzle>> puzzles = Puzzle::createAll();
      40          157 :   std::vector<std::shared_ptr<Puzzle>> sharedPuzzles;
      41          157 :   std::ranges::move(puzzles, std::back_inserter(sharedPuzzles));
      42              : 
      43        12246 :   for (auto const &p : sharedPuzzles) {
      44        12246 :     std::string suiteName = p->name();
      45        12246 :     testing::RegisterTest(suiteName.c_str(), "Pt1", nullptr, nullptr, __FILE__, __LINE__,
      46              :                           // Important to use the fixture type as the return type here.
      47        12246 :                           [=]() -> PuzzleTest * { return new PuzzleTestPt1(p); });
      48              : 
      49        12246 :     testing::RegisterTest(suiteName.c_str(), "Pt2", nullptr, nullptr, __FILE__, __LINE__,
      50              :                           // Important to use the fixture type as the return type here.
      51        12246 :                           [=]() -> PuzzleTest * { return new PuzzleTestPt2(p); });
      52        12246 :   }
      53          157 : }
      54              : 
      55          157 : int main(int argc, char **argv) {
      56              : 
      57          157 :   testing::InitGoogleTest(&argc, argv);
      58          157 :   registerTests();
      59          157 :   return RUN_ALL_TESTS();
      60          157 : }
        

Generated by: LCOV version 2.4-0