mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Add support for extrapolation
Summary: Adds support for the `extrapolate` parameter on the native interpolation node. This is pretty much a 1 to 1 port of the JS implementation. **Test plan** Tested by adding the `extrapolate` parameter in the native animated UIExplorer example. Closes https://github.com/facebook/react-native/pull/9366 Differential Revision: D3824154 fbshipit-source-id: 2ef593af827a8bd3d7b8ab2d53abbdc9516c6022
This commit is contained in:
committed by
Facebook Github Bot 5
parent
fab0ff35f1
commit
6d978c3c8b
+69
-20
@@ -12,53 +12,102 @@ import static org.fest.assertions.api.Assertions.assertThat;
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class NativeAnimatedInterpolationTest {
|
||||
|
||||
private double simpleInterpolation(double value, double[] input, double[] output) {
|
||||
return InterpolationAnimatedNode.interpolate(
|
||||
value,
|
||||
input,
|
||||
output,
|
||||
InterpolationAnimatedNode.EXTRAPOLATE_TYPE_EXTEND,
|
||||
InterpolationAnimatedNode.EXTRAPOLATE_TYPE_EXTEND
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSimpleOneToOneMapping() {
|
||||
double[] input = new double[] {0d, 1d};
|
||||
double[] output = new double[] {0d, 1d};
|
||||
assertThat(InterpolationAnimatedNode.interpolate(0, input, output)).isEqualTo(0);
|
||||
assertThat(InterpolationAnimatedNode.interpolate(0.5, input, output)).isEqualTo(0.5);
|
||||
assertThat(InterpolationAnimatedNode.interpolate(0.8, input, output)).isEqualTo(0.8);
|
||||
assertThat(InterpolationAnimatedNode.interpolate(1, input, output)).isEqualTo(1);
|
||||
assertThat(simpleInterpolation(0, input, output)).isEqualTo(0);
|
||||
assertThat(simpleInterpolation(0.5, input, output)).isEqualTo(0.5);
|
||||
assertThat(simpleInterpolation(0.8, input, output)).isEqualTo(0.8);
|
||||
assertThat(simpleInterpolation(1, input, output)).isEqualTo(1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWiderOutputRange() {
|
||||
double[] input = new double[] {0d, 1d};
|
||||
double[] output = new double[] {100d, 200d};
|
||||
assertThat(InterpolationAnimatedNode.interpolate(0, input, output)).isEqualTo(100);
|
||||
assertThat(InterpolationAnimatedNode.interpolate(0.5, input, output)).isEqualTo(150);
|
||||
assertThat(InterpolationAnimatedNode.interpolate(0.8, input, output)).isEqualTo(180);
|
||||
assertThat(InterpolationAnimatedNode.interpolate(1, input, output)).isEqualTo(200);
|
||||
assertThat(simpleInterpolation(0, input, output)).isEqualTo(100);
|
||||
assertThat(simpleInterpolation(0.5, input, output)).isEqualTo(150);
|
||||
assertThat(simpleInterpolation(0.8, input, output)).isEqualTo(180);
|
||||
assertThat(simpleInterpolation(1, input, output)).isEqualTo(200);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWiderInputRange() {
|
||||
double[] input = new double[] {2000d, 3000d};
|
||||
double[] output = new double[] {1d, 2d};
|
||||
assertThat(InterpolationAnimatedNode.interpolate(2000, input, output)).isEqualTo(1);
|
||||
assertThat(InterpolationAnimatedNode.interpolate(2250, input, output)).isEqualTo(1.25);
|
||||
assertThat(InterpolationAnimatedNode.interpolate(2800, input, output)).isEqualTo(1.8);
|
||||
assertThat(InterpolationAnimatedNode.interpolate(3000, input, output)).isEqualTo(2);
|
||||
assertThat(simpleInterpolation(2000, input, output)).isEqualTo(1);
|
||||
assertThat(simpleInterpolation(2250, input, output)).isEqualTo(1.25);
|
||||
assertThat(simpleInterpolation(2800, input, output)).isEqualTo(1.8);
|
||||
assertThat(simpleInterpolation(3000, input, output)).isEqualTo(2);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testManySegments() {
|
||||
double[] input = new double[] {-1d, 1d, 5d};
|
||||
double[] output = new double[] {0, 10d, 20d};
|
||||
assertThat(InterpolationAnimatedNode.interpolate(-1, input, output)).isEqualTo(0);
|
||||
assertThat(InterpolationAnimatedNode.interpolate(0, input, output)).isEqualTo(5);
|
||||
assertThat(InterpolationAnimatedNode.interpolate(1, input, output)).isEqualTo(10);
|
||||
assertThat(InterpolationAnimatedNode.interpolate(2, input, output)).isEqualTo(12.5);
|
||||
assertThat(InterpolationAnimatedNode.interpolate(5, input, output)).isEqualTo(20);
|
||||
assertThat(simpleInterpolation(-1, input, output)).isEqualTo(0);
|
||||
assertThat(simpleInterpolation(0, input, output)).isEqualTo(5);
|
||||
assertThat(simpleInterpolation(1, input, output)).isEqualTo(10);
|
||||
assertThat(simpleInterpolation(2, input, output)).isEqualTo(12.5);
|
||||
assertThat(simpleInterpolation(5, input, output)).isEqualTo(20);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testExtrapolate() {
|
||||
public void testExtendExtrapolate() {
|
||||
double[] input = new double[] {10d, 20d};
|
||||
double[] output = new double[] {0d, 1d};
|
||||
assertThat(InterpolationAnimatedNode.interpolate(30d, input, output)).isEqualTo(2);
|
||||
assertThat(InterpolationAnimatedNode.interpolate(5d, input, output)).isEqualTo(-0.5);
|
||||
assertThat(simpleInterpolation(30d, input, output)).isEqualTo(2);
|
||||
assertThat(simpleInterpolation(5d, input, output)).isEqualTo(-0.5);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testClampExtrapolate() {
|
||||
double[] input = new double[] {10d, 20d};
|
||||
double[] output = new double[] {0d, 1d};
|
||||
assertThat(InterpolationAnimatedNode.interpolate(
|
||||
30d,
|
||||
input,
|
||||
output,
|
||||
InterpolationAnimatedNode.EXTRAPOLATE_TYPE_CLAMP,
|
||||
InterpolationAnimatedNode.EXTRAPOLATE_TYPE_CLAMP
|
||||
)).isEqualTo(1);
|
||||
assertThat(InterpolationAnimatedNode.interpolate(
|
||||
5d,
|
||||
input,
|
||||
output,
|
||||
InterpolationAnimatedNode.EXTRAPOLATE_TYPE_CLAMP,
|
||||
InterpolationAnimatedNode.EXTRAPOLATE_TYPE_CLAMP
|
||||
)).isEqualTo(0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIdentityExtrapolate() {
|
||||
double[] input = new double[] {10d, 20d};
|
||||
double[] output = new double[] {0d, 1d};
|
||||
assertThat(InterpolationAnimatedNode.interpolate(
|
||||
30d,
|
||||
input,
|
||||
output,
|
||||
InterpolationAnimatedNode.EXTRAPOLATE_TYPE_IDENTITY,
|
||||
InterpolationAnimatedNode.EXTRAPOLATE_TYPE_IDENTITY
|
||||
)).isEqualTo(30);
|
||||
assertThat(InterpolationAnimatedNode.interpolate(
|
||||
5d,
|
||||
input,
|
||||
output,
|
||||
InterpolationAnimatedNode.EXTRAPOLATE_TYPE_IDENTITY,
|
||||
InterpolationAnimatedNode.EXTRAPOLATE_TYPE_IDENTITY
|
||||
)).isEqualTo(5);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user