#include #include "model/Field.hpp" #include "model/Anomaly.hpp" using namespace geopro::core; TEST(DataModel, GridHasMetaFields) { Grid g(2, 3); g.z.assign(6, 0.0); g.elevation = {1,2}; g.lat = {22.5,22.5}; g.lon = {114.1,114.1}; g.vmin = -10; g.vmax = 800; EXPECT_EQ(g.z.size(), 6u); EXPECT_DOUBLE_EQ(g.vmax, 800); } TEST(DataModel, ScatterHasGis) { ScatterField s; s.projX = {516000.0}; s.projY = {2494000.0}; EXPECT_EQ(s.projX.size(), 1u); } TEST(DataModel, AnomalyHolds) { Anomaly a; a.name = "ERT1-54"; a.markType = AnomalyMarkType::Polyline; a.localPts = {{1.0, 2.0}, {3.0, 4.0}}; EXPECT_EQ(a.markType, AnomalyMarkType::Polyline); EXPECT_EQ(a.localPts.size(), 2u); } // 异常挂载实体解析(spec §8):切片已保存挂切片、临时切片挂体。 TEST(ResolveAnomalyMount, SavedSliceMountsOnSlice) { EXPECT_EQ(resolveAnomalyMount(true, "slice-1", "vol-1"), "slice-1"); } TEST(ResolveAnomalyMount, UnsavedSliceMountsOnVolume) { EXPECT_EQ(resolveAnomalyMount(false, "", "vol-1"), "vol-1"); } TEST(ResolveAnomalyMount, SavedFlagButEmptySliceIdFallsBackToVolume) { // 防御:标记已保存但切片 id 缺失 → 退回挂体(不产出空 remarkSourceId)。 EXPECT_EQ(resolveAnomalyMount(true, "", "vol-1"), "vol-1"); } #include TEST(GridNaN, HasValueReflectsNaN) { geopro::core::Grid g(2, 2); g.valueAt(0, 0) = 3.0; g.valueAt(1, 0) = std::nan(""); EXPECT_TRUE(g.hasValue(0, 0)); EXPECT_FALSE(g.hasValue(1, 0)); }