Skip to content
This repository has been archived by the owner on Aug 8, 2023. It is now read-only.

Commit

Permalink
[core] Correct boolean function interpolation
Browse files Browse the repository at this point in the history
  • Loading branch information
jfirebaugh committed Dec 22, 2016
1 parent 531c983 commit 521336c
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 10 deletions.
4 changes: 4 additions & 0 deletions src/mbgl/util/interpolate.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,10 @@ struct Uninterpolated {
}
};

template <>
struct Interpolator<bool>
: Uninterpolated {};

template <class T>
struct Interpolator<T, typename std::enable_if_t<std::is_enum<T>::value>>
: Uninterpolated {};
Expand Down
30 changes: 20 additions & 10 deletions test/style/functions.test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,20 @@ float evaluate(PropertyValue<float> value, float zoom) {
std::string evaluate(PropertyValue<std::string> value, float zoom) {
return value.evaluate(PropertyEvaluator<std::string>(PropertyEvaluationParameters(zoom), ""));
}
bool evaluate(PropertyValue<bool> value, float zoom) {
return value.evaluate(PropertyEvaluator<bool>(PropertyEvaluationParameters(zoom), false));
}

TEST(Function, Constant) {
EXPECT_EQ(2.0f, evaluate(2, 0));
EXPECT_EQ(3.8f, evaluate(3.8, 0));
EXPECT_EQ(22.0f, evaluate(22, 0));
EXPECT_EQ(2.0f, evaluate(2, 4));
EXPECT_EQ(3.8f, evaluate(3.8, 4));
EXPECT_EQ(22.0f, evaluate(22, 4));
EXPECT_EQ(2.0f, evaluate(2, 22));
EXPECT_EQ(3.8f, evaluate(3.8, 22));
EXPECT_EQ(22.0f, evaluate(22, 22));
EXPECT_EQ(2.0f, evaluate(PropertyValue<float>(2.0), 0));
EXPECT_EQ(3.8f, evaluate(PropertyValue<float>(3.8), 0));
EXPECT_EQ(22.0f, evaluate(PropertyValue<float>(22.0), 0));
EXPECT_EQ(2.0f, evaluate(PropertyValue<float>(2.0), 4));
EXPECT_EQ(3.8f, evaluate(PropertyValue<float>(3.8), 4));
EXPECT_EQ(22.0f, evaluate(PropertyValue<float>(22.0), 4));
EXPECT_EQ(2.0f, evaluate(PropertyValue<float>(2.0), 22));
EXPECT_EQ(3.8f, evaluate(PropertyValue<float>(3.8), 22));
EXPECT_EQ(22.0f, evaluate(PropertyValue<float>(22.0), 22));
}

TEST(Function, Stops) {
Expand Down Expand Up @@ -60,10 +63,17 @@ TEST(Function, Stops) {
EXPECT_EQ(10, evaluate(slope_4, 8));

// discrete values
Function<std::string> discrete_0({{ 3, "string0"}, {6, "string1"}, {9, "string2"}}, 1);
Function<std::string> discrete_0({{3, "string0"}, {6, "string1"}, {9, "string2"}}, 1);
EXPECT_EQ("string0", evaluate(discrete_0, 2));
EXPECT_EQ("string0", evaluate(discrete_0, 4));
EXPECT_EQ("string1", evaluate(discrete_0, 7));
EXPECT_EQ("string2", evaluate(discrete_0, 9));
EXPECT_EQ("string2", evaluate(discrete_0, 10));

Function<bool> discreteBool({{1, false}, {3, true}}, 1);
EXPECT_EQ(false, evaluate(discreteBool, 0));
EXPECT_EQ(false, evaluate(discreteBool, 1));
EXPECT_EQ(false, evaluate(discreteBool, 2));
EXPECT_EQ(true, evaluate(discreteBool, 3));
EXPECT_EQ(true, evaluate(discreteBool, 4));
}

0 comments on commit 521336c

Please sign in to comment.