geopro/tests/io/gpr/test_normalized_radar_reade...

36 lines
1.5 KiB
C++

#include <gtest/gtest.h>
#include "io/gpr/NormalizedRadarReader.hpp"
using namespace geopro::io::gpr;
TEST(NormalizedRadarHead, ParsesCoreFieldsAndDerivesTraces) {
const std::string head =
"SAMPLES:516\nNUMBER_OF_CH:16\nLAST_TRACE:60448\nBITS:16\nENDIAN_TYPE:1\n"
"DISTANCE_INTERVAL:0.099194\nTIMEWINDOW:96.419553\nDIELECTRIC:\n"
"CH_X_OFFSETS:0.080 0.160 0.240 0.320 0.400 0.480 0.560 0.640 0.720 0.800 "
"0.880 0.960 1.040 1.120 1.200 1.280\n";
const RadarHeader h = parseRadarHead(head);
EXPECT_EQ(h.samples, 516);
EXPECT_EQ(h.channels, 16);
EXPECT_EQ(h.lastTrace, 60448);
EXPECT_EQ(h.traces, 3778); // 60448/16
EXPECT_EQ(h.bits, 16);
EXPECT_EQ(h.endianType, 1);
EXPECT_DOUBLE_EQ(h.distanceInterval, 0.099194);
ASSERT_EQ(h.chXOffsets.size(), 16u);
EXPECT_DOUBLE_EQ(h.chXOffsets.front(), 0.080);
EXPECT_DOUBLE_EQ(h.chXOffsets.back(), 1.280);
}
TEST(NormalizedRadarHead, MissingRequiredFieldThrows) {
EXPECT_THROW(parseRadarHead("SAMPLES:516\nNUMBER_OF_CH:16\n"), std::runtime_error);
}
TEST(NormalizedRadarHead, DepthSpacingUsesDefaultVelocityWhenNoDielectric) {
const std::string head = "SAMPLES:516\nNUMBER_OF_CH:16\nLAST_TRACE:32\n"
"TIMEWINDOW:96.419553\nDIELECTRIC:\n";
const RadarHeader h = parseRadarHead(head);
EXPECT_NEAR(waveVelocityMperNs(h), 0.1, 1e-9); // 无介电 → 默认 0.1
const double dz = depthSpacingZ(h);
EXPECT_NEAR(dz, (96.419553 / 515.0) * 0.1 / 2.0, 1e-9);
}