// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.base;
import static org.chromium.base.MathUtils.EPSILON;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.chromium.base.test.BaseRobolectricTestRunner;
/** Unit tests for {@link org.chromium.base.MathUtils}. */
@RunWith(BaseRobolectricTestRunner.class)
public class MathUtilsTest {
private static final String ROUND_FAILURE =
"Failure to correctly round value to two decimal places.";
private static final String CLAMP_FAILURE = "Failure to correctly clamp value to range.";
private static final String MODULO_FAILURE =
"Failure to correctly return a positive modulo value.";
private static final String SMOOTH_STEP_FAILURE = "Failure to smooth step between 0 and 1.";
@Test
public void testRoundTwoDecimalPlaces() {
Assert.assertEquals(ROUND_FAILURE, 2.12, MathUtils.roundTwoDecimalPlaces(2.123), EPSILON);
Assert.assertEquals(ROUND_FAILURE, 2.13, MathUtils.roundTwoDecimalPlaces(2.127), EPSILON);
Assert.assertEquals(ROUND_FAILURE, -2.12, MathUtils.roundTwoDecimalPlaces(-2.123), EPSILON);
Assert.assertEquals(ROUND_FAILURE, -2.13, MathUtils.roundTwoDecimalPlaces(-2.127), EPSILON);
}
@Test
public void testClampInt() {
int min = 1;
int max = 9;
Assert.assertEquals(CLAMP_FAILURE, 4, MathUtils.clamp(4, min, max));
Assert.assertEquals(CLAMP_FAILURE, 4, MathUtils.clamp(4, max, min));
Assert.assertEquals(CLAMP_FAILURE, 1, MathUtils.clamp(-1, min, max));
Assert.assertEquals(CLAMP_FAILURE, 1, MathUtils.clamp(0, max, min));
Assert.assertEquals(CLAMP_FAILURE, 9, MathUtils.clamp(10, min, max));
Assert.assertEquals(CLAMP_FAILURE, 9, MathUtils.clamp(30, max, min));
}
@Test
public void testClampLong() {
long min = 1L;
long max = 9L;
Assert.assertEquals(CLAMP_FAILURE, 4, MathUtils.clamp(4, min, max), EPSILON);
Assert.assertEquals(CLAMP_FAILURE, 4, MathUtils.clamp(4, max, min), EPSILON);
Assert.assertEquals(CLAMP_FAILURE, 1, MathUtils.clamp(-1, min, max), EPSILON);
Assert.assertEquals(CLAMP_FAILURE, 1, MathUtils.clamp(0, max, min), EPSILON);
Assert.assertEquals(CLAMP_FAILURE, 9, MathUtils.clamp(10, min, max), EPSILON);
Assert.assertEquals(CLAMP_FAILURE, 9, MathUtils.clamp(30, max, min), EPSILON);
}
@Test
public void testClampFloat() {
float min = 1.0f;
float max = 9.0f;
Assert.assertEquals(CLAMP_FAILURE, 4.8f, MathUtils.clamp(4.8f, min, max), EPSILON);
Assert.assertEquals(CLAMP_FAILURE, 4.8f, MathUtils.clamp(4.8f, max, min), EPSILON);
Assert.assertEquals(CLAMP_FAILURE, 1f, MathUtils.clamp(-1.7f, min, max), EPSILON);
Assert.assertEquals(CLAMP_FAILURE, 1f, MathUtils.clamp(0.003f, max, min), EPSILON);
Assert.assertEquals(CLAMP_FAILURE, 9f, MathUtils.clamp(10.9f, min, max), EPSILON);
Assert.assertEquals(CLAMP_FAILURE, 9f, MathUtils.clamp(30.1f, max, min), EPSILON);
}
@Test
public void testPositiveModulo() {
Assert.assertEquals(MODULO_FAILURE, 1, MathUtils.positiveModulo(3, 2));
Assert.assertEquals(MODULO_FAILURE, 1, MathUtils.positiveModulo(3, -2));
Assert.assertEquals(MODULO_FAILURE, 1, MathUtils.positiveModulo(-3, 2));
}
@Test
public void testSmoothStep() {
Assert.assertEquals(SMOOTH_STEP_FAILURE, 0f, MathUtils.smoothstep(0f), EPSILON);
Assert.assertEquals(SMOOTH_STEP_FAILURE, 1f, MathUtils.smoothstep(1f), EPSILON);
Assert.assertEquals(SMOOTH_STEP_FAILURE, 0.648f, MathUtils.smoothstep(0.6f), EPSILON);
Assert.assertEquals(SMOOTH_STEP_FAILURE, 0.216f, MathUtils.smoothstep(0.3f), EPSILON);
}
}