[core] Fix composite function approximation for non-integer stops

This commit is contained in:
John Firebaugh
2017-06-16 10:16:11 -07:00
parent 8699bcdbf0
commit 1de8aeed31
3 changed files with 83 additions and 27 deletions

View File

@@ -44,3 +44,28 @@ TEST(CompositeFunction, ZoomInterpolation) {
}), 0.0f)
.evaluate(0.0f, oneInteger, -1.0f)) << "Should interpolate TO the first stop";
}
TEST(CompositeFunction, Issue8460) {
CompositeFunction<float> fn1("property", CompositeExponentialStops<float>({
{15.0f, {{uint64_t(1), 0.0f}}},
{15.2f, {{uint64_t(1), 600.0f}}},
}), 0.0f);
EXPECT_NEAR( 0.0f, fn1.evaluate(15.0f, oneInteger, -1.0f), 0.00);
EXPECT_NEAR(300.0f, fn1.evaluate(15.1f, oneInteger, -1.0f), 0.01);
EXPECT_NEAR(600.0f, fn1.evaluate(15.2f, oneInteger, -1.0f), 0.00);
EXPECT_NEAR(600.0f, fn1.evaluate(16.0f, oneInteger, -1.0f), 0.00);
CompositeFunction<float> fn2("property", CompositeExponentialStops<float>({
{15.0f, {{uint64_t(1), 0.0f}}},
{15.2f, {{uint64_t(1), 300.0f}}},
{18.0f, {{uint64_t(1), 600.0f}}},
}), 0.0f);
EXPECT_NEAR( 0.0f, fn2.evaluate(15.0f, oneInteger, -1.0f), 0.00);
EXPECT_NEAR(150.0f, fn2.evaluate(15.1f, oneInteger, -1.0f), 0.01);
EXPECT_NEAR(300.0f, fn2.evaluate(15.2f, oneInteger, -1.0f), 0.00);
EXPECT_NEAR(385.71f, fn2.evaluate(16.0f, oneInteger, -1.0f), 0.01);
EXPECT_NEAR(600.0f, fn2.evaluate(18.0f, oneInteger, -1.0f), 0.00);
EXPECT_NEAR(600.0f, fn2.evaluate(19.0f, oneInteger, -1.0f), 0.00);
}