AoC code coverage
Current view: top level - puzzles - Tests.cpp (source / functions) Coverage Total Hit
Test: master Lines: 100.0 % 27 27
Test Date: 2025-12-11 19:43:23 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          152 :   PuzzleTest(std::shared_ptr<Puzzle> const &puzzle) : _puzzle(puzzle) {}
      10              : 
      11              : protected:
      12          304 :   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           76 :   void TestBody() override {
      23           76 :     std::string const result = puzzle().runPart1();
      24           76 :     ASSERT_EQ(result, puzzle().solutionPart1());
      25           76 :   }
      26              : };
      27              : 
      28              : class PuzzleTestPt2 : public PuzzleTest {
      29              : public:
      30              :   using PuzzleTest::PuzzleTest;
      31              : 
      32           76 :   void TestBody() override {
      33           76 :     std::string const result = puzzle().runPart2();
      34           76 :     ASSERT_EQ(result, puzzle().solutionPart2());
      35           76 :   }
      36              : };
      37              : 
      38          153 : void registerTests() {
      39          153 :   std::vector<std::unique_ptr<Puzzle>> puzzles = Puzzle::createAll();
      40          153 :   std::vector<std::shared_ptr<Puzzle>> sharedPuzzles;
      41          153 :   std::ranges::move(puzzles, std::back_inserter(sharedPuzzles));
      42              : 
      43        11628 :   for (auto const &p : sharedPuzzles) {
      44        11628 :     std::string suiteName = p->name();
      45        11628 :     testing::RegisterTest(suiteName.c_str(), "Pt1", nullptr, nullptr, __FILE__, __LINE__,
      46              :                           // Important to use the fixture type as the return type here.
      47        11628 :                           [=]() -> PuzzleTest * { return new PuzzleTestPt1(p); });
      48              : 
      49        11628 :     testing::RegisterTest(suiteName.c_str(), "Pt2", nullptr, nullptr, __FILE__, __LINE__,
      50              :                           // Important to use the fixture type as the return type here.
      51        11628 :                           [=]() -> PuzzleTest * { return new PuzzleTestPt2(p); });
      52        11628 :   }
      53          153 : }
      54              : 
      55          153 : int main(int argc, char **argv) {
      56              : 
      57          153 :   testing::InitGoogleTest(&argc, argv);
      58          153 :   registerTests();
      59          153 :   return RUN_ALL_TESTS();
      60          153 : }
        

Generated by: LCOV version 2.0-1