geopro/tests/core/test_gpr_volume_builder.cpp

64 lines
1.6 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "core/algo/GprVolumeBuilder.hpp"
#include "core/algo/IInterpolator.hpp" // GridSpec
#include <gtest/gtest.h>
using namespace geopro::core;
// GprSurvey 放 core/modelgeopro::core 命名空间),保持 core 自洽,避免 core->io 反向依赖。
TEST(GprVolumeBuilder, InterpolatesAcrossChannelsOnly) {
geopro::core::GprSurvey s;
s.ntraces = 1;
s.samples = 1;
s.x0 = 0;
s.dx = 1;
s.z0 = 0;
s.dz = 1;
s.channelY = {0.0, 1.0}; // 两通道Y=0 值0、Y=1 值100
s.values = {0.0, 100.0}; // [(c*1+0)*1+0] => c=0->0, c=1->100
GridSpec spec{};
spec.nx = 1;
spec.ny = 3;
spec.nz = 1;
spec.ox = 0;
spec.oy = 0;
spec.oz = 0;
spec.dx = 1;
spec.dy = 0.5;
spec.dz = 1;
spec.power = 2;
spec.maxDist = 9.9;
auto b = buildGprVolume(s, spec);
EXPECT_EQ(b.vol.nx(), 1);
EXPECT_EQ(b.vol.ny(), 3);
EXPECT_EQ(b.vol.nz(), 1);
EXPECT_NEAR(b.quant.toPhys(b.vol.at(0, 0, 0)), 0.0, 1.0); // Y=0 -> ch0
EXPECT_NEAR(b.quant.toPhys(b.vol.at(0, 1, 0)), 50.0, 1.5); // Y=0.5 -> 中点≈50
EXPECT_NEAR(b.quant.toPhys(b.vol.at(0, 2, 0)), 100.0, 1.0); // Y=1.0 -> ch1
}
TEST(GprVolumeBuilder, OutOfRangeBecomesBlank) {
geopro::core::GprSurvey s;
s.ntraces = 1;
s.samples = 1;
s.x0 = 0;
s.dx = 1;
s.z0 = 0;
s.dz = 1;
s.channelY = {0.0};
s.values = {5.0};
GridSpec spec{};
spec.nx = 3;
spec.ny = 1;
spec.nz = 1; // X 超出仅 1 道的范围
spec.ox = 0;
spec.oy = 0;
spec.oz = 0;
spec.dx = 10;
spec.dy = 1;
spec.dz = 1;
spec.power = 2;
spec.maxDist = 0.5;
auto b = buildGprVolume(s, spec);
EXPECT_EQ(b.vol.at(2, 0, 0), ScalarVolumeI16::kBlank); // 远端无覆盖->blank
}