Files
react-native/ReactAndroid/src/test/java/com/facebook/react/animated/NativeAnimatedInterpolationTest.java
T
Janic DuplessisandFacebook Github Bot 5 6d978c3c8b 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
2016-09-06 15:28:38 -07:00

114 lines
3.9 KiB
Java

package com.facebook.react.animated;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import static org.fest.assertions.api.Assertions.assertThat;
/**
* Tests method used by {@link InterpolationAnimatedNode} to interpolate value of the input nodes.
*/
@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(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(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(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(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 testExtendExtrapolate() {
double[] input = new double[] {10d, 20d};
double[] output = new double[] {0d, 1d};
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);
}
}