TerrainGen coverage


terraingen/
Coverage:
low: ≥ 0%
medium: ≥ 75.0%
high: ≥ 90.0%
Lines:
44 / 44
100.0%
Branches:
31 / 32
96.9%
Functions:
5 / 5
100.0%

layers/craters/shaping/morphometry.cpp
Line Branch Exec Source
1 #include "terraingen/layers/craters/shaping/morphometry.h"
2
3 #include "terraingen/util/checks.h"
4
5 #include <cmath>
6 #include <stdexcept>
7
8 namespace terraingen {
9
10 6002698 double LunarFreshCraterDepthRatio(double diameter) {
11
2/2
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 6002694 times.
6002698 if (!IsPositive(diameter)) {
12
1/1
✓ Branch 2 taken 4 times.
4 throw std::domain_error("Diameter must be positive and finite");
13 }
14
2/2
✓ Branch 0 taken 116266 times.
✓ Branch 1 taken 5886428 times.
6002694 if (diameter <= 10.0) {
15 116266 return 0.10;
16 }
17
2/2
✓ Branch 0 taken 4818461 times.
✓ Branch 1 taken 1067967 times.
5886428 if (diameter < 40.0) {
18 4818461 return 0.11;
19 }
20
2/2
✓ Branch 0 taken 835428 times.
✓ Branch 1 taken 232539 times.
1067967 if (diameter < 100.0) {
21 835428 return 0.13;
22 }
23
2/2
✓ Branch 0 taken 203942 times.
✓ Branch 1 taken 28597 times.
232539 if (diameter < 200.0) {
24 203942 return 0.15;
25 }
26
2/2
✓ Branch 0 taken 26544 times.
✓ Branch 1 taken 2053 times.
28597 if (diameter < 400.0) {
27 26544 return 0.17;
28 }
29 2053 return 0.21;
30 }
31
32 6002875 CraterMorphometry LunarFreshCraterMorphometry(double diameter) {
33
5/6
✓ Branch 0 taken 188 times.
✓ Branch 1 taken 6002687 times.
✓ Branch 3 taken 188 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 188 times.
✓ Branch 6 taken 6002687 times.
6002875 if (diameter >= kLunarComplexCraterDiameter && std::isfinite(diameter)) {
34 188 const KilometrePowerLaw depth{1.044, 0.301};
35 188 const KilometrePowerLaw rim{0.236, 0.399};
36
2/2
✓ Branch 1 taken 188 times.
✓ Branch 4 taken 188 times.
188 return {depth.At(diameter) / diameter, rim.At(diameter) / diameter};
37 }
38 6002687 return {LunarFreshCraterDepthRatio(diameter), kLunarFreshRimHeightRatio};
39 }
40
41 17 ComplexCraterShape LunarComplexCraterShape() {
42 17 ComplexCraterShape shape;
43 17 shape.transitionDiameter = kLunarComplexCraterDiameter;
44 17 shape.floorDiameter = {0.187, 1.249};
45 17 shape.peakHeight = {0.589e-3, 1.969};
46 17 shape.peakVolume = {0.987e-7, 5.078};
47 17 shape.peakFitMaxDiameter = 51000.0;
48 17 return shape;
49 }
50
51 19186 CraterMorphometry MarsFreshCraterMorphometry(double diameter) {
52
2/2
✓ Branch 1 taken 1 time.
✓ Branch 2 taken 19185 times.
19186 if (!IsPositive(diameter)) {
53
1/1
✓ Branch 2 taken 1 time.
1 throw std::domain_error("Diameter must be positive and finite");
54 }
55
2/2
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 19179 times.
19185 if (diameter >= kMarsComplexCraterDiameter) {
56 const KilometrePowerLaw rim =
57
2/2
✓ Branch 0 taken 1 time.
✓ Branch 1 taken 5 times.
6 diameter > 100000.0 ? KilometrePowerLaw{0.12, 0.35} : KilometrePowerLaw{0.02, 0.84};
58
2/2
✓ Branch 1 taken 6 times.
✓ Branch 4 taken 6 times.
6 return {KilometrePowerLaw{0.36, 0.49}.At(diameter) / diameter, rim.At(diameter) / diameter};
59 }
60
1/1
✓ Branch 1 taken 19179 times.
19179 return {std::fmin(0.23, KilometrePowerLaw{0.21, 0.81}.At(diameter) / diameter),
61
1/1
✓ Branch 1 taken 19179 times.
19179 std::fmin(0.03, KilometrePowerLaw{0.04, 0.31}.At(diameter) / diameter)};
62 }
63
64 5 ComplexCraterShape MarsComplexCraterShape() {
65 5 ComplexCraterShape shape;
66 5 shape.transitionDiameter = kMarsComplexCraterDiameter;
67 5 shape.floorDiameter = {0.187, 1.249};
68 5 shape.peakHeight = {0.04, 0.51};
69 5 shape.peakDiameter = KilometrePowerLaw{0.25, 1.05};
70 5 shape.peakFitMaxDiameter = 100000.0;
71 5 return shape;
72 }
73
74 } // namespace terraingen
75