#include #include "io/gpr/IprHeader.hpp" using namespace geopro::io::gpr; TEST(IprHeaderExtended, parsesAllFieldsCaseInsensitive) { const std::string text = "Date: 2022-03-10\n" "START TIME: 10:46\n" "stop time: 11:30\n" "Units: ns\n" "MODE: continuous\n" "Antennas: MALA MIRA\n" "FREQUENCY: 200\n" "Stacks: 4\n" "Last Trace: 3777\n" "Positive Direction: forward\n" "Samples: 516\n" "Time Interval: 0.187\n" "TimeWindow: 96.4196\n" "Depth: 5.0\n" "Zero Position: 0\n" "Dielectric: 9\n" "Soil Type: clay\n" "Bits: 16\n" "Mark: none\n" "Incident Angle: 0\n" "Distance Interval: 0.099194\n" "Start Position: 0\n" "Stop Position: 375\n" "Wheel/GPS: wheel\n" "Wheel Calibration: 1.0\n" "Scan/Second: 50\n" "Position: 0\n" "Number_of_ch: 16\n" "Ch_X_offsets: 0.0,0.2,0.4\n" "RTK_X_offset: 0.1\n" "RTK_Y_offset: 0.2\n" "RTK_Z_offset: 0.3\n" "Channels: 1\n"; const IprHeader h = parseIprHeader(text); EXPECT_EQ(h.samples, 516); EXPECT_EQ(h.lastTrace, 3777); EXPECT_EQ(h.channels, 1); EXPECT_DOUBLE_EQ(h.timeWindowNs, 96.4196); EXPECT_DOUBLE_EQ(h.distanceInterval, 0.099194); EXPECT_EQ(h.date, "2022-03-10"); EXPECT_EQ(h.startTime, "10:46"); EXPECT_EQ(h.stopTime, "11:30"); EXPECT_EQ(h.units, "ns"); EXPECT_EQ(h.mode, "continuous"); EXPECT_EQ(h.antennas, "MALA MIRA"); EXPECT_DOUBLE_EQ(h.frequency, 200.0); EXPECT_EQ(h.stacks, 4); EXPECT_EQ(h.positiveDirection, "forward"); EXPECT_DOUBLE_EQ(h.timeInterval, 0.187); EXPECT_DOUBLE_EQ(h.depth, 5.0); EXPECT_DOUBLE_EQ(h.zeroPosition, 0.0); EXPECT_DOUBLE_EQ(h.dielectric, 9.0); EXPECT_EQ(h.soilType, "clay"); EXPECT_EQ(h.bits, 16); EXPECT_EQ(h.mark, "none"); EXPECT_DOUBLE_EQ(h.incidentAngle, 0.0); EXPECT_DOUBLE_EQ(h.startPosition, 0.0); EXPECT_DOUBLE_EQ(h.stopPosition, 375.0); EXPECT_EQ(h.wheelGps, "wheel"); EXPECT_DOUBLE_EQ(h.wheelCalibration, 1.0); EXPECT_DOUBLE_EQ(h.scanPerSecond, 50.0); EXPECT_DOUBLE_EQ(h.position, 0.0); EXPECT_EQ(h.numberOfCh, 16); EXPECT_EQ(h.chXOffsets, "0.0,0.2,0.4"); EXPECT_DOUBLE_EQ(h.rtkXOffset, 0.1); EXPECT_DOUBLE_EQ(h.rtkYOffset, 0.2); EXPECT_DOUBLE_EQ(h.rtkZOffset, 0.3); } TEST(IprHeaderExtended, missingOptionalFieldsAllowed) { const std::string text = "Samples: 100\n" "Last Trace: 99\n" "Channels: 1\n"; const IprHeader h = parseIprHeader(text); EXPECT_EQ(h.samples, 100); EXPECT_TRUE(h.date.empty()); EXPECT_DOUBLE_EQ(h.frequency, 0.0); } TEST(IprHeaderExtended, missingRequiredThrows) { const std::string text = "Samples: 100\n"; EXPECT_THROW(parseIprHeader(text), std::runtime_error); }