#include #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 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"); EXPECT_EQ(b.segments[4].size(), 1u); EXPECT_EQ(b.segments[4][0].id, "s"); // 接地电阻不进任何段。 std::size_t total = 0; for (auto& s : b.segments) total += s.size(); EXPECT_EQ(total, 5u); } TEST(SplitByCategory, PreservesOrderWithinSegment) { std::vector 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"); }