131 lines
5.7 KiB
C++
131 lines
5.7 KiB
C++
#include <gtest/gtest.h>
|
|
|
|
#include <QJsonArray>
|
|
#include <QJsonObject>
|
|
|
|
#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);
|
|
}
|