38 lines
1.3 KiB
C++
38 lines
1.3 KiB
C++
#include "io/gpr/IprbReader.hpp"
|
||
#include "io/gpr/IprHeader.hpp"
|
||
#include <gtest/gtest.h>
|
||
#include <fstream>
|
||
#include <cstdio>
|
||
namespace {
|
||
std::string writeTmp(const std::vector<int16_t>& v) {
|
||
std::string p = std::tmpnam(nullptr);
|
||
std::ofstream f(p, std::ios::binary);
|
||
f.write(reinterpret_cast<const char*>(v.data()),
|
||
static_cast<std::streamsize>(v.size()*sizeof(int16_t)));
|
||
return p;
|
||
}
|
||
}
|
||
using namespace geopro::io::gpr;
|
||
TEST(IprbReader, ReadsInt16AndLayout) {
|
||
std::vector<int16_t> 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<int16_t> 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);
|
||
}
|