Abacus/core/src/test/java/org/nwapw/abacus/tests/RangeTests.java

96 lines
3.2 KiB
Java

package org.nwapw.abacus.tests;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import org.nwapw.abacus.Abacus;
import org.nwapw.abacus.config.Configuration;
import org.nwapw.abacus.number.promotion.PromotionFunction;
import org.nwapw.abacus.number.standard.NaiveNumber;
import org.nwapw.abacus.number.range.NumberRange;
import org.nwapw.abacus.number.standard.PreciseNumber;
import org.nwapw.abacus.plugin.standard.StandardPlugin;
public class RangeTests {
private static Abacus abacus = new Abacus(new Configuration( "precise", new String[]{}));
private static PromotionFunction naivePromotion = i -> new NaiveNumber((i.toString()));
private static PromotionFunction precisePromotion = i -> new PreciseNumber((i.toString()));
@BeforeClass
public static void prepareTests() {
abacus.getPluginManager().addInstantiated(new StandardPlugin(abacus.getPluginManager()));
abacus.reload();
}
public static NumberRange naiveRange(String bottom, String top) {
return new NaiveNumber(bottom).rangeTo(new NaiveNumber(top)).with(abacus);
}
@Test
public void testNaiveRange(){
NumberRange range = naiveRange("0", "10");
Assert.assertTrue(range.getStart().toString().startsWith("0"));
Assert.assertTrue(range.getEndInclusive().toString().startsWith("10"));
}
@Test
public void testNaiveRangeBelow() {
NumberRange range = naiveRange("0", "10");
Assert.assertFalse(range.contains(new NaiveNumber("-10")));
}
@Test
public void testNaiveRangeAbove() {
NumberRange range = naiveRange("0", "10");
Assert.assertFalse(range.contains(new NaiveNumber("20")));
}
@Test
public void testNaiveRangeJustWithinBottom() {
NumberRange range = naiveRange("0", "10");
Assert.assertTrue(range.contains(new NaiveNumber("0")));
}
@Test
public void testNaiveRangeJustWithinTop() {
NumberRange range = naiveRange("0", "10");
Assert.assertTrue(range.contains(new NaiveNumber("10")));
}
@Test
public void testNaiveRangeWithin() {
NumberRange range = naiveRange("0", "10");
Assert.assertTrue(range.contains(new NaiveNumber("5")));
}
public static void addTestPromotionPaths() {
StandardPlugin.IMPLEMENTATION_NAIVE.getPromotionPaths().put("precise", precisePromotion);
StandardPlugin.IMPLEMENTATION_PRECISE.getPromotionPaths().put("naive", naivePromotion);
abacus.reload();
}
public static void removeTestPromotionPaths() {
StandardPlugin.IMPLEMENTATION_NAIVE.getPromotionPaths().remove("precise");
StandardPlugin.IMPLEMENTATION_NAIVE.getPromotionPaths().remove("naive");
abacus.reload();
}
@Test
public void testPromotionWithin() {
addTestPromotionPaths();
NumberRange range = naiveRange("0", "10");
Assert.assertTrue(range.contains(new PreciseNumber("5")));
removeTestPromotionPaths();
}
@Test
public void testPromotionOutside(){
addTestPromotionPaths();
NumberRange range = naiveRange("0","10");
Assert.assertFalse(range.contains(new PreciseNumber("20")));
removeTestPromotionPaths();
}
}