#include #include #include #include "panels/chart/InversionProcessOps.hpp" using namespace geopro::app; // ── I1/O1 网格化 toGrid 体 ──────────────────────────────────────────────── TEST(InversionProcessOps, GridToBodyFieldsLinear) { GridToParams p; p.dsObjectId = QStringLiteral("ds1"); p.actionCode = QStringLiteral("alg_kriging"); p.xMin = -1.0; p.xMax = 99.0; p.yMin = -2.0; p.yMax = 50.0; p.vMin = 5.0; p.vMax = 500.0; p.xSize = 100; p.ySize = 60; p.xSpacing = 1.0; p.ySpacing = 0.86; p.logFormat = false; auto b = buildGridToBody(p); EXPECT_EQ(b.value("dsObjectId").toString().toStdString(), "ds1"); EXPECT_EQ(b.value("actionCode").toString().toStdString(), "alg_kriging"); EXPECT_DOUBLE_EQ(b.value("xminValue").toDouble(), -1.0); EXPECT_DOUBLE_EQ(b.value("xmaxValue").toDouble(), 99.0); EXPECT_DOUBLE_EQ(b.value("yminValue").toDouble(), -2.0); EXPECT_DOUBLE_EQ(b.value("ymaxValue").toDouble(), 50.0); EXPECT_EQ(b.value("xsize").toInt(), 100); // 小写 EXPECT_EQ(b.value("ysize").toInt(), 60); // 小写 EXPECT_DOUBLE_EQ(b.value("xSpacing").toDouble(), 1.0); // 驼峰 EXPECT_DOUBLE_EQ(b.value("ySpacing").toDouble(), 0.86); // 驼峰 EXPECT_DOUBLE_EQ(b.value("vminValue").toDouble(), 5.0); EXPECT_DOUBLE_EQ(b.value("vmaxValue").toDouble(), 500.0); EXPECT_EQ(b.value("saveDataValueType").toInt(), 1); // 线性=1 } TEST(InversionProcessOps, GridToBodyLogFormat) { GridToParams p; p.logFormat = true; EXPECT_EQ(buildGridToBody(p).value("saveDataValueType").toInt(), 2); // 对数=2 } // ── I3 白化 whitenData 体 ────────────────────────────────────────────────── TEST(InversionProcessOps, WhitenMethod1ExternalSendsBoolWay) { WhitenParams p; p.dsObjectId = QStringLiteral("ds1"); p.whiteningMethod = 1; p.boundaryExtension = 3.5; p.whiteningType = 0; // 外部 → whitenedWay=true auto b = buildWhitenBody(p); EXPECT_EQ(b.value("whiteningMethod").toInt(), 1); EXPECT_DOUBLE_EQ(b.value("boundaryExtension").toDouble(), 3.5); EXPECT_TRUE(b.value("whitenedWay").toBool()); EXPECT_FALSE(b.contains("whitenedDataId")); } TEST(InversionProcessOps, WhitenMethod1InternalWayFalse) { WhitenParams p; p.whiteningMethod = 1; p.whiteningType = 1; // 内部 → whitenedWay=false EXPECT_FALSE(buildWhitenBody(p).value("whitenedWay").toBool()); } TEST(InversionProcessOps, WhitenMethod2SendsFileId) { WhitenParams p; p.whiteningMethod = 2; p.whitenedDataId = QStringLiteral("file-9"); auto b = buildWhitenBody(p); EXPECT_EQ(b.value("whitenedDataId").toString().toStdString(), "file-9"); EXPECT_FALSE(b.contains("boundaryExtension")); } TEST(InversionProcessOps, WhitenMethod3SendsSubType) { WhitenParams p; p.whiteningMethod = 3; p.modelWhiteningSubType = 1; // 矩形 auto b = buildWhitenBody(p); EXPECT_EQ(b.value("modelWhiteningSubType").toInt(), 1); } // ── I4 滤波 applyFilter 体 + code 映射 ────────────────────────────────────── TEST(InversionProcessOps, BoundaryAndNoDataCodes) { EXPECT_EQ(filterBoundaryCode(QStringLiteral("whitening")), 1); EXPECT_EQ(filterBoundaryCode(QStringLiteral("skip")), 2); EXPECT_EQ(filterBoundaryCode(QStringLiteral("edgePoint")), 3); EXPECT_EQ(filterBoundaryCode(QStringLiteral("filling")), 4); EXPECT_EQ(filterNoDataCode(QStringLiteral("expansion")), 1); EXPECT_EQ(filterNoDataCode(QStringLiteral("retain")), 2); EXPECT_EQ(filterNoDataCode(QStringLiteral("skip")), 3); EXPECT_EQ(filterNoDataCode(QStringLiteral("filling")), 4); } TEST(InversionProcessOps, FilterApplyBodyFields) { FilterApplyParams p; p.dsObjectId = QStringLiteral("ds1"); p.dataEdge = QStringLiteral("filling"); p.dataEdgeValue = 12.0; p.noDataPoints = QStringLiteral("skip"); p.noDataValue = 0.0; p.number = 3; p.row = 3; p.column = 3; p.matrix = {{0, 1, 0}, {1, 1, 1}, {0, 1, 0}}; p.filteringMethod = QStringLiteral("中值滤波"); auto b = buildFilterApplyBody(p); EXPECT_EQ(b.value("boundary").toInt(), 4); // filling EXPECT_DOUBLE_EQ(b.value("boundaryValue").toDouble(), 12.0); EXPECT_EQ(b.value("noDataPoints").toInt(), 3); // skip EXPECT_DOUBLE_EQ(b.value("noDataPointsValue").toDouble(), 0.0); EXPECT_EQ(b.value("number").toInt(), 3); EXPECT_EQ(b.value("row").toInt(), 3); EXPECT_EQ(b.value("column").toInt(), 3); EXPECT_EQ(b.value("filteringMethod").toString().toStdString(), std::string("中值滤波")); const auto form = b.value("rowColumValue").toObject().value("form").toArray(); ASSERT_EQ(form.size(), 3); EXPECT_DOUBLE_EQ(form.at(1).toArray().at(1).toDouble(), 1.0); // 中心 EXPECT_DOUBLE_EQ(form.at(0).toArray().at(0).toDouble(), 0.0); // 角 } TEST(InversionProcessOps, NewFilterBodyFields) { auto b = buildNewFilterBody(QStringLiteral("自定义滤波器1"), QStringLiteral("pj1"), QStringLiteral("grp-7"), {{1, 1}, {1, 1}}); EXPECT_EQ(b.value("type").toInt(), 1); EXPECT_EQ(b.value("name").toString().toStdString(), std::string("自定义滤波器1")); EXPECT_EQ(b.value("projectId").toString().toStdString(), "pj1"); EXPECT_EQ(b.value("parentId").toString().toStdString(), "grp-7"); const auto form = b.value("rowColumValue").toObject().value("form").toArray(); ASSERT_EQ(form.size(), 2); EXPECT_EQ(form.at(0).toArray().size(), 2); }