AoC code coverage
Current view: top level - puzzles - Tests.cpp (source / functions) Coverage Total Hit
Test: master Lines: 100.0 % 28 28
Test Date: 2025-07-28 10:53:57 Functions: 100.0 % 9 9

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

Generated by: LCOV version 2.0-1