Skip to content

Commit 49ab48a

Browse files
committed
Fix tests
1 parent 4e3527c commit 49ab48a

File tree

13 files changed

+95
-119
lines changed

13 files changed

+95
-119
lines changed

jscl/src/main/java/jscl/JsclMathEngine.java

Lines changed: 9 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,5 @@
11
package jscl;
22

3-
import org.solovyev.common.NumberFormatter;
4-
import org.solovyev.common.math.MathRegistry;
5-
import org.solovyev.common.msg.MessageRegistry;
6-
import org.solovyev.common.msg.Messages;
7-
8-
import java.math.BigDecimal;
9-
import java.math.BigInteger;
10-
import java.util.List;
11-
12-
import javax.annotation.Nonnull;
13-
import javax.annotation.Nullable;
14-
153
import jscl.math.Expression;
164
import jscl.math.Generic;
175
import jscl.math.NotIntegerException;
@@ -27,6 +15,10 @@
2715
import jscl.math.operator.Rand;
2816
import jscl.math.operator.matrix.OperatorsRegistry;
2917
import jscl.text.ParseException;
18+
import org.solovyev.common.NumberFormatter;
19+
import org.solovyev.common.math.MathRegistry;
20+
import org.solovyev.common.msg.MessageRegistry;
21+
import org.solovyev.common.msg.Messages;
3022

3123
import static midpcalc.Real.NumberFormat.FSE_ENG;
3224
import static midpcalc.Real.NumberFormat.FSE_NONE;
@@ -177,7 +169,7 @@ public String format(double value, @Nonnull NumeralBase nb) {
177169

178170
private NumberFormatter prepareNumberFormatter(@Nonnull NumeralBase nb) {
179171
final NumberFormatter nf = numberFormatter.get();
180-
nf.setGroupingSeparator(hasGroupingSeparator() ? getGroupingSeparatorChar(nb) : NumberFormatter.NO_GROUPING);
172+
nf.setGroupingSeparator(hasGroupingSeparator() ? getGroupingSeparator(nb) : NumberFormatter.NO_GROUPING);
181173
nf.setPrecision(precision);
182174
switch (notation) {
183175
case FSE_ENG:
@@ -263,7 +255,7 @@ public void setMessageRegistry(@Nonnull MessageRegistry messageRegistry) {
263255
@Nonnull
264256
@Override
265257
public String format(@Nonnull String value, @Nonnull NumeralBase nb) {
266-
if (!useGroupingSeparator) {
258+
if (!hasGroupingSeparator()) {
267259
return value;
268260
}
269261
final int dot = value.indexOf('.');
@@ -281,8 +273,8 @@ public String format(@Nonnull String value, @Nonnull NumeralBase nb) {
281273

282274
@Nonnull
283275
public String insertSeparators(@Nonnull String value, @Nonnull NumeralBase nb) {
284-
final String separator = getGroupingSeparator(nb);
285-
final StringBuilder result = new StringBuilder(value.length() + nb.getGroupingSize() * separator.length());
276+
final char separator = getGroupingSeparator(nb);
277+
final StringBuilder result = new StringBuilder(value.length() + nb.getGroupingSize());
286278
for (int i = value.length() - 1; i >= 0; i--) {
287279
result.append(value.charAt(i));
288280
if (i != 0 && (value.length() - i) % nb.getGroupingSize() == 0) {
@@ -296,19 +288,10 @@ private boolean hasGroupingSeparator() {
296288
return groupingSeparator != NumberFormatter.NO_GROUPING;
297289
}
298290

299-
@Nonnull
300-
private String getGroupingSeparator(@Nonnull NumeralBase nb) {
301-
return nb == NumeralBase.dec ? String.valueOf(groupingSeparator) : " ";
302-
}
303-
304-
private char getGroupingSeparatorChar(@Nonnull NumeralBase nb) {
291+
private char getGroupingSeparator(@Nonnull NumeralBase nb) {
305292
return nb == NumeralBase.dec ? groupingSeparator : ' ';
306293
}
307294

308-
public void setRoundResult(boolean roundResult) {
309-
this.roundResult = roundResult;
310-
}
311-
312295
public void setPrecision(int precision) {
313296
this.precision = precision;
314297
}

jscl/src/main/java/org/solovyev/common/NumberFormatter.java

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,13 @@
11
package org.solovyev.common;
22

3-
import java.math.BigDecimal;
4-
import java.math.BigInteger;
3+
import midpcalc.Real;
54

65
import javax.annotation.Nonnull;
7-
8-
import midpcalc.Real;
6+
import java.math.BigDecimal;
7+
import java.math.BigInteger;
98

109
import static java.lang.Math.pow;
11-
import static midpcalc.Real.NumberFormat.FSE_ENG;
12-
import static midpcalc.Real.NumberFormat.FSE_FIX;
13-
import static midpcalc.Real.NumberFormat.FSE_NONE;
14-
import static midpcalc.Real.NumberFormat.FSE_SCI;
10+
import static midpcalc.Real.NumberFormat.*;
1511

1612
public class NumberFormatter {
1713

jscl/src/test/java/jscl/JsclMathEngineTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ public void testFormat() throws Exception {
9090

9191
@Test
9292
public void testPiComputation() throws Exception {
93-
assertEquals("-1+0.0000000000000001*i", me.evaluate("exp(√(-1)*Π)"));
93+
assertEquals("-1+0*i", me.evaluate("exp(√(-1)*Π)"));
9494
}
9595

9696
@Test

jscl/src/test/java/jscl/NumeralBaseTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ public void testNumeralBases() throws Exception {
7777
assertEquals("11111110", me.evaluate("111001+11000101"));
7878
assertEquals("1101100100101111", me.evaluate("11011001001011110/10"));
7979
assertEquals("1001000011001010", me.evaluate("11011001001011110/11"));
80-
assertEquals("0.1010101010101011", me.evaluate("10/11"));
80+
assertEquals("0.101010101010101", me.evaluate("10/11"));
8181

8282
me.setNumeralBase(NumeralBase.hex);
8383
assertEquals("637B", me.evaluate("56CE+CAD"));

jscl/src/test/java/jscl/math/ExpressionTest.java

Lines changed: 49 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,19 @@
11
package jscl.math;
22

3+
import jscl.AngleUnit;
4+
import jscl.JsclMathEngine;
5+
import jscl.MathEngine;
6+
import jscl.NumeralBase;
7+
import jscl.math.function.Constant;
8+
import jscl.math.function.ExtendedConstant;
9+
import jscl.math.function.IConstant;
10+
import jscl.text.ParseException;
11+
import midpcalc.Real;
312
import org.junit.Test;
413
import org.solovyev.common.NumberFormatter;
514

15+
import javax.annotation.Nonnull;
16+
import javax.annotation.Nullable;
617
import java.io.BufferedReader;
718
import java.io.IOException;
819
import java.io.InputStreamReader;
@@ -11,22 +22,7 @@
1122
import java.net.URLConnection;
1223
import java.util.Set;
1324

14-
import javax.annotation.Nonnull;
15-
import javax.annotation.Nullable;
16-
17-
import jscl.AngleUnit;
18-
import jscl.JsclMathEngine;
19-
import jscl.MathEngine;
20-
import jscl.NumeralBase;
21-
import jscl.math.function.Constant;
22-
import jscl.math.function.ExtendedConstant;
23-
import jscl.math.function.IConstant;
24-
import jscl.text.ParseException;
25-
import midpcalc.Real;
26-
27-
import static org.junit.Assert.assertEquals;
28-
import static org.junit.Assert.assertTrue;
29-
import static org.junit.Assert.fail;
25+
import static org.junit.Assert.*;
3026

3127
public class ExpressionTest {
3228

@@ -145,7 +141,7 @@ public void testConstants() throws Exception {
145141
@Test
146142
public void testExpressions() throws Exception {
147143
assertEquals("3", Expression.valueOf("3").numeric().toString());
148-
assertEquals("0.6931471805599453", Expression.valueOf("ln(2)").numeric().toString());
144+
assertEquals("0.693147180559945", Expression.valueOf("ln(2)").numeric().toString());
149145
assertEquals("1", Expression.valueOf("lg(10)").numeric().toString());
150146
assertEquals("0", Expression.valueOf("eq(0, 1)").numeric().toString());
151147
assertEquals("1", Expression.valueOf("eq(1, 1)").numeric().toString());
@@ -168,7 +164,7 @@ public void testExpressions() throws Exception {
168164
final AngleUnit angleUnits = me.getAngleUnits();
169165
try {
170166
me.setAngleUnits(AngleUnit.rad);
171-
assertEquals("-0.9055783620066238", Expression.valueOf("sin(4!)").numeric().toString());
167+
assertEquals("-0.905578362006624", Expression.valueOf("sin(4!)").numeric().toString());
172168
} finally {
173169
me.setAngleUnits(angleUnits);
174170
}
@@ -180,7 +176,7 @@ public void testExpressions() throws Exception {
180176
} catch (NotIntegerException e) {
181177

182178
}
183-
assertEquals("0.5235987755982988", Expression.valueOf("3.141592653589793/3!").numeric().toString());
179+
assertEquals("0.523598775598299", Expression.valueOf("3.141592653589793/3!").numeric().toString());
184180
try {
185181
assertEquals("3.141592653589793/3.141592653589793!", Expression.valueOf("3.141592653589793/3.141592653589793!").numeric().toString());
186182
fail();
@@ -212,14 +208,14 @@ public void testExpressions() throws Exception {
212208
final AngleUnit defaultAngleUnits = me.getAngleUnits();
213209
try {
214210
me.setAngleUnits(AngleUnit.rad);
215-
assertEquals("0.0174532925199433", Expression.valueOf("1°").numeric().toString());
216-
assertEquals("0.0349065850398866", Expression.valueOf("2°").numeric().toString());
217-
assertEquals("0.0523598775598299", Expression.valueOf("3°").numeric().toString());
218-
assertEquals("0.2617993877991495", Expression.valueOf("3°*5").numeric().toString());
219-
assertEquals("0.0027415567780804", Expression.valueOf("3°^2").numeric().toString());
220-
assertEquals("0.0109662271123215", Expression.valueOf("3!°^2").numeric().toString());
221-
assertEquals("0.0009138522593601", Expression.valueOf("3°°").numeric().toString());
222-
assertEquals("0.0872664625997165", Expression.valueOf("5°").numeric().toString());
211+
assertEquals("0.017453292519943", Expression.valueOf("1°").numeric().toString());
212+
assertEquals("0.034906585039887", Expression.valueOf("2°").numeric().toString());
213+
assertEquals("0.05235987755983", Expression.valueOf("3°").numeric().toString());
214+
assertEquals("0.261799387799149", Expression.valueOf("3°*5").numeric().toString());
215+
assertEquals("0.00274155677808", Expression.valueOf("3°^2").numeric().toString());
216+
assertEquals("0.010966227112322", Expression.valueOf("3!°^2").numeric().toString());
217+
assertEquals("0.00091385225936", Expression.valueOf("3°°").numeric().toString());
218+
assertEquals("0.087266462599716", Expression.valueOf("5°").numeric().toString());
223219
assertEquals("2.05235987755983", Expression.valueOf("2+3°").numeric().toString());
224220
} finally {
225221
me.setAngleUnits(defaultAngleUnits);
@@ -377,7 +373,7 @@ public void testExpressions() throws Exception {
377373

378374
try {
379375
me.setAngleUnits(AngleUnit.rad);
380-
assertEquals("0.6931471805599453+Π*i", Expression.valueOf("ln(-2)").numeric().toString());
376+
assertEquals("0.693147180559945+Π*i", Expression.valueOf("ln(-2)").numeric().toString());
381377
} finally {
382378
me.setAngleUnits(AngleUnit.deg);
383379
}
@@ -387,7 +383,7 @@ public void testExpressions() throws Exception {
387383
assertEquals("sin(n!)", Expression.valueOf("sin(n!)").expand().toString());
388384
assertEquals("sin(n°)", Expression.valueOf("sin(n°)").expand().toString());
389385
assertEquals("sin(30°)", Expression.valueOf("sin(30°)").expand().toString());
390-
assertEquals("0.4999999999999999", Expression.valueOf("sin(30°)").expand().numeric().toString());
386+
assertEquals("0.5", Expression.valueOf("sin(30°)").expand().numeric().toString());
391387
assertEquals("sin(2!)", Expression.valueOf("sin(2!)").expand().toString());
392388

393389
assertEquals("12", Expression.valueOf("3*(3+1)").expand().toString());
@@ -408,7 +404,7 @@ public void testExpressions() throws Exception {
408404
} catch (ParseException e) {
409405
}
410406

411-
assertEquals("0.4999999999999999", Expression.valueOf("sin(30°)").numeric().toString());
407+
assertEquals("0.5", Expression.valueOf("sin(30°)").numeric().toString());
412408
assertEquals("π", Expression.valueOf("√(π)^2").simplify().toString());
413409
assertEquals("π", Expression.valueOf("√(π^2)").simplify().toString());
414410
assertEquals("π^2", Expression.valueOf("√(π^2*π^2)").simplify().toString());
@@ -420,7 +416,7 @@ public void testExpressions() throws Exception {
420416
// in deg mode π=180 and factorial of 180 is calculating
421417
assertEquals("0", Expression.valueOf("Π/Π!").numeric().toString());
422418

423-
assertEquals("0.0000000000000001*i", Expression.valueOf("exp((Π*i))+1").numeric().toString());
419+
assertEquals("0*i", Expression.valueOf("exp((Π*i))+1").numeric().toString());
424420
assertEquals("20*x^3", Expression.valueOf("∂(5*x^4, x)").expand().simplify().toString());
425421
assertEquals("25*x", Expression.valueOf("5*x*5").expand().simplify().toString());
426422
assertEquals("20*x", Expression.valueOf("5*x*4").expand().simplify().toString());
@@ -442,10 +438,10 @@ public void testExpressions() throws Exception {
442438
try {
443439
me.setNumeralBase(NumeralBase.hex);
444440

445-
assertEquals("0.EEEEEEEEEEEEEC88", me.evaluate("0x:E/0x:F"));
441+
assertEquals("0.EEEEEEEEEEEEEC9", me.evaluate("0x:E/0x:F"));
446442
assertEquals("E/F", me.simplify("0x:E/0x:F"));
447443

448-
assertEquals("0.EEEEEEEEEEEEEC88", me.evaluate("E/F"));
444+
assertEquals("0.EEEEEEEEEEEEEC9", me.evaluate("E/F"));
449445
assertEquals("E/F", me.simplify("E/F"));
450446

451447
} finally {
@@ -472,9 +468,9 @@ public void testExpressions() throws Exception {
472468

473469
assertEquals("-1.471127674303735", me.evaluate("atan(-10)"));
474470
assertEquals("-1.10714871779409", me.evaluate("atan(-2)"));
475-
assertEquals("-0.7853981633974483", me.evaluate("atan(-1)"));
471+
assertEquals("-0.785398163397448", me.evaluate("atan(-1)"));
476472
assertEquals("0", me.evaluate("atan(0)"));
477-
assertEquals("0.7853981633974483", me.evaluate("atan(1)"));
473+
assertEquals("0.785398163397448", me.evaluate("atan(1)"));
478474
assertEquals("1.10714871779409", me.evaluate("atan(2)"));
479475
assertEquals("1.471127674303735", me.evaluate("atan(10)"));
480476

@@ -487,9 +483,9 @@ public void testExpressions() throws Exception {
487483
assertEquals("1.570796326794897", me.evaluate("acot(0)"));
488484
assertEquals("2.677945044588987", me.evaluate("acot(-2)"));
489485
assertEquals("2.356194490192345", me.evaluate("acot(-1)"));
490-
assertEquals("0.7853981633974483", me.evaluate("acot(1)"));
491-
assertEquals("0.4636476090008062", me.evaluate("acot(2)"));
492-
assertEquals("0.0996686524911619", me.evaluate("acot(10)"));
486+
assertEquals("0.785398163397448", me.evaluate("acot(1)"));
487+
assertEquals("0.463647609000806", me.evaluate("acot(2)"));
488+
assertEquals("0.099668652491162", me.evaluate("acot(10)"));
493489

494490
assertEquals("Π", me.evaluate("π"));
495491
assertEquals("Π", me.evaluate("3.14159265358979323846"));
@@ -638,25 +634,25 @@ public void testAngleUnits() throws Exception {
638634
try {
639635
mathEngine.setAngleUnits(AngleUnit.rad);
640636
testSinEqualsToSinh(mathEngine, 0d);
641-
testSinEqualsToSinh(mathEngine, 1d, "0.8414709848078965");
642-
testSinEqualsToSinh(mathEngine, 3d, "0.1411200080598672");
637+
testSinEqualsToSinh(mathEngine, 1d, "0.841470984807897");
638+
testSinEqualsToSinh(mathEngine, 3d, "0.141120008059867");
643639
testSinEqualsToSinh(mathEngine, 6d);
644-
testSinEqualsToSinh(mathEngine, -1d, "-0.8414709848078965");
645-
testSinEqualsToSinh(mathEngine, -3.3d, "0.1577456941432482");
646-
testSinEqualsToSinh(mathEngine, -232.2d, "0.2742948637368958");
640+
testSinEqualsToSinh(mathEngine, -1d, "-0.841470984807897");
641+
testSinEqualsToSinh(mathEngine, -3.3d, "0.157745694143248");
642+
testSinEqualsToSinh(mathEngine, -232.2d, "0.274294863736896");
647643
} finally {
648644
mathEngine.setAngleUnits(defaultAngleUnits);
649645
}
650646

651647
try {
652648
mathEngine.setAngleUnits(AngleUnit.deg);
653649
testSinEqualsToSinh(mathEngine, 0d);
654-
testSinEqualsToSinh(mathEngine, 1d, "0.0174524064372835");
655-
testSinEqualsToSinh(mathEngine, 3d, "0.0523359562429438");
656-
testSinEqualsToSinh(mathEngine, 6d, "0.1045284632676535");
657-
testSinEqualsToSinh(mathEngine, -1d, "-0.0174524064372835");
658-
testSinEqualsToSinh(mathEngine, -3.3d, "-0.0575640269595673");
659-
testSinEqualsToSinh(mathEngine, -232.2d, "0.7901550123756904");
650+
testSinEqualsToSinh(mathEngine, 1d, "0.017452406437284");
651+
testSinEqualsToSinh(mathEngine, 3d, "0.052335956242944");
652+
testSinEqualsToSinh(mathEngine, 6d, "0.104528463267653");
653+
testSinEqualsToSinh(mathEngine, -1d, "-0.017452406437284");
654+
testSinEqualsToSinh(mathEngine, -3.3d, "-0.057564026959567");
655+
testSinEqualsToSinh(mathEngine, -232.2d, "0.79015501237569");
660656
assertEquals("Π/2", mathEngine.simplify("Π/2"));
661657
} finally {
662658
mathEngine.setAngleUnits(defaultAngleUnits);
@@ -732,7 +728,7 @@ public void testDerivations() throws Exception {
732728
final AngleUnit defaultAngleUnits = JsclMathEngine.getInstance().getAngleUnits();
733729
try {
734730
JsclMathEngine.getInstance().setAngleUnits(AngleUnit.rad);
735-
assertEquals("-0.9092974268256817", Expression.valueOf("∂(cos(t),t,2)").numeric().toString());
731+
assertEquals("-0.909297426825682", Expression.valueOf("∂(cos(t),t,2)").numeric().toString());
736732
assertEquals("∂(cos(t), t, 2, 1)", Expression.valueOf("∂(cos(t),t,2)").simplify().toString());
737733
assertEquals("-2.234741690198506", Expression.valueOf("∂(t*cos(t),t,2)").numeric().toString());
738734
assertEquals("-4.469483380397012", Expression.valueOf("2*∂(t*cos(t),t,2)").numeric().toString());
@@ -760,7 +756,7 @@ public void testSum() throws Exception {
760756
assertEquals(Expression.valueOf("3").numeric().toString(), Expression.valueOf("Σ(n°,n,1,2)").expand().numeric().toString());
761757
assertEquals("200", Expression.valueOf("Σ(n°/n°,n,1,200)").expand().numeric().toString());
762758
assertEquals("-sin(1)-sin(2)", Expression.valueOf("Σ(∂(cos(t),t,n),n,1,2)").expand().toString());
763-
assertEquals("-0.0523519031397845", Expression.valueOf("Σ(∂(cos(t),t,n),n,1,2)").expand().numeric().toString());
759+
assertEquals("-0.052351903139784", Expression.valueOf("Σ(∂(cos(t),t,n),n,1,2)").expand().numeric().toString());
764760
}
765761

766762
@Test
@@ -819,10 +815,10 @@ public void testFormat() throws Exception {
819815
assertEquals("1.222E-6", Expression.valueOf("1222/(10^9)").numeric().toString());
820816

821817
me.setNotation(Real.NumberFormat.FSE_NONE);
822-
assertEquals("0.3333333333333333", Expression.valueOf("1/3").numeric().toString());
818+
assertEquals("0.333333333333333", Expression.valueOf("1/3").numeric().toString());
823819

824820
me.setNotation(Real.NumberFormat.FSE_SCI);
825-
assertEquals("0.3333333333333333", Expression.valueOf("1/3").numeric().toString());
821+
assertEquals("0.333333333333333", Expression.valueOf("1/3").numeric().toString());
826822

827823
me.setPrecision(10);
828824
assertEquals("0.3333333333", Expression.valueOf("1/3").numeric().toString());

jscl/src/test/java/jscl/math/function/CustomFunctionTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public void testLog() throws Exception {
3737
assertEquals("∞", Expression.valueOf("log(1, 10)").numeric().toString());
3838
assertEquals("3.321928094887363", Expression.valueOf("log(2, 10)").numeric().toString());
3939
assertEquals("1.430676558073393", Expression.valueOf("log(5, 10)").numeric().toString());
40-
assertEquals("0.9602525677891275", Expression.valueOf("log(11, 10)").numeric().toString());
40+
assertEquals("0.960252567789128", Expression.valueOf("log(11, 10)").numeric().toString());
4141
assertEquals("1/b*1/ln(a)", Expression.valueOf("∂(log(a, b), b)").expand().toString());
4242
assertEquals("-1/a*(1/ln(a))^2*ln(b)", Expression.valueOf("∂(log(a, b), a)").expand().toString());
4343

@@ -133,10 +133,10 @@ public void testFunction() throws Exception {
133133

134134
final CustomFunction.Builder jBuilder4 = new CustomFunction.Builder("testFunction5", asList("a", "b"), "testFunction2(a, b/2, 2, 1) - testFunction(a, b!, 4!, 1)");
135135
mathEngine.getFunctionsRegistry().addOrUpdate(jBuilder4.create());
136-
assertEquals("0.4996954135095478", Expression.valueOf("testFunction5(2, 3)").numeric().toString());
137-
assertEquals("0.4996954135095478", Expression.valueOf("testFunction5(2, 3)").numeric().toString());
138-
assertEquals("0.4996954135095478", Expression.valueOf("testFunction5(2*1, 3)").numeric().toString());
139-
assertEquals("-0.0000000000000001", Expression.valueOf("testFunction5(2*1, 2^2-1+e^0)").numeric().toString());
136+
assertEquals("0.499695413509548", Expression.valueOf("testFunction5(2, 3)").numeric().toString());
137+
assertEquals("0.499695413509548", Expression.valueOf("testFunction5(2, 3)").numeric().toString());
138+
assertEquals("0.499695413509548", Expression.valueOf("testFunction5(2*1, 3)").numeric().toString());
139+
assertEquals("0", Expression.valueOf("testFunction5(2*1, 2^2-1+e^0)").numeric().toString());
140140

141141
try {
142142
Expression.valueOf("testFunction5(2, 3.5)").numeric();

0 commit comments

Comments
 (0)