GCC Code Coverage Report


Directory: ./
File: TestShape.cpp
Date: 2026-03-21 20:51:59
Exec Total Coverage
Lines: 30 30 100.0%
Functions: 8 8 100.0%
Branches: 53 144 36.8%

Line Branch Exec Source
1 #include "Shape.hpp"
2 #include "compat/gsl14.hpp"
3 #include <gtest/gtest.h>
4
5 namespace { // anonymous namespace for definitions that are local to this file
6
7 4 void TestClone(const Shape& original) {
8
3/6
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
✓ Branch 15 taken 4 times.
✗ Branch 16 not taken.
4 std::cout << gsl::czstring{__func__} << ": " << typeid(original).name()
9
1/2
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
4 << std::endl;
10
1/2
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 auto clone = original.clone();
11
2/12
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 4 times.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
4 EXPECT_NE(clone.get(), &original) << "distinct objects";
12
13 // Necessary (but not sufficient) conditions for two shapes to be the same.
14
4/14
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
✓ Branch 12 taken 4 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 4 times.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 4 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
4 EXPECT_DOUBLE_EQ(clone->area(), original.area());
15
6/18
✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✓ Branch 9 taken 4 times.
✗ Branch 10 not taken.
✓ Branch 14 taken 4 times.
✗ Branch 15 not taken.
✓ Branch 20 taken 4 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 4 times.
✗ Branch 24 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 4 times.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
4 EXPECT_DOUBLE_EQ(
16 4 clone->boundingCircle().area(), original.boundingCircle().area());
17
6/18
✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✓ Branch 9 taken 4 times.
✗ Branch 10 not taken.
✓ Branch 14 taken 4 times.
✗ Branch 15 not taken.
✓ Branch 20 taken 4 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 4 times.
✗ Branch 24 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 4 times.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
4 EXPECT_DOUBLE_EQ(
18 4 clone->boundingBox().area(), original.boundingBox().area());
19 8 }
20
21 // NOLINTBEGIN(*-avoid-magic-numbers)
22
23 4 void TestScale(const Shape& shape) {
24
3/6
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
✓ Branch 16 taken 4 times.
✗ Branch 17 not taken.
4 auto area1 = shape.clone()->scaleTo(1.0).area();
25
3/6
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
✓ Branch 16 taken 4 times.
✗ Branch 17 not taken.
4 auto area2 = shape.clone()->scaleTo(2.0).area();
26
4/8
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
✓ Branch 16 taken 4 times.
✗ Branch 17 not taken.
✓ Branch 22 taken 4 times.
✗ Branch 23 not taken.
4 auto area3 = shape.clone()->scaleTo(3.0).scaleBy(4.0).area();
27
2/10
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
4 EXPECT_DOUBLE_EQ(4.0 * area1, area2);
28
2/10
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
4 EXPECT_DOUBLE_EQ(36.0 * area2, area3);
29 4 }
30
31 // NOLINTEND(*-avoid-magic-numbers)
32
33 } // anonymous namespace
34
35 8 TEST(Shape, clone) {
36
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
2 TestClone(Rectangle(3, 4));
37
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
2 TestClone(Square(2));
38
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
2 TestClone(Ellipse(3, 4));
39
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
2 TestClone(Circle(2));
40 2 }
41
42 8 TEST(Shape, scale) {
43
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
2 TestScale(Rectangle(3, 4));
44
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
2 TestScale(Square(2));
45
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
2 TestScale(Ellipse(3, 4));
46
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
2 TestScale(Circle(2));
47 2 }
48