#include "io/gpr/IprbReader.hpp" #include "io/gpr/IprHeader.hpp" #include #include #include namespace { std::string writeTmp(const std::vector& v) { std::string p = std::tmpnam(nullptr); std::ofstream f(p, std::ios::binary); f.write(reinterpret_cast(v.data()), static_cast(v.size()*sizeof(int16_t))); return p; } } using namespace geopro::io::gpr; TEST(IprbReader, ReadsInt16AndLayout) { std::vector raw{0,1,2, 10,11,12, 20,21,22, 30,31,32}; // 4 道×3 采样 auto path = writeTmp(raw); IprHeader h{}; h.samples = 3; h.lastTrace = 3; // traces = 4 auto b = readIprb(path, h); EXPECT_EQ(b.samples, 3); EXPECT_EQ(b.traces, 4); EXPECT_EQ(b.data.size(), 12u); EXPECT_EQ(b.data[1*3 + 2], 12); // 第1道第2采样 std::remove(path.c_str()); } TEST(IprbReader, ThrowsOnSizeMismatch) { std::vector raw{0,1,2,3,4}; // 5 个,与 samples*traces 不符 auto path = writeTmp(raw); IprHeader h{}; h.samples = 3; h.lastTrace = 3; // 期望 12 EXPECT_THROW(readIprb(path, h), std::runtime_error); std::remove(path.c_str()); } TEST(IprbReader, ThrowsOnMissingFile) { IprHeader h{}; h.samples = 3; h.lastTrace = 3; EXPECT_THROW(readIprb("____no_such_file____.iprb", h), std::runtime_error); }