Files
MapLibreParticleLab/test/renderer/particle_viewport_reseed.test.cpp
tei 4286c16a53
Some checks failed
validate-scripts / validate-scripts (push) Has been cancelled
fix: reseed particles after zoom out
2026-09-23 10:05:01 +09:00

82 lines
2.8 KiB
C++

#include <mbgl/renderer/particle_viewport_reseed.hpp>
#include <gtest/gtest.h>
using namespace mbgl;
TEST(ParticleViewportReseed, ZoomOutBeyondEpsilonReseedsOnce) {
ParticleViewportReseedGesture gesture;
gesture.begin(10.0);
const auto decision = gesture.finish(8.0, true);
EXPECT_EQ(decision.action, ParticleViewportReseedAction::Reseed);
EXPECT_DOUBLE_EQ(decision.startZoom, 10.0);
EXPECT_DOUBLE_EQ(decision.endZoom, 8.0);
EXPECT_FALSE(gesture.isActive());
EXPECT_EQ(gesture.finish(7.0, true).action, ParticleViewportReseedAction::None);
}
TEST(ParticleViewportReseed, ZoomInDoesNotReseed) {
ParticleViewportReseedGesture gesture;
gesture.begin(8.0);
EXPECT_EQ(gesture.finish(10.0, true).action, ParticleViewportReseedAction::None);
EXPECT_FALSE(gesture.isActive());
}
TEST(ParticleViewportReseed, PanDoesNotReseed) {
ParticleViewportReseedGesture gesture;
gesture.begin(8.0);
EXPECT_EQ(gesture.finish(8.0, true).action, ParticleViewportReseedAction::None);
}
TEST(ParticleViewportReseed, RotateOrPitchWithoutZoomDecreaseDoesNotReseed) {
ParticleViewportReseedGesture gesture;
gesture.begin(8.0);
EXPECT_EQ(gesture.finish(8.01, true).action, ParticleViewportReseedAction::None);
}
TEST(ParticleViewportReseed, ZoomJitterWithinEpsilonDoesNotReseed) {
ParticleViewportReseedGesture gesture;
gesture.begin(8.0);
EXPECT_EQ(gesture.finish(8.0 - ParticleViewportReseedZoomEpsilon, true).action,
ParticleViewportReseedAction::None);
}
TEST(ParticleViewportReseed, InvalidDomainConsumesZoomOutRequest) {
ParticleViewportReseedGesture gesture;
gesture.begin(10.0);
const auto decision = gesture.finish(8.0, false);
EXPECT_EQ(decision.action, ParticleViewportReseedAction::SkipInvalidDomain);
EXPECT_FALSE(gesture.isActive());
EXPECT_EQ(gesture.finish(7.0, true).action, ParticleViewportReseedAction::None);
}
TEST(ParticleViewportReseed, ContinuousInvalidationKeepsFirstStartZoom) {
ParticleViewportReseedGesture gesture;
gesture.begin(10.0);
gesture.begin(9.0);
gesture.begin(8.0);
EXPECT_DOUBLE_EQ(gesture.getStartZoom(), 10.0);
const auto decision = gesture.finish(7.0, true);
EXPECT_DOUBLE_EQ(decision.startZoom, 10.0);
EXPECT_EQ(decision.action, ParticleViewportReseedAction::Reseed);
}
TEST(ParticleViewportReseed, NextGestureRefreshesStartZoom) {
ParticleViewportReseedGesture gesture;
gesture.begin(10.0);
EXPECT_EQ(gesture.finish(8.0, true).action, ParticleViewportReseedAction::Reseed);
gesture.begin(6.0);
EXPECT_DOUBLE_EQ(gesture.getStartZoom(), 6.0);
const auto decision = gesture.finish(5.0, true);
EXPECT_DOUBLE_EQ(decision.startZoom, 6.0);
EXPECT_EQ(decision.action, ParticleViewportReseedAction::Reseed);
}