[core] Correct boolean function interpolation

This commit is contained in:
John Firebaugh
2016-12-22 12:34:38 -08:00
parent 317b2bf42f
commit 083cee8956
2 changed files with 24 additions and 10 deletions

View File

@@ -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 {};

View File

@@ -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) {
@@ -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));
}