package com.jcwhatever.nucleus.internal.providers.math;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
/**
* Test Nucleus default fast math implementation.
*/
public class FastMathTest {
@Test
public void testSin() {
NucleusFastMathProvider fastMath = new NucleusFastMathProvider();
float fastSin = fastMath.sin(0);
float sin = (float)Math.sin(Math.toRadians(0));
assertEquals(sin, fastSin, 0.0001D);
fastSin = fastMath.sin(180);
sin = (float)Math.sin(Math.toRadians(180));
assertEquals(sin, fastSin, 0.0001D);
fastSin = fastMath.sin(-180);
sin = (float)Math.sin(Math.toRadians(-180));
assertEquals(sin, fastSin, 0.0001D);
fastSin = fastMath.sin(-360);
sin = (float)Math.sin(Math.toRadians(-360));
assertEquals(sin, fastSin, 0.0001D);
fastSin = fastMath.sin(360);
sin = (float)Math.sin(Math.toRadians(360));
assertEquals(sin, fastSin, 0.0001D);
fastSin = fastMath.sin(90);
sin = (float)Math.sin(Math.toRadians(90));
assertEquals(sin, fastSin, 0.0001D);
fastSin = fastMath.sin(-90);
sin = (float)Math.sin(Math.toRadians(-90));
assertEquals(sin, fastSin, 0.0001D);
}
@Test
public void testCos() {
NucleusFastMathProvider fastMath = new NucleusFastMathProvider();
float fastCos = fastMath.cos(0);
float cos = (float)Math.cos(Math.toRadians(0));
assertEquals(cos, fastCos, 0.0001D);
fastCos = fastMath.cos(180);
cos = (float)Math.cos(Math.toRadians(180));
assertEquals(cos, fastCos, 0.0001D);
fastCos = fastMath.cos(-180);
cos = (float)Math.cos(Math.toRadians(-180));
assertEquals(cos, fastCos, 0.0001D);
fastCos = fastMath.cos(360);
cos = (float)Math.cos(Math.toRadians(360));
assertEquals(cos, fastCos, 0.0001D);
fastCos = fastMath.cos(-360);
cos = (float)Math.cos(Math.toRadians(-360));
assertEquals(cos, fastCos, 0.0001D);
fastCos = fastMath.cos(90);
cos = (float)Math.cos(Math.toRadians(90));
assertEquals(cos, fastCos, 0.0001D);
fastCos = fastMath.cos(-90);
cos = (float)Math.cos(Math.toRadians(-90));
assertEquals(cos, fastCos, 0.0001D);
}
@Test
public void testAtan2() {
NucleusFastMathProvider fastMath = new NucleusFastMathProvider();
float fastAtan2 = fastMath.atan2(15, 16);
float atan2 = (float)Math.atan2(15, 16);
assertEquals(atan2, fastAtan2, 0.0001D);
fastAtan2 = fastMath.atan2(0, 90);
atan2 = (float)Math.atan2(0, 90);
assertEquals(atan2, fastAtan2, 0.0001D);
fastAtan2 = fastMath.atan2(90, 0);
atan2 = (float)Math.atan2(90, 0);
assertEquals(atan2, fastAtan2, 0.0001D);
fastAtan2 = fastMath.atan2(0, 0);
atan2 = (float)Math.atan2(0, 0);
assertEquals(atan2, fastAtan2, 0.0001D);
fastAtan2 = fastMath.atan2(180, 0);
atan2 = (float)Math.atan2(180, 0);
assertEquals(atan2, fastAtan2, 0.0001D);
fastAtan2 = fastMath.atan2(-180, 0);
atan2 = (float)Math.atan2(-180, 0);
assertEquals(atan2, fastAtan2, 0.0001D);
fastAtan2 = fastMath.atan2(0, 180);
atan2 = (float)Math.atan2(0, 180);
assertEquals(atan2, fastAtan2, 0.0001D);
fastAtan2 = fastMath.atan2(0, -180);
atan2 = (float)Math.atan2(0, -180);
assertEquals(atan2, fastAtan2, 0.0001D);
fastAtan2 = fastMath.atan2(0, -360);
atan2 = (float)Math.atan2(0, -360);
assertEquals(atan2, fastAtan2, 0.0001D);
fastAtan2 = fastMath.atan2(0, 360);
atan2 = (float)Math.atan2(0, 360);
assertEquals(atan2, fastAtan2, 0.0001D);
}
@Test
public void testSqrt() {
NucleusFastMathProvider fastMath = new NucleusFastMathProvider();
float fastSqrt = fastMath.sqrt(5);
float sqrt = (float)Math.sqrt(5);
assertEquals(sqrt, fastSqrt, 0.0001D);
fastSqrt = fastMath.sqrt(-5);
sqrt = (float)Math.sqrt(-5);
assertEquals(sqrt, fastSqrt, 0.0001D);
}
}