/* * Strongback * Copyright 2015, Strongback and individual contributors by the @authors tag. * See the COPYRIGHT.txt in the distribution for a full listing of individual * contributors. * * Licensed under the MIT License; you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://opensource.org/licenses/MIT * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.strongback.util; import static org.fest.assertions.Assertions.assertThat; import org.fest.assertions.Delta; import org.junit.Test; import org.strongback.function.DoubleToDoubleFunction; public class ValuesTest { private static final Delta TOLERANCE = Delta.delta(0.00001); @Test public void shouldMapRangeFromZeroCenteredToPositiveOne() { DoubleToDoubleFunction func = Values.mapRange(-1.0,1.0,0.0,1.0); // Verify minimum range is properly limited ... assertThat(func.applyAsDouble(-1.0)).isEqualTo(0.0, TOLERANCE); assertThat(func.applyAsDouble(-1.01)).isEqualTo(0.0, TOLERANCE); assertThat(func.applyAsDouble(-2.0)).isEqualTo(0.0, TOLERANCE); // Verify maximum range is properly limited ... assertThat(func.applyAsDouble(1.0)).isEqualTo(1.0, TOLERANCE); assertThat(func.applyAsDouble(1.01)).isEqualTo(1.0, TOLERANCE); assertThat(func.applyAsDouble(2.0)).isEqualTo(1.0, TOLERANCE); // Verify mid-range assertThat(func.applyAsDouble(0.0)).isEqualTo(0.5, TOLERANCE); // Verify other values within the range ... assertThat(func.applyAsDouble(-0.75)).isEqualTo(0.125, TOLERANCE); assertThat(func.applyAsDouble(-0.5)).isEqualTo(0.25, TOLERANCE); assertThat(func.applyAsDouble(-0.25)).isEqualTo(0.375, TOLERANCE); assertThat(func.applyAsDouble(0.25)).isEqualTo(0.625, TOLERANCE); assertThat(func.applyAsDouble(0.5)).isEqualTo(0.75, TOLERANCE); assertThat(func.applyAsDouble(0.75)).isEqualTo(0.875, TOLERANCE); } @Test public void shouldMapRangeUsingTranslationOnly() { DoubleToDoubleFunction func = Values.mapRange(0.0,4.0,10.0,14.0); // Verify minimum range is properly limited ... assertThat(func.applyAsDouble(0.0)).isEqualTo(10.0, TOLERANCE); assertThat(func.applyAsDouble(-0.01)).isEqualTo(10.0, TOLERANCE); assertThat(func.applyAsDouble(-2.0)).isEqualTo(10.0, TOLERANCE); // Verify maximum range is properly limited ... assertThat(func.applyAsDouble(4.0)).isEqualTo(14.0, TOLERANCE); assertThat(func.applyAsDouble(4.01)).isEqualTo(14.0, TOLERANCE); assertThat(func.applyAsDouble(6.0)).isEqualTo(14.0, TOLERANCE); // Verify mid-range assertThat(func.applyAsDouble(2.0)).isEqualTo(12.0, TOLERANCE); // Verify other values within the range ... assertThat(func.applyAsDouble(0.5)).isEqualTo(10.5, TOLERANCE); assertThat(func.applyAsDouble(1.0)).isEqualTo(11.0, TOLERANCE); assertThat(func.applyAsDouble(1.5)).isEqualTo(11.5, TOLERANCE); assertThat(func.applyAsDouble(2.0)).isEqualTo(12.0, TOLERANCE); assertThat(func.applyAsDouble(2.5)).isEqualTo(12.5, TOLERANCE); assertThat(func.applyAsDouble(3.0)).isEqualTo(13.0, TOLERANCE); assertThat(func.applyAsDouble(3.5)).isEqualTo(13.5, TOLERANCE); assertThat(func.applyAsDouble(4.0)).isEqualTo(14.0, TOLERANCE); } @Test public void shouldMapRangeUsingScaleOnly() { DoubleToDoubleFunction func = Values.mapRange(1.0,5.0).toRange(1.0,2.0); // Verify minimum range is properly limited ... assertThat(func.applyAsDouble(0.0)).isEqualTo(1.0, TOLERANCE); assertThat(func.applyAsDouble(-0.01)).isEqualTo(1.0, TOLERANCE); assertThat(func.applyAsDouble(-2.0)).isEqualTo(1.0, TOLERANCE); // Verify maximum range is properly limited ... assertThat(func.applyAsDouble(5.0)).isEqualTo(2.0, TOLERANCE); assertThat(func.applyAsDouble(5.01)).isEqualTo(2.0, TOLERANCE); assertThat(func.applyAsDouble(5.0)).isEqualTo(2.0, TOLERANCE); // Verify mid-range assertThat(func.applyAsDouble(3.0)).isEqualTo(1.5, TOLERANCE); // Verify other values within the range ... assertThat(func.applyAsDouble(1.04)).isEqualTo(1.01, TOLERANCE); assertThat(func.applyAsDouble(1.8)).isEqualTo(1.2, TOLERANCE); assertThat(func.applyAsDouble(2.0)).isEqualTo(1.25, TOLERANCE); assertThat(func.applyAsDouble(2.6)).isEqualTo(1.4, TOLERANCE); assertThat(func.applyAsDouble(3.4)).isEqualTo(1.6, TOLERANCE); assertThat(func.applyAsDouble(3.8)).isEqualTo(1.7, TOLERANCE); assertThat(func.applyAsDouble(4.2)).isEqualTo(1.8, TOLERANCE); assertThat(func.applyAsDouble(4.6)).isEqualTo(1.9, TOLERANCE); } }