geopro/tests/app/test_dataset_category.cpp

47 lines
2.0 KiB
C++

#include <gtest/gtest.h>
#include "DatasetCategory.hpp"
using geopro::data::DsRow;
using namespace geopro::app;
namespace {
DsRow row(const std::string& id, const std::string& ddCode, const std::string& dsTypeCode) {
DsRow r;
r.id = id;
r.ddCode = ddCode;
r.dsTypeCode = dsTypeCode;
return r;
}
} // namespace
TEST(SplitByCategory, RoutesByDsTypeCodeAndDdCode) {
std::vector<DsRow> rows = {
row("a", "dd_inversion_data", "ERT platform inversion data"), // 电阻率
row("b", "dd_inversion_data", "visual resistivity data"), // 视电阻率
row("c", "dd_inversion_data", "DD TRANSIENT ELECTROMAGNETIC INVERSION"), // 瞬变
row("v", "dd_voxel", ""), // 三维体(按 ddCode)
row("s", "dd_slice", ""), // 切片(按 ddCode)
row("x", "dd_ert_measurement_gr_data", "earth resistance"), // 接地电阻 → 丢弃
};
const CategoryBuckets b = splitByCategory(rows);
ASSERT_EQ(b.segments.size(), categoryConfigs().size());
EXPECT_EQ(b.segments[0].size(), 1u); EXPECT_EQ(b.segments[0][0].id, "a");
EXPECT_EQ(b.segments[1].size(), 1u); EXPECT_EQ(b.segments[1][0].id, "b");
EXPECT_EQ(b.segments[2].size(), 1u); EXPECT_EQ(b.segments[2][0].id, "c");
EXPECT_EQ(b.segments[3].size(), 1u); EXPECT_EQ(b.segments[3][0].id, "v");
// 切片(dd_slice)不单列段——挂三维体树,不进任何段;接地电阻同样丢弃。
std::size_t total = 0;
for (auto& s : b.segments) total += s.size();
EXPECT_EQ(total, 4u);
}
TEST(SplitByCategory, PreservesOrderWithinSegment) {
std::vector<DsRow> rows = {
row("a1", "dd_inversion_data", "ERT platform inversion data"),
row("a2", "dd_inversion_data", "ERT platform inversion data"),
};
const CategoryBuckets b = splitByCategory(rows);
ASSERT_EQ(b.segments[0].size(), 2u);
EXPECT_EQ(b.segments[0][0].id, "a1");
EXPECT_EQ(b.segments[0][1].id, "a2");
}