47 lines
2.0 KiB
C++
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");
|
|
}
|