#include #include #include #include "ContourLevels.hpp" using geopro::app::ContourLevelParams; using geopro::app::generateContourLevels; namespace { ContourLevelParams normal(double mn, double mx, double interval) { ContourLevelParams p; p.method = ContourLevelParams::Method::Normal; p.minValue = mn; p.maxValue = mx; p.interval = interval; return p; } } // namespace // normal:len=ceil((max-min)/间隔),等距升序,首=min,末 samples; for (int i = 0; i < 100; ++i) samples.push_back(static_cast(i)); // 0..99 auto lv = generateContourLevels(p, samples); ASSERT_EQ(lv.size(), 4u); // 3 个分位 + 最大值 EXPECT_DOUBLE_EQ(lv.front(), 0.0); // 第 0 分位 EXPECT_DOUBLE_EQ(lv.back(), 99.0); // 含最大值 for (std::size_t i = 1; i < lv.size(); ++i) EXPECT_LE(lv[i - 1], lv[i]); } // equalArea:样本不足 → 退化等距线性(复刻原版失败兜底)。 TEST(ContourLevels, EqualAreaFallbackLinearWhenSamplesScarce) { ContourLevelParams p; p.method = ContourLevelParams::Method::EqualArea; p.equalAreaLayerCount = 5; p.minValue = 0.0; p.maxValue = 10.0; auto lv = generateContourLevels(p, {1.0, 2.0}); // 仅 2 个样本 < 5 ASSERT_EQ(lv.size(), 5u); EXPECT_DOUBLE_EQ(lv.front(), 0.0); EXPECT_DOUBLE_EQ(lv[1], 2.0); // step=10/5=2 }