#include #include using namespace mbgl; using namespace mbgl::style; using namespace std::literals::chrono_literals; float evaluate(UnevaluatedPaintProperty>& property, Duration delta = Duration::zero()) { PropertyEvaluationParameters parameters { 0, TimePoint::min() + delta, ZoomHistory(), Duration::zero() }; PropertyEvaluator evaluator { parameters, 0.0f }; return property.evaluate(evaluator, parameters.now); } TEST(UnevaluatedPaintProperty, EvaluateDefaultValue) { UnevaluatedPaintProperty> property; ASSERT_EQ(0.0f, evaluate(property)); } TEST(UnevaluatedPaintProperty, EvaluateUntransitionedConstant) { UnevaluatedPaintProperty> property { PropertyValue(1.0f), UnevaluatedPaintProperty>(), TransitionOptions(), TimePoint::min() }; ASSERT_EQ(1.0f, evaluate(property)); } TEST(UnevaluatedPaintProperty, EvaluateTransitionedConstantWithoutDelay) { TransitionOptions transition; transition.duration = { 1000ms }; UnevaluatedPaintProperty> t0 { PropertyValue(0.0f), UnevaluatedPaintProperty>(), TransitionOptions(), TimePoint::min() }; UnevaluatedPaintProperty> t1 { PropertyValue(1.0f), t0, transition, TimePoint::min() }; ASSERT_FLOAT_EQ(0.0f, evaluate(t1, 0ms)); ASSERT_FLOAT_EQ(0.823099f, evaluate(t1, 500ms)); ASSERT_FLOAT_EQ(1.0f, evaluate(t1, 1500ms)); } TEST(UnevaluatedPaintProperty, EvaluateTransitionedConstantWithDelay) { TransitionOptions transition; transition.delay = { 1000ms }; transition.duration = { 1000ms }; UnevaluatedPaintProperty> t0 { PropertyValue(0.0f), UnevaluatedPaintProperty>(), TransitionOptions(), TimePoint::min() }; UnevaluatedPaintProperty> t1 { PropertyValue(1.0f), t0, transition, TimePoint::min() }; ASSERT_FLOAT_EQ(0.0f, evaluate(t1, 0ms)); ASSERT_FLOAT_EQ(0.0f, evaluate(t1, 500ms)); ASSERT_FLOAT_EQ(0.0f, evaluate(t1, 612ms)); ASSERT_FLOAT_EQ(0.823099f, evaluate(t1, 1500ms)); ASSERT_FLOAT_EQ(1.0f, evaluate(t1, 2500ms)); }