Percent test

This commit is contained in:
serso
2016-04-27 20:59:31 +02:00
parent 5315679add
commit 408847f985
3 changed files with 109 additions and 105 deletions

View File

@@ -23,7 +23,7 @@
package org.solovyev.android.calculator;
import android.text.SpannableStringBuilder;
import android.text.TextUtils;
import com.google.common.base.Strings;
import jscl.NumeralBase;
import org.solovyev.android.calculator.math.MathType;
@@ -60,7 +60,7 @@ public abstract class BaseNumberBuilder {
}
private boolean spaceBefore(@Nonnull MathType.Result mathTypeResult) {
return numberBuilder == null && TextUtils.isEmpty(mathTypeResult.match.trim());
return numberBuilder == null && Strings.isNullOrEmpty(mathTypeResult.match.trim());
}
private boolean numeralBaseInTheStart(@Nonnull MathType mathType) {

View File

@@ -24,10 +24,12 @@ package org.solovyev.android.calculator;
import jscl.JsclMathEngine;
import jscl.NumeralBase;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
public class ToJsclTextProcessorTest {
private ToJsclTextProcessor preprocessor;
@@ -40,84 +42,84 @@ public class ToJsclTextProcessorTest {
@Test
public void testSpecialCases() throws ParseException {
Assert.assertEquals("3^E10", preprocessor.process("3^E10").toString());
assertEquals("3^E10", preprocessor.process("3^E10").toString());
}
@Test
public void testProcess() throws Exception {
Assert.assertEquals("", preprocessor.process("").toString());
Assert.assertEquals("()", preprocessor.process("[]").toString());
Assert.assertEquals("()*()", preprocessor.process("[][]").toString());
Assert.assertEquals("()*(1)", preprocessor.process("[][1]").toString());
Assert.assertEquals("(0)*(1)", preprocessor.process("[0][1]").toString());
Assert.assertEquals("(0)*(1E)", preprocessor.process("[0][1E]").toString());
Assert.assertEquals("(0)*(1E1)", preprocessor.process("[0][1E1]").toString());
Assert.assertEquals("(0)*(1E-1)", preprocessor.process("[0][1E-1]").toString());
Assert.assertEquals("(0)*(1.E-1)", preprocessor.process("[0][1.E-1]").toString());
Assert.assertEquals("(0)*(2*E-1)", preprocessor.process("[0][2*E-1]").toString());
Assert.assertEquals("(0)*ln(1)*(2*E-1)", preprocessor.process("[0]ln(1)[2*E-1]").toString());
Assert.assertEquals("sin(4)*asin(0.5)*√(2)", preprocessor.process("sin(4)asin(0.5)√(2)").toString());
Assert.assertEquals("sin(4)*cos(5)", preprocessor.process("sin(4)cos(5)").toString());
Assert.assertEquals("π*sin(4)*π*cos(√(5))", preprocessor.process("πsin(4)πcos(√(5))").toString());
Assert.assertEquals("π*sin(4)+π*cos(√(5))", preprocessor.process("πsin(4)+πcos(√(5))").toString());
Assert.assertEquals("π*sin(4)+π*cos(√(5+(√(-1))))", preprocessor.process("πsin(4)+πcos(√(5+i))").toString());
Assert.assertEquals("π*sin(4.01)+π*cos(√(5+(√(-1))))", preprocessor.process("πsin(4.01)+πcos(√(5+i))").toString());
Assert.assertEquals("e^π*sin(4.01)+π*cos(√(5+(√(-1))))", preprocessor.process("e^πsin(4.01)+πcos(√(5+i))").toString());
Assert.assertEquals("e^π*sin(4.01)+π*cos(√(5+(√(-1))))E2", preprocessor.process("e^πsin(4.01)+πcos(√(5+i))E2").toString());
Assert.assertEquals("e^π*sin(4.01)+π*cos(√(5+(√(-1))))E-2", preprocessor.process("e^πsin(4.01)+πcos(√(5+i))E-2").toString());
Assert.assertEquals("E2", preprocessor.process("E2").toString());
Assert.assertEquals("E-2", preprocessor.process("E-2").toString());
Assert.assertEquals("E-1/2", preprocessor.process("E-1/2").toString());
Assert.assertEquals("E-1.2", preprocessor.process("E-1.2").toString());
Assert.assertEquals("E+1.2", preprocessor.process("E+1.2").toString());
Assert.assertEquals("E(-1.2)", preprocessor.process("E(-1.2)").toString());
Assert.assertEquals("EE", preprocessor.process("EE").toString());
assertEquals("", preprocessor.process("").toString());
assertEquals("()", preprocessor.process("[]").toString());
assertEquals("()*()", preprocessor.process("[][]").toString());
assertEquals("()*(1)", preprocessor.process("[][1]").toString());
assertEquals("(0)*(1)", preprocessor.process("[0][1]").toString());
assertEquals("(0)*(1E)", preprocessor.process("[0][1E]").toString());
assertEquals("(0)*(1E1)", preprocessor.process("[0][1E1]").toString());
assertEquals("(0)*(1E-1)", preprocessor.process("[0][1E-1]").toString());
assertEquals("(0)*(1.E-1)", preprocessor.process("[0][1.E-1]").toString());
assertEquals("(0)*(2*E-1)", preprocessor.process("[0][2*E-1]").toString());
assertEquals("(0)*ln(1)*(2*E-1)", preprocessor.process("[0]ln(1)[2*E-1]").toString());
assertEquals("sin(4)*asin(0.5)*√(2)", preprocessor.process("sin(4)asin(0.5)√(2)").toString());
assertEquals("sin(4)*cos(5)", preprocessor.process("sin(4)cos(5)").toString());
assertEquals("π*sin(4)*π*cos(√(5))", preprocessor.process("πsin(4)πcos(√(5))").toString());
assertEquals("π*sin(4)+π*cos(√(5))", preprocessor.process("πsin(4)+πcos(√(5))").toString());
assertEquals("π*sin(4)+π*cos(√(5+(√(-1))))", preprocessor.process("πsin(4)+πcos(√(5+i))").toString());
assertEquals("π*sin(4.01)+π*cos(√(5+(√(-1))))", preprocessor.process("πsin(4.01)+πcos(√(5+i))").toString());
assertEquals("e^π*sin(4.01)+π*cos(√(5+(√(-1))))", preprocessor.process("e^πsin(4.01)+πcos(√(5+i))").toString());
assertEquals("e^π*sin(4.01)+π*cos(√(5+(√(-1))))E2", preprocessor.process("e^πsin(4.01)+πcos(√(5+i))E2").toString());
assertEquals("e^π*sin(4.01)+π*cos(√(5+(√(-1))))E-2", preprocessor.process("e^πsin(4.01)+πcos(√(5+i))E-2").toString());
assertEquals("E2", preprocessor.process("E2").toString());
assertEquals("E-2", preprocessor.process("E-2").toString());
assertEquals("E-1/2", preprocessor.process("E-1/2").toString());
assertEquals("E-1.2", preprocessor.process("E-1.2").toString());
assertEquals("E+1.2", preprocessor.process("E+1.2").toString());
assertEquals("E(-1.2)", preprocessor.process("E(-1.2)").toString());
assertEquals("EE", preprocessor.process("EE").toString());
try {
preprocessor.engine.getMathEngine().setNumeralBase(NumeralBase.hex);
Assert.assertEquals("22F*exp(F)", preprocessor.process("22Fexp(F)").toString());
assertEquals("22F*exp(F)", preprocessor.process("22Fexp(F)").toString());
} finally {
preprocessor.engine.getMathEngine().setNumeralBase(NumeralBase.dec);
}
Assert.assertEquals("0x:ABCDEF", preprocessor.process("0x:ABCDEF").toString());
Assert.assertEquals("0x:ABCDEF", preprocessor.process("0x:A BC DEF").toString());
Assert.assertEquals("0x:ABCDEF", preprocessor.process("0x:A BC DEF").toString());
Assert.assertEquals("0x:ABCDEF*0*x", preprocessor.process("0x:A BC DEF*0x").toString());
Assert.assertEquals("0x:ABCDEF001*0*x", preprocessor.process("0x:A BC DEF001*0x").toString());
Assert.assertEquals("0x:ABCDEF001*0*c", preprocessor.process("0x:A BC DEF001*0c").toString());
Assert.assertEquals("0x:ABCDEF001*c", preprocessor.process("0x:A BC DEF001*c").toString());
Assert.assertEquals("0b:1101", preprocessor.process("0b:1101").toString());
Assert.assertEquals("0x:1C", preprocessor.process("0x:1C").toString());
Assert.assertEquals("0x:1C", preprocessor.process(" 0x:1C").toString());
Assert.assertEquals("0x:1C*0x:1C*sin(0x:1C)-0b:1101+√(0x:1C)+exp(0x:1C)", preprocessor.process("0x:1C*0x:1C * sin(0x:1C) - 0b:1101 + √(0x:1C) + exp ( 0x:1C)").toString());
Assert.assertEquals("0x:1C*0x:1C*sin(0x:1C)-0b:1101+√(0x:1C)+exp(0x:1C)", preprocessor.process("0x:1C*0x:1C * sin(0x:1C) - 0b:1101 + √(0x:1C) + exp ( 0x:1C)").toString());
assertEquals("0x:ABCDEF", preprocessor.process("0x:ABCDEF").toString());
assertEquals("0x:ABCDEF", preprocessor.process("0x:A BC DEF").toString());
assertEquals("0x:ABCDEF", preprocessor.process("0x:A BC DEF").toString());
assertEquals("0x:ABCDEF*0*x", preprocessor.process("0x:A BC DEF*0x").toString());
assertEquals("0x:ABCDEF001*0*x", preprocessor.process("0x:A BC DEF001*0x").toString());
assertEquals("0x:ABCDEF001*0*c", preprocessor.process("0x:A BC DEF001*0c").toString());
assertEquals("0x:ABCDEF001*c", preprocessor.process("0x:A BC DEF001*c").toString());
assertEquals("0b:1101", preprocessor.process("0b:1101").toString());
assertEquals("0x:1C", preprocessor.process("0x:1C").toString());
assertEquals("0x:1C", preprocessor.process(" 0x:1C").toString());
assertEquals("0x:1C*0x:1C*sin(0x:1C)-0b:1101+√(0x:1C)+exp(0x:1C)", preprocessor.process("0x:1C*0x:1C * sin(0x:1C) - 0b:1101 + √(0x:1C) + exp ( 0x:1C)").toString());
assertEquals("0x:1C*0x:1C*sin(0x:1C)-0b:1101+√(0x:1C)+exp(0x:1C)", preprocessor.process("0x:1C*0x:1C * sin(0x:1C) - 0b:1101 + √(0x:1C) + exp ( 0x:1C)").toString());
try {
preprocessor.process("ln()");
Assert.fail();
fail();
} catch (ParseException ignored) {
}
try {
preprocessor.process("ln()ln()");
Assert.fail();
fail();
} catch (ParseException ignored) {
}
try {
preprocessor.process("eln()eln()ln()ln()ln()e");
Assert.fail();
fail();
} catch (ParseException ignored) {
}
try {
preprocessor.process("ln(ln(ln(ln(ln(ln(ln(ln(ln(ln(ln(ln(ln(ln(ln()))))))))))))))");
Assert.fail();
fail();
} catch (ParseException ignored) {
}
try {
preprocessor.process("cos(cos(cos(cos(acos(acos(acos(acos(acos(acos(acos(acos(cos(cos(cos(cos(cosh(acos(cos(cos(cos(cos(cos(acos(acos(acos(acos(acos(acos(acos(acos(cos(cos(cos(cos(cosh(acos(cos())))))))))))))))))))))))))))))))))))))");
Assert.fail();
fail();
} catch (ParseException ignored) {
}
}
@@ -131,12 +133,17 @@ public class ToJsclTextProcessorTest {
final NumeralBase defaultNumeralBase = JsclMathEngine.getInstance().getNumeralBase();
try {
JsclMathEngine.getInstance().setNumeralBase(NumeralBase.bin);
Assert.assertEquals("101", JsclMathEngine.getInstance().evaluate("10+11"));
assertEquals("101", JsclMathEngine.getInstance().evaluate("10+11"));
JsclMathEngine.getInstance().setNumeralBase(NumeralBase.hex);
Assert.assertEquals("56CE+CAD", preprocessor.process("56CE+CAD").getValue());
assertEquals("56CE+CAD", preprocessor.process("56CE+CAD").getValue());
} finally {
JsclMathEngine.getInstance().setNumeralBase(defaultNumeralBase);
}
}
@Test
public void testPercents() throws Exception {
assertEquals("100+100%*100", preprocessor.process("100+100%100").toString());
}
}