package jscl;
import org.junit.Assert;
import org.junit.Test;
import jscl.math.function.Constant;
import jscl.math.function.ExtendedConstant;
import jscl.math.function.IConstant;
import jscl.text.ParseException;
import static org.junit.Assert.assertEquals;
public class NumeralBaseTest {
@Test
public void testEvaluation() throws Exception {
MathEngine me = JsclMathEngine.getInstance();
assertEquals("3", me.evaluate("0b:1+0b:10"));
assertEquals("5", me.evaluate("0b:1+0b:100"));
assertEquals("8", me.evaluate("0b:1+0b:100+(0b:1+0b:10)"));
assertEquals("18", me.evaluate("0b:1+0b:100+(0b:1+0b:10)+10"));
assertEquals("18.5", me.evaluate("0b:1+0b:100+(0b:1+0b:10)+10.5"));
try {
me.evaluate("0b:1+0b:100.+(0b:1+0b:10)+10.5");
Assert.fail();
} catch (ParseException e) {
}
try {
me.evaluate("0b:1+0b:100E-2+(0b:1+0b:10)+10.5");
Assert.fail();
} catch (ParseException e) {
}
assertEquals("2748", me.evaluate("0x:ABC"));
try {
me.evaluate("0x:");
Assert.fail();
} catch (ParseException e) {
}
assertEquals("0", me.evaluate("0x:0"));
IConstant constant = null;
try {
final ExtendedConstant.Builder a = new ExtendedConstant.Builder(new Constant("a"), 2d);
constant = me.getConstantsRegistry().addOrUpdate(a.create());
assertEquals("2748", me.evaluate("0x:ABC"));
assertEquals("5496", me.evaluate("0x:ABC*a"));
assertEquals("27480", me.evaluate("0x:ABC*0x:A"));
} finally {
if (constant != null) {
final ExtendedConstant.Builder a = new ExtendedConstant.Builder(new Constant("a"), (String) null);
me.getConstantsRegistry().addOrUpdate(a.create());
}
}
}
@Test
public void testNumeralBases() throws Exception {
MathEngine me = JsclMathEngine.getInstance();
final NumeralBase defaultNumeralBase = me.getNumeralBase();
try {
me.setNumeralBase(NumeralBase.bin);
assertEquals("∞", me.evaluate("∞"));
assertEquals("-1011010+110101111.100001101011001*i", me.evaluate("asin(-1110100101)"));
assertEquals("11", me.evaluate("0b:1+0b:10"));
assertEquals("10", me.evaluate("0d:2"));
assertEquals("11", me.evaluate("0d:3"));
assertEquals("100", me.evaluate("0d:4"));
assertEquals("11111111", me.evaluate("0d:255"));
assertEquals("11", me.evaluate("1+10"));
assertEquals("-1", me.evaluate("1-10"));
assertEquals("11-i", me.evaluate("1+i+10-10*i"));
assertEquals("11111110", me.evaluate("111001+11000101"));
assertEquals("1101100100101111", me.evaluate("11011001001011110/10"));
assertEquals("1001000011001010", me.evaluate("11011001001011110/11"));
assertEquals("0.1010101010101011", me.evaluate("10/11"));
me.setNumeralBase(NumeralBase.hex);
assertEquals("637B", me.evaluate("56CE+CAD"));
assertEquals("637B", me.simplify("56CE+CAD"));
} finally {
me.setNumeralBase(defaultNumeralBase);
}
}
}