TerrainGen coverage


terraingen/
Coverage:
low: ≥ 0%
medium: ≥ 75.0%
high: ≥ 90.0%
Lines:
672 / 672
100.0%
Branches:
378 / 378
100.0%
Functions:
48 / 48
100.0%

config/fields/craters.h
Line Branch Exec Source
1 /// @file
2 /// @brief The JSON fields of crater and secondary crater layers and rim smoothing.
3 #pragma once
4
5 #include "terraingen/config/config.h"
6 #include "terraingen/config/fields/common.h"
7 #include "terraingen/config/fields/maps.h"
8
9 #include <limits>
10 #include <string_view>
11
12 namespace terraingen::config {
13
14 81 template <typename IO> void Fields(IO& io, Crater& crater) {
15
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::Crater&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::Crater&):
✓ Branch 4 taken 34 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::Crater&):
✓ Branch 4 taken 38 times.
81 io("x", crater.x,
16 "Centre along x in the surface's coordinates; the longitude in degrees on a sphere.");
17
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::Crater&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::Crater&):
✓ Branch 4 taken 34 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::Crater&):
✓ Branch 4 taken 38 times.
81 io("y", crater.y,
18 "Centre along y in the surface's coordinates; the latitude in degrees on a sphere.");
19
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::Crater&):
✓ Branch 5 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::Crater&):
✓ Branch 5 taken 34 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::Crater&):
✓ Branch 5 taken 38 times.
81 io("diameter", crater.diameter, "Rim-to-rim diameter, in metres.", "m", Above(0.0));
20
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::Crater&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::Crater&):
✓ Branch 4 taken 34 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::Crater&):
✓ Branch 4 taken 38 times.
81 io("age_gyr", crater.ageGyr,
21 "Age in Gyr; older craters are more degraded under a degradation model and are applied "
22 "earlier in oldest-first order.",
23 81 "Gyr", AtLeast(0.0));
24
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::Crater&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::Crater&):
✓ Branch 4 taken 34 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::Crater&):
✓ Branch 4 taken 38 times.
81 io("id", crater.id,
25 "Stable ID that seeds the crater's outline; 0 derives one from its position and diameter.");
26 81 }
27
28 150 template <typename IO> void Fields(IO& io, CraterSpacing& spacing) {
29
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterSpacing&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterSpacing&):
✓ Branch 4 taken 63 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterSpacing&):
✓ Branch 4 taken 78 times.
150 io("diameter_ratio", spacing.diameterRatio,
30 "Largest ratio of two craters' diameters, at least 1, for them to count as similar in size "
31 "and be kept apart.",
32 150 "", AtLeast(1.0));
33
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterSpacing&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterSpacing&):
✓ Branch 4 taken 63 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterSpacing&):
✓ Branch 4 taken 78 times.
150 io("separation", spacing.separation,
34 "Least distance between the centres of similar-size craters, in larger diameters; 0 "
35 "disables spacing.",
36 150 "", AtLeast(0.0));
37 150 }
38
39 659 template <typename IO> void Fields(IO& io, ResolutionFade& fade) {
40
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ResolutionFade&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ResolutionFade&):
✓ Branch 4 taken 159 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ResolutionFade&):
✓ Branch 4 taken 491 times.
659 io("start_samples", fade.startSamples,
41 "Samples across a feature's diameter up to which it is left out entirely.", "",
42 659 AtLeast(0.0));
43
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ResolutionFade&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ResolutionFade&):
✓ Branch 4 taken 159 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ResolutionFade&):
✓ Branch 4 taken 491 times.
659 io("end_samples", fade.endSamples,
44 "Samples across a feature's diameter from which it is applied in full; it fades in between "
45 "the two counts.",
46 659 "", Above(0.0));
47
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ResolutionFade&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ResolutionFade&):
✓ Branch 4 taken 159 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ResolutionFade&):
✓ Branch 4 taken 491 times.
659 io("shape", fade.shape, "Curve of the fade between the start and end sample counts.");
48 659 }
49
50 159 template <typename IO> void Fields(IO& io, CraterBlend& blend) {
51
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterBlend&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterBlend&):
✓ Branch 4 taken 63 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterBlend&):
✓ Branch 4 taken 87 times.
159 io("start_radii", blend.startRadii,
52 "Distance from the centre, in crater radii, up to which the interior is fully replaced.", "",
53 159 AtLeast(0.0));
54
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterBlend&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterBlend&):
✓ Branch 4 taken 63 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterBlend&):
✓ Branch 4 taken 87 times.
159 io("end_radii", blend.endRadii,
55 "Distance from the centre, in crater radii, from which the surrounding terrain is draped "
56 "unchanged.",
57 159 "", Above(0.0));
58
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterBlend&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterBlend&):
✓ Branch 4 taken 63 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterBlend&):
✓ Branch 4 taken 87 times.
159 io("shape", blend.shape, "Curve of the transition from the replaced interior to the exterior.");
59 159 }
60
61 1834 template <typename IO> void Fields(IO& io, ValueDistribution& distribution) {
62
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ValueDistribution&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ValueDistribution&):
✓ Branch 4 taken 414 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ValueDistribution&):
✓ Branch 4 taken 1411 times.
1834 io("kind", distribution.kind, "Kind of distribution the value is drawn from.");
63
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ValueDistribution&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ValueDistribution&):
✓ Branch 4 taken 414 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ValueDistribution&):
✓ Branch 4 taken 1411 times.
1834 io("a", distribution.a,
64 "The constant value, the uniform's lower bound, the normal's mean or the log-normal's "
65 "median.");
66
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ValueDistribution&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ValueDistribution&):
✓ Branch 4 taken 414 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ValueDistribution&):
✓ Branch 4 taken 1411 times.
1834 io("b", distribution.b,
67 "The uniform's upper bound, or the standard deviation (of the natural logarithm for a "
68 "log-normal); unused for a constant.");
69
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ValueDistribution&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ValueDistribution&):
✓ Branch 4 taken 414 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ValueDistribution&):
✓ Branch 4 taken 1411 times.
1834 OptionalBound(io, "min", distribution.min,
70 "Lower bound drawn values are clamped to; unset leaves them unbounded below.", {},
71 1834 -std::numeric_limits<double>::infinity());
72
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ValueDistribution&):
✓ Branch 5 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ValueDistribution&):
✓ Branch 5 taken 414 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ValueDistribution&):
✓ Branch 5 taken 1411 times.
1834 OptionalBound(io, "max", distribution.max,
73 "Upper bound drawn values are clamped to; unset leaves them unbounded above, "
74 "which normal and log-normal kinds do not allow.");
75 1834 }
76
77 163 template <typename IO> void Fields(IO& io, CraterIrregularity& irregularity) {
78
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 67 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 87 times.
163 io("enabled", irregularity.enabled,
79 "Gives eligible craters irregular, non-circular outlines; off keeps every crater round.");
80
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 67 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 87 times.
163 io("seed", irregularity.seed,
81 "Seed the outlines are drawn with, along with each crater's ID; changing it reshapes every "
82 "irregular crater.");
83 163 CraterSelection& selection = irregularity.selection;
84
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 67 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 87 times.
163 io("min_diameter", selection.minDiameter,
85 163 "Smallest diameter, in metres, of craters made irregular.", "m", AtLeast(0.0));
86
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterIrregularity&):
✓ Branch 5 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterIrregularity&):
✓ Branch 5 taken 67 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterIrregularity&):
✓ Branch 5 taken 87 times.
163 OptionalBound(io, "max_diameter", selection.maxDiameter,
87 "Largest diameter, in metres, of craters made irregular; unset has no upper "
88 "limit.",
89 163 "m", std::numeric_limits<double>::infinity(), AtLeast(0.0));
90
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 67 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 87 times.
163 io("min_age_gyr", selection.minAgeGyr, "Youngest age, in Gyr, of craters made irregular.",
91 163 "Gyr", AtLeast(0.0));
92
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterIrregularity&):
✓ Branch 5 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterIrregularity&):
✓ Branch 5 taken 67 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterIrregularity&):
✓ Branch 5 taken 87 times.
163 OptionalBound(io, "max_age_gyr", selection.maxAgeGyr,
93 "Oldest age, in Gyr, of craters made irregular; unset has no upper limit.", "Gyr",
94 163 std::numeric_limits<double>::infinity(), AtLeast(0.0));
95
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 67 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 87 times.
163 io("manual", selection.manual,
96 "Makes manual craters irregular too; otherwise only generated craters are.");
97
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 67 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 87 times.
163 io("rough_share", irregularity.roughShare,
98 163 "Share of eligible craters, from 0 to 1, given rough, wavy rims.", "", UnitInterval());
99
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 67 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 87 times.
163 io("model", irregularity.model, "How rough rims are drawn.");
100
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 67 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 87 times.
163 io("scatter", irregularity.scatter,
101 "With du_2024, scatters each crater's spectrum by the fits' measured misfits and noise.");
102
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 67 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 87 times.
163 io("max_deviation", irregularity.maxDeviation,
103 "With du_2024, the largest deviation of a rim from a circle, in radii; outlines beyond it "
104 "are scaled down to it.",
105 163 "", AboveUpTo(0.0, 0.5));
106
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 67 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 87 times.
163 io("roughness", irregularity.roughness,
107 "With power_law, the RMS deviation of a rough rim from a circle, in crater radii, drawn per "
108 "crater.");
109
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 67 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 87 times.
163 io("spectral_slope", irregularity.spectralSlope,
110 "With power_law, the exponent s of the rim harmonics' amplitudes, falling as k^-s, drawn "
111 "per crater; higher values leave less fine waviness.");
112
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 67 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 87 times.
163 io("min_harmonic", irregularity.minHarmonic,
113 "With power_law, the lowest harmonic of the rim's waviness, from 1 to 64.", "",
114 163 Between(1.0, 64.0));
115
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 67 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 87 times.
163 io("max_harmonic", irregularity.maxHarmonic,
116 "With power_law, the highest harmonic of the rim's waviness, at most 64; higher harmonics "
117 "add finer wiggles.",
118 163 "", Between(1.0, 64.0));
119
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 67 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 87 times.
163 io("elongated_share", irregularity.elongatedShare,
120 "Share of eligible craters, from 0 to 1, made elliptical, keeping their area.", "",
121 163 UnitInterval());
122
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 67 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 87 times.
163 io("ellipticity", irregularity.ellipticity,
123 "Long over short rim-to-rim diameter of elliptical craters, drawn per crater; at least 1.");
124
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 67 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 87 times.
163 io("heading", irregularity.heading,
125 "Heading of elliptical craters' long axes, in radians counter-clockwise from +x; unset "
126 "gives random headings.",
127 "rad");
128
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 67 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 87 times.
163 io("heading_spread", irregularity.headingSpread,
129 "Largest random turn of a long axis either way from the heading, in radians.", "rad",
130 163 AtLeast(0.0));
131
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 67 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 87 times.
163 io("marks_share", irregularity.marksShare,
132 "Share of eligible craters, from 0 to 1, given radial marks: ridges and grooves down the "
133 "wall, strongest where it is steepest.",
134 163 "", UnitInterval());
135
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 67 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 87 times.
163 io("marks_amplitude", irregularity.marksAmplitude,
136 "Largest radial shift of the wall by the marks, in crater radii, drawn per crater; below "
137 "marks_fade_radii / 3.75.");
138
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 67 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 87 times.
163 io("marks_knots", irregularity.marksKnots,
139 "Random shifts around the crater the marks pass through, from 3 to 1024; more knots give "
140 "narrower marks.",
141 163 "", Between(3.0, 1024.0));
142
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 67 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 87 times.
163 io("marks_inner_radii", irregularity.marksInnerRadii,
143 "Distance from the centre, in crater radii, where the marks reach full strength.", "",
144 163 Inside(0.0, 1.0));
145
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 67 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 87 times.
163 io("marks_outer_radii", irregularity.marksOuterRadii,
146 "Distance from the centre, in crater radii, where the marks start to fade; at most 1 minus "
147 "marks_fade_radii.",
148 163 "", Inside(0.0, 1.0));
149
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 67 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterIrregularity&):
✓ Branch 4 taken 87 times.
163 io("marks_fade_radii", irregularity.marksFadeRadii,
150 163 "Width, in crater radii, over which the marks fade in and out.", "", AboveUpTo(0.0, 0.5));
151 163 }
152
153 161 template <typename IO> void Fields(IO& io, RimSmoothing& smoothing) {
154
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::RimSmoothing&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::RimSmoothing&):
✓ Branch 4 taken 65 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::RimSmoothing&):
✓ Branch 4 taken 87 times.
161 io("sigma_radii", smoothing.sigmaRadii,
155 "Deviation of the Gaussian the profile is smoothed with across distance, in crater radii; "
156 "larger values round rims more, and 0 leaves them sharp.",
157 161 "", AtLeast(0.0));
158
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::RimSmoothing&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::RimSmoothing&):
✓ Branch 4 taken 65 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::RimSmoothing&):
✓ Branch 4 taken 87 times.
161 io("inner_radii", smoothing.innerRadii,
159 "Inner edge of the smoothed band around the rim, in crater radii; below 1.", "",
160 161 FromBelow(0.0, 1.0));
161
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::RimSmoothing&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::RimSmoothing&):
✓ Branch 4 taken 65 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::RimSmoothing&):
✓ Branch 4 taken 87 times.
161 io("outer_radii", smoothing.outerRadii,
162 161 "Outer edge of the smoothed band around the rim, in crater radii; above 1.", "", Above(1.0));
163
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::RimSmoothing&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::RimSmoothing&):
✓ Branch 4 taken 65 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::RimSmoothing&):
✓ Branch 4 taken 87 times.
161 io("shape", smoothing.shape,
164 "How the smoothing fades from full at the rim to none at the band's edges.");
165
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::RimSmoothing&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::RimSmoothing&):
✓ Branch 4 taken 65 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::RimSmoothing&):
✓ Branch 4 taken 87 times.
161 io("strength", smoothing.strength,
166 "Share of the smoothed height used at the rim, from 0 to 1; lower values keep more of the "
167 "sharp crest.",
168 161 "", UnitInterval());
169 161 }
170
171 160 template <typename IO> void Fields(IO& io, CraterNoise& noise) {
172
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterNoise&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterNoise&):
✓ Branch 4 taken 64 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterNoise&):
✓ Branch 4 taken 87 times.
160 io("amplitude", noise.amplitude,
173 "Amplitude of the noise over the whole footprint, as a share of the crater diameter; it "
174 "fades out beyond the rim to the profile's reach, and 0 adds none.",
175 160 "", AtLeast(0.0));
176
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterNoise&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterNoise&):
✓ Branch 4 taken 64 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterNoise&):
✓ Branch 4 taken 87 times.
160 io("wavelength_radii", noise.wavelengthRadii,
177 160 "Wavelength of the footprint noise's first octave, in crater radii.", "", Above(0.0));
178
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterNoise&):
✓ Branch 5 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterNoise&):
✓ Branch 5 taken 64 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterNoise&):
✓ Branch 5 taken 87 times.
160 io("octaves", noise.octaves, "Octaves of both noises, from 1 to 12.", "", Between(1.0, 12.0));
179
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterNoise&):
✓ Branch 5 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterNoise&):
✓ Branch 5 taken 64 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterNoise&):
✓ Branch 5 taken 87 times.
160 io("gain", noise.gain, "Weight ratio between successive octaves; positive.", "", Above(0.0));
180
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterNoise&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterNoise&):
✓ Branch 4 taken 64 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterNoise&):
✓ Branch 4 taken 87 times.
160 io("rim_amplitude", noise.rimAmplitude,
181 "Amplitude of the extra noise in the band around the rim, as a share of the crater "
182 "diameter; 0 adds none.",
183 160 "", AtLeast(0.0));
184
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterNoise&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterNoise&):
✓ Branch 4 taken 64 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterNoise&):
✓ Branch 4 taken 87 times.
160 io("rim_wavelength_radii", noise.rimWavelengthRadii,
185 160 "Wavelength of the rim noise's first octave, in crater radii.", "", Above(0.0));
186
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterNoise&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterNoise&):
✓ Branch 4 taken 64 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterNoise&):
✓ Branch 4 taken 87 times.
160 io("rim_inner_radii", noise.rimInnerRadii,
187 160 "Inner edge of the rim noise band, in crater radii; below 1.", "", FromBelow(0.0, 1.0));
188
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterNoise&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterNoise&):
✓ Branch 4 taken 64 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterNoise&):
✓ Branch 4 taken 87 times.
160 io("rim_outer_radii", noise.rimOuterRadii,
189 160 "Outer edge of the rim noise band, in crater radii; above 1.", "", Above(1.0));
190
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterNoise&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterNoise&):
✓ Branch 4 taken 64 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterNoise&):
✓ Branch 4 taken 87 times.
160 io("seed", noise.seed, "Varies the noise of every crater.");
191 160 }
192
193 160 template <typename IO> void Fields(IO& io, CraterTexture& texture) {
194
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterTexture&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterTexture&):
✓ Branch 4 taken 64 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterTexture&):
✓ Branch 4 taken 87 times.
160 io("wall_streaks", texture.wallStreaks,
195 "Amplitude of the radial gullies down a fresh crater's inner wall, as a share of its "
196 "diameter; 0 adds none.",
197 160 "", AtLeast(0.0));
198
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterTexture&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterTexture&):
✓ Branch 4 taken 64 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterTexture&):
✓ Branch 4 taken 87 times.
160 io("wall_streak_width_radii", texture.wallStreakWidthRadii,
199 160 "Width of the gullies across the wall, in crater radii.", "", Above(0.0));
200
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterTexture&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterTexture&):
✓ Branch 4 taken 64 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterTexture&):
✓ Branch 4 taken 87 times.
160 io("ejecta", texture.ejecta,
201 "Amplitude of the hummocky, radially lineated ejecta around a fresh crater, as a share of "
202 "the ejecta's thickness (McGetchin et al. 1973); 0 adds none.",
203 160 "", AtLeast(0.0));
204
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterTexture&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterTexture&):
✓ Branch 4 taken 64 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterTexture&):
✓ Branch 4 taken 87 times.
160 io("ejecta_lineation_radii", texture.ejectaLineationRadii,
205 160 "Width of the ejecta's lineations across, in crater radii at the rim.", "", Above(0.0));
206
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterTexture&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterTexture&):
✓ Branch 4 taken 64 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterTexture&):
✓ Branch 4 taken 87 times.
160 io("mantling", texture.mantling,
207 "Share of older relief buried under the ejecta at the rim, falling with their thickness, "
208 "from 0 to 1; needs a datum.",
209 160 "", UnitInterval());
210
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterTexture&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterTexture&):
✓ Branch 4 taken 64 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterTexture&):
✓ Branch 4 taken 87 times.
160 io("ejecta_reach_radii", texture.ejectaReachRadii,
211 160 "How far ejecta texture and burial reach, in crater radii; above 1.", "", Above(1.0));
212
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterTexture&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterTexture&):
✓ Branch 4 taken 64 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterTexture&):
✓ Branch 4 taken 87 times.
160 io("min_freshness", texture.minFreshness,
213 "Freshness (depth over fresh depth) at or below which gullies and ejecta texture are worn "
214 "away, from 0 to below 1.",
215 160 "", FromBelow(0.0, 1.0));
216
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterTexture&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterTexture&):
✓ Branch 4 taken 64 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterTexture&):
✓ Branch 4 taken 87 times.
160 io("seed", texture.seed, "Varies the texture of every crater.");
217 160 }
218
219 159 template <typename IO> void Fields(IO& io, CraterSlopeResponse& slope) {
220
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterSlopeResponse&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterSlopeResponse&):
✓ Branch 4 taken 63 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterSlopeResponse&):
✓ Branch 4 taken 87 times.
159 io("enabled", slope.enabled,
221 "Shapes craters asymmetrically along the slope of the ground beneath the layer; off keeps "
222 "them the same on any slope.");
223
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterSlopeResponse&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterSlopeResponse&):
✓ Branch 4 taken 63 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterSlopeResponse&):
✓ Branch 4 taken 87 times.
159 io("seed", slope.seed, "Varies how far each crater's floor is offset.");
224
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterSlopeResponse&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterSlopeResponse&):
✓ Branch 4 taken 63 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterSlopeResponse&):
✓ Branch 4 taken 87 times.
159 io("floor_offset", slope.floorOffset,
225 "How far the deepest point lies downslope of the centre, in diameters, drawn per crater; "
226 "below 0.23.");
227
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterSlopeResponse&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterSlopeResponse&):
✓ Branch 4 taken 63 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterSlopeResponse&):
✓ Branch 4 taken 87 times.
159 io("upslope_rim", slope.upslopeRim,
228 "Share of the raised rim and ejecta kept straight upslope, from 0 to 1; the rest returns "
229 "toward the sides.",
230 159 "", UnitInterval());
231
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterSlopeResponse&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterSlopeResponse&):
✓ Branch 4 taken 63 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterSlopeResponse&):
✓ Branch 4 taken 87 times.
159 io("full_slope", slope.fullSlope,
232 "Slope at which the asymmetry is complete, in radians; it rises from none on level "
233 "ground.",
234 159 "rad", Above(0.0));
235
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterSlopeResponse&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterSlopeResponse&):
✓ Branch 4 taken 63 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterSlopeResponse&):
✓ Branch 4 taken 87 times.
159 io("critical_gradient", slope.criticalGradient,
236 "Critical gradient Sc, rise over run, toward which downslope transport grows without bound: "
237 "a crater on a regional gradient S wears 1 / (1 - (S / Sc)^2) times as fast (Roering et al. "
238 "1999). Unset wears craters alike on any slope; no lunar value is published.",
239 159 "", Above(0.0));
240
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterSlopeResponse&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterSlopeResponse&):
✓ Branch 4 taken 63 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterSlopeResponse&):
✓ Branch 4 taken 87 times.
159 io("max_wear_rate", slope.maxWearRate,
241 "Fastest a slope makes craters wear, over level ground: a numerical cap as S nears Sc.", "",
242 159 AtLeast(1.0));
243 159 }
244
245 162 template <typename IO> void Fields(IO& io, CraterApplyOptions& apply) {
246
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterApplyOptions&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterApplyOptions&):
✓ Branch 4 taken 75 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterApplyOptions&):
✓ Branch 4 taken 78 times.
162 io("order", apply.order,
247 "Order in which overlapping craters are applied; later craters overprint earlier ones.");
248
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterApplyOptions&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterApplyOptions&):
✓ Branch 4 taken 75 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterApplyOptions&):
✓ Branch 4 taken 78 times.
162 io("fade", apply.fade, "How craters too small to resolve at the sample spacing fade out.");
249
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterApplyOptions&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterApplyOptions&):
✓ Branch 4 taken 75 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterApplyOptions&):
✓ Branch 4 taken 78 times.
162 io("datum", apply.datum,
250 "Reference surface each crater's interior is cut relative to, fitted to the ground beneath "
251 "it; none adds craters onto the terrain everywhere.");
252
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterApplyOptions&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterApplyOptions&):
✓ Branch 4 taken 75 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterApplyOptions&):
✓ Branch 4 taken 78 times.
162 io("datum_fit_radii", apply.datumFitRadii,
253 162 "Radius of the footprint the datum is fitted over, in crater radii.", "", Above(0.0));
254
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterApplyOptions&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterApplyOptions&):
✓ Branch 4 taken 75 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterApplyOptions&):
✓ Branch 4 taken 78 times.
162 io("interior_replacement", apply.interiorReplacement,
255 "Share of the interior replaced by datum plus profile, from 0 to 1: 1 erases older relief "
256 "inside the crater, 0 keeps it.",
257 162 "", UnitInterval());
258
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterApplyOptions&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterApplyOptions&):
✓ Branch 4 taken 75 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterApplyOptions&):
✓ Branch 4 taken 78 times.
162 io("blend", apply.blend,
259 "Where and how a crater's replaced interior blends into the surrounding terrain.");
260
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterApplyOptions&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterApplyOptions&):
✓ Branch 4 taken 75 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterApplyOptions&):
✓ Branch 4 taken 78 times.
162 io("irregularity", apply.irregularity,
261 "Irregular, non-circular crater outlines: which craters have them and how their shapes "
262 "are drawn.");
263
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterApplyOptions&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterApplyOptions&):
✓ Branch 4 taken 74 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterApplyOptions&):
✓ Branch 4 taken 78 times.
162 io("rim_smoothing", apply.rimSmoothing,
264 "Rounded rims: each crater's profile smoothed across distance near its rim; off unless "
265 "sigma_radii is set.");
266
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterApplyOptions&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterApplyOptions&):
✓ Branch 4 taken 74 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterApplyOptions&):
✓ Branch 4 taken 78 times.
161 io("noise", apply.noise,
267 "Fractal noise over each crater's footprint and around its rim, keyed to the crater; off "
268 "unless an amplitude is set.");
269
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterApplyOptions&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterApplyOptions&):
✓ Branch 4 taken 74 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterApplyOptions&):
✓ Branch 4 taken 78 times.
161 io("texture", apply.texture,
270 "Gullies down fresh walls, textured ejecta and older relief buried under the ejecta; off "
271 "unless an amplitude or mantling is set.");
272
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterApplyOptions&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterApplyOptions&):
✓ Branch 4 taken 74 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterApplyOptions&):
✓ Branch 4 taken 78 times.
161 io("slope", apply.slope,
273 "Craters on sloping ground with floors offset downslope and rims lowered upslope; needs "
274 "the plane datum.");
275 161 }
276
277 template <> struct SpecName<CraterLayerSpec> {
278 static constexpr std::string_view kName = "craters";
279 static constexpr std::string_view kDescription =
280 "Impact craters generated from a density and age model, or placed by hand, and cut into "
281 "the terrain.";
282 };
283 246 template <typename IO> void Fields(IO& io, CraterLayerSpec& craters) {
284
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 167 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 69 times.
246 io("morphometry", craters.morphometry,
285 "Published fits of fresh crater depth, rim height and complex crater shape the craters "
286 "are shaped with.");
287
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 167 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 69 times.
245 io("generate", craters.generate,
288 "Generates craters from the density; off places only the manual craters.");
289
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 167 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 69 times.
245 io("seed", craters.seed,
290 "Seed the craters are generated with; changing it gives a different crater field of the "
291 "same statistics.");
292
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 159 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 69 times.
245 io("density", craters.density,
293 "Size-frequency distribution of the generated craters: how many of each diameter per unit "
294 "area.");
295
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 156 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 69 times.
237 io("ages", craters.ages,
296 "How generated craters are given ages, which the degradation model wears them down by.");
297
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 156 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 69 times.
234 io("min_diameter", craters.minDiameter,
298 "Smallest crater generated, in metres; lower values add many more small craters.", "m",
299 234 Above(0.0));
300
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 156 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 69 times.
234 io("max_diameter", craters.maxDiameter,
301 234 "Largest crater generated, in metres; above the smallest.", "m", Above(0.0));
302
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 156 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 69 times.
234 io("spacing", craters.spacing,
303 "Keeps craters of similar size apart by removing conflicting ones, which lowers the density "
304 "below the model's.");
305
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 156 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 69 times.
234 io("max_craters", craters.maxCraters,
306 "Most generated craters kept, the largest first; 0 keeps all. Manual craters are always "
307 "kept, and a cap means tiles no longer match the whole grid.");
308
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 155 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 69 times.
234 io("manual", craters.manual,
309 "Craters placed by hand in the surface's coordinates, added to any generated ones.");
310
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 154 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 69 times.
233 io("profile", craters.profile,
311 "Shape of a fresh crater's cross-section, scaled to each crater's diameter.");
312
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 153 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 69 times.
232 io("degradation", craters.degradation,
313 "How craters wear down from their fresh shape with age.");
314
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 152 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 69 times.
231 io("apply", craters.apply,
315 "How craters are cut into the terrain: their order, datum, blending, fading and irregular "
316 "outlines.");
317
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 152 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 69 times.
230 io("density_map", craters.densityMap,
318 "Map that sets the crater density point by point, scaling the density's size distribution "
319 "to what it measures; unset keeps the density the same everywhere.");
320
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 152 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CraterLayerSpec&):
✓ Branch 4 taken 69 times.
230 io("completeness", craters.completeness,
321 "Where the manual craters are a complete catalog: the diameter in metres from which they "
322 "stand in for generated craters, infinite or no value where there is no catalog. Unset "
323 "keeps every generated crater.");
324 230 }
325
326 62 template <typename IO> void Fields(IO& io, RayLayout& layout) {
327
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::RayLayout&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::RayLayout&):
✓ Branch 4 taken 6 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::RayLayout&):
✓ Branch 4 taken 47 times.
62 io("seed", layout.seed,
328 "Seed of the rays' directions; layers with the same layout share the same rays.");
329
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::RayLayout&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::RayLayout&):
✓ Branch 4 taken 6 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::RayLayout&):
✓ Branch 4 taken 47 times.
62 io("count", layout.count, "Number of rays of a crater, drawn per crater and rounded; 0 to 64.");
330
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::RayLayout&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::RayLayout&):
✓ Branch 4 taken 6 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::RayLayout&):
✓ Branch 4 taken 47 times.
62 io("width_degrees", layout.widthDegrees,
331 "Angle in degrees a ray spans 2 radii from the centre, drawn per ray, within (0, 180).");
332 62 }
333
334 41 template <typename IO> void Fields(IO& io, SecondaryRays& rays) {
335
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SecondaryRays&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SecondaryRays&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SecondaryRays&):
✓ Branch 4 taken 28 times.
41 io("enabled", rays.enabled,
336 "Gathers secondaries into their primary's rays and clumps them along each ray, as radial "
337 "chains and clusters; off spreads them evenly.");
338
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SecondaryRays&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SecondaryRays&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SecondaryRays&):
✓ Branch 4 taken 28 times.
41 io("layout", rays.layout,
339 "The rays; give a crater albedo layer's rays the same layout for bright rays over the "
340 "secondaries.");
341
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SecondaryRays&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SecondaryRays&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SecondaryRays&):
✓ Branch 4 taken 28 times.
41 io("share", rays.share,
342 "Share of secondaries in rays, from 0 to 1; the rest stay spread evenly. Illustrative.", "",
343 41 UnitInterval());
344
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SecondaryRays&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SecondaryRays&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SecondaryRays&):
✓ Branch 4 taken 28 times.
41 io("min_half_angle_degrees", rays.minHalfAngleDegrees,
345 "Narrowest half width of a ray, in degrees from 0 to 90 excluded, so rays widen with range "
346 "beyond their width near the primary. Illustrative.",
347 41 "deg", Inside(0.0, 90.0));
348
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SecondaryRays&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SecondaryRays&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SecondaryRays&):
✓ Branch 4 taken 28 times.
41 io("clustering", rays.clustering,
349 "How strongly secondaries clump along a ray, from 0 for evenly along it to 1 for only in "
350 "clumps. Illustrative.",
351 41 "", UnitInterval());
352
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SecondaryRays&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SecondaryRays&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SecondaryRays&):
✓ Branch 4 taken 28 times.
41 io("cluster_spacing", rays.clusterSpacing,
353 "Typical spacing of clumps along a ray, in natural log of range; positive, smaller values "
354 "give shorter, more frequent clumps. Illustrative.",
355 41 "", Above(0.0));
356 41 }
357
358 41 template <typename IO> void Fields(IO& io, SecondaryShapes& shapes) {
359
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SecondaryShapes&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SecondaryShapes&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SecondaryShapes&):
✓ Branch 4 taken 28 times.
41 io("elongated_share", shapes.elongatedShare,
360 "Share of secondaries, from 0 to 1, stretched along the line back to their primary; 0 keeps "
361 "them round.",
362 41 "", UnitInterval());
363
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SecondaryShapes&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SecondaryShapes&):
✓ Branch 4 taken 4 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SecondaryShapes&):
✓ Branch 4 taken 28 times.
41 io("ellipticity", shapes.ellipticity,
364 "Long over short axis of an elongated secondary near the primary, drawn per secondary; at "
365 "least 1, falling to 1 at the outer range.");
366 41 }
367
368 template <> struct SpecName<SecondaryLayerSpec> {
369 static constexpr std::string_view kName = "secondaries";
370 static constexpr std::string_view kDescription =
371 "Secondary craters around the craters of the last crater layer before this one, after "
372 "Singer et al. (2020).";
373 };
374 35 template <typename IO> void Fields(IO& io, SecondaryLayerSpec& spec) {
375 35 SecondaryCraterOptions& o = spec.secondaries;
376
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SecondaryLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SecondaryLayerSpec&):
✓ Branch 4 taken 7 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SecondaryLayerSpec&):
✓ Branch 4 taken 19 times.
35 io("seed", o.seed,
377 "Seed the secondaries are drawn with; changing it gives a different field of the same "
378 "statistics.");
379
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SecondaryLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SecondaryLayerSpec&):
✓ Branch 4 taken 6 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SecondaryLayerSpec&):
✓ Branch 4 taken 19 times.
35 io("onset_count", o.onsetCount,
380 "Secondaries at least count_fraction primary diameters across, in an area the size of the "
381 "primary at the onset range. Required: the sources give sizes, not numbers.",
382 36 "", Above(0.0));
383
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SecondaryLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SecondaryLayerSpec&):
✓ Branch 4 taken 6 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SecondaryLayerSpec&):
✓ Branch 4 taken 19 times.
34 io("count_fraction", o.countFraction,
384 "Size, as a fraction of the primary's diameter, from which the onset count counts "
385 "secondaries.",
386 34 "", Above(0.0));
387
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SecondaryLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SecondaryLayerSpec&):
✓ Branch 4 taken 6 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SecondaryLayerSpec&):
✓ Branch 4 taken 19 times.
34 io("size_slope", o.sizeSlope,
388 "Cumulative size slope of the secondaries, their number falling as d^-slope; higher values "
389 "give relatively more small secondaries.",
390 34 "", Above(0.0));
391
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SecondaryLayerSpec&):
✓ Branch 5 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SecondaryLayerSpec&):
✓ Branch 5 taken 6 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SecondaryLayerSpec&):
✓ Branch 5 taken 19 times.
34 io("min_diameter", o.minDiameter, "Smallest secondary generated, in metres.", "m", Above(0.0));
392
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SecondaryLayerSpec&):
✓ Branch 5 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SecondaryLayerSpec&):
✓ Branch 5 taken 6 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SecondaryLayerSpec&):
✓ Branch 5 taken 19 times.
34 OptionalBound(io, "max_diameter", o.maxDiameter,
393 "Largest secondary generated, in metres; unset has no limit beyond Singer et "
394 "al.'s largest secondary at each range.",
395 34 "m", std::numeric_limits<double>::infinity(), Above(0.0));
396
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SecondaryLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SecondaryLayerSpec&):
✓ Branch 4 taken 6 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SecondaryLayerSpec&):
✓ Branch 4 taken 19 times.
34 io("outer_range", o.outerRange,
397 "How far secondaries reach, in primary diameters from its centre; unset uses the longest "
398 "typical ray of Elliott et al. (2018).",
399 34 "", Above(0.0));
400
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SecondaryLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SecondaryLayerSpec&):
✓ Branch 4 taken 6 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SecondaryLayerSpec&):
✓ Branch 4 taken 19 times.
34 io("min_primary_diameter", o.selection.minDiameter,
401 34 "Smallest primary crater, in metres, that throws secondaries.", "m", AtLeast(0.0));
402
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SecondaryLayerSpec&):
✓ Branch 5 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SecondaryLayerSpec&):
✓ Branch 5 taken 6 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SecondaryLayerSpec&):
✓ Branch 5 taken 19 times.
34 OptionalBound(io, "max_primary_diameter", o.selection.maxDiameter,
403 "Largest primary crater, in metres, that throws secondaries; unset has no upper "
404 "limit.",
405 34 "m", std::numeric_limits<double>::infinity(), AtLeast(0.0));
406
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SecondaryLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SecondaryLayerSpec&):
✓ Branch 4 taken 6 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SecondaryLayerSpec&):
✓ Branch 4 taken 19 times.
34 io("min_age_gyr", o.selection.minAgeGyr, "Youngest primary, in Gyr, that throws secondaries.",
407 34 "Gyr", AtLeast(0.0));
408
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SecondaryLayerSpec&):
✓ Branch 5 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SecondaryLayerSpec&):
✓ Branch 5 taken 6 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SecondaryLayerSpec&):
✓ Branch 5 taken 19 times.
34 OptionalBound(io, "max_age_gyr", o.selection.maxAgeGyr,
409 "Oldest primary, in Gyr, that throws secondaries; unset has no upper limit.",
410 34 "Gyr", std::numeric_limits<double>::infinity(), AtLeast(0.0));
411
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SecondaryLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SecondaryLayerSpec&):
✓ Branch 4 taken 6 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SecondaryLayerSpec&):
✓ Branch 4 taken 19 times.
34 io("manual", o.selection.manual,
412 "Lets manual primary craters throw secondaries too; otherwise only generated ones do.");
413
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SecondaryLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SecondaryLayerSpec&):
✓ Branch 4 taken 6 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SecondaryLayerSpec&):
✓ Branch 4 taken 19 times.
34 io("cell_size_factor", o.cellSizeFactor,
414 "Side of the polar cells secondaries are drawn in, as a multiple of each size band's "
415 "largest diameter.",
416 34 "", Above(0.0));
417
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SecondaryLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SecondaryLayerSpec&):
✓ Branch 4 taken 6 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SecondaryLayerSpec&):
✓ Branch 4 taken 19 times.
34 io("rays", o.rays, "Secondaries gathered into rays and clumped along them; off by default.");
418
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SecondaryLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SecondaryLayerSpec&):
✓ Branch 4 taken 6 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SecondaryLayerSpec&):
✓ Branch 4 taken 19 times.
34 io("shapes", o.shapes, "Secondaries stretched toward their primary; round by default.");
419
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SecondaryLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SecondaryLayerSpec&):
✓ Branch 4 taken 6 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SecondaryLayerSpec&):
✓ Branch 4 taken 19 times.
34 io("depth_ratio", spec.depthRatio,
420 "Depth over diameter every secondary is given, with no wear by age; lower values give "
421 "shallower secondaries.",
422 34 "", Above(0.0));
423
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SecondaryLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SecondaryLayerSpec&):
✓ Branch 4 taken 6 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SecondaryLayerSpec&):
✓ Branch 4 taken 19 times.
34 io("morphometry", spec.morphometry,
424 "Published fits whose fresh crater rim the secondaries are shaped with.");
425 34 }
426
427 } // namespace terraingen::config
428