Skip to content

Commit 3f1dd79

Browse files
Refactor tests
1 parent c4ea7c0 commit 3f1dd79

2 files changed

Lines changed: 78 additions & 105 deletions

File tree

src/main/java/net/marcellperger/mathexpr/SymbolInfo.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@ public enum SymbolInfo {
7070
private BinOpBiConstructor<?> biConstructorCache = null;
7171
public @NotNull BinOpBiConstructor<?> getBiConstructor() {
7272
if(biConstructorCache != null) return biConstructorCache;
73-
// TODO could add a BiFunction<> arg to SymbolInfo(), then pass AddOperation::new etc.
7473
assert BinaryOperationLeftRight.class.isAssignableFrom(cls);
7574

7675
Constructor<? extends BinaryOperationLeftRight> ctor;

src/test/java/net/marcellperger/mathexpr/parser/ParserTest.java

Lines changed: 78 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,16 @@
33
import net.marcellperger.mathexpr.*;
44
import net.marcellperger.mathexpr.util.Util;
55
import net.marcellperger.mathexpr.util.UtilCollectors;
6-
76
import org.jetbrains.annotations.Contract;
87
import org.jetbrains.annotations.NotNull;
98
import org.jetbrains.annotations.Nullable;
10-
import org.junit.jupiter.api.Test;
119
import org.junit.jupiter.params.ParameterizedTest;
1210
import org.junit.jupiter.params.provider.ValueSource;
1311

1412
import java.lang.reflect.Field;
1513
import java.util.Arrays;
1614
import java.util.HashMap;
1715
import java.util.Map;
18-
import java.util.Map.Entry;
1916
import java.util.Optional;
2017

2118
import static org.junit.jupiter.api.Assertions.*;
@@ -68,115 +65,91 @@ void assertInfixParsesToInner(String src, int level, MathSymbol expected) {
6865
assertEquals(expected, actual);
6966
}
7067

71-
@Test
72-
void parseInfixPrecedenceLevel() {
73-
assertInfixParsesTo("1.0/2.0", MUL_PREC,
74-
new DivOperation(new BasicDoubleSymbol(1.0), new BasicDoubleSymbol(2.0)));
75-
assertInfixParsesTo(".3*6.", MUL_PREC,
76-
new MulOperation(new BasicDoubleSymbol(.3), new BasicDoubleSymbol(6.)));
77-
assertInfixParsesTo("2.1*5.3+1.1", ADD_PREC,
78-
new AddOperation(new MulOperation(new BasicDoubleSymbol(2.1), new BasicDoubleSymbol(5.3)), new BasicDoubleSymbol(1.1)));
79-
assertInfixParsesTo("0.9-2.1/.3", ADD_PREC,
80-
new SubOperation(new BasicDoubleSymbol(0.9), new DivOperation(new BasicDoubleSymbol(2.1), new BasicDoubleSymbol(.3))));
81-
assertInfixParsesTo("(2.2+1.1)+3.7", ADD_PREC,
82-
new AddOperation(new AddOperation(new BasicDoubleSymbol(2.2), new BasicDoubleSymbol(1.1)), new BasicDoubleSymbol(3.7)));
83-
assertInfixParsesTo(CommonData.getBigData1_groupingParens(), ADD_PREC);
84-
assertInfixParsesTo(CommonData.getBigData2_groupingParens(), ADD_PREC);
85-
assertInfixParsesTo("2.2+1.1+3.7", ADD_PREC,
86-
new AddOperation(new AddOperation(new BasicDoubleSymbol(2.2), new BasicDoubleSymbol(1.1)), new BasicDoubleSymbol(3.7)));
87-
assertInfixParsesTo("2.2+1.1+3.7+0.2", ADD_PREC,
88-
new AddOperation(new AddOperation(new AddOperation(new BasicDoubleSymbol(2.2), new BasicDoubleSymbol(1.1)), new BasicDoubleSymbol(3.7)), new BasicDoubleSymbol(0.2)));
89-
assertInfixParsesTo(CommonData.getBigData1_minimumParens(), ADD_PREC);
90-
assertInfixParsesTo(CommonData.getBigData2_minimumParens(), ADD_PREC);
91-
assertInfixParsesTo(".9/2./3.3", MUL_PREC,
92-
new DivOperation(new DivOperation(new BasicDoubleSymbol(.9), new BasicDoubleSymbol(2.)), new BasicDoubleSymbol(3.3)));
93-
assertInfixParsesTo(".9/2./3.3", ADD_PREC,
94-
new DivOperation(new DivOperation(new BasicDoubleSymbol(.9), new BasicDoubleSymbol(2.)), new BasicDoubleSymbol(3.3)));
95-
}
96-
97-
@Test
98-
void parseInfixPrecedenceLevel_nocache() {
99-
boolean origNocache = nocache;
100-
nocache = true;
101-
try {
102-
parseInfixPrecedenceLevel();
103-
} finally {
104-
nocache = origNocache;
68+
@ParameterizedTest
69+
@ValueSource(booleans={true, false})
70+
void parseInfixPrecedenceLevel(boolean disableCache) {
71+
try(var ignored = new WithNocache(this, disableCache).start()) {
72+
assertInfixParsesTo("1.0/2.0", MUL_PREC,
73+
new DivOperation(new BasicDoubleSymbol(1.0), new BasicDoubleSymbol(2.0)));
74+
assertInfixParsesTo(".3*6.", MUL_PREC,
75+
new MulOperation(new BasicDoubleSymbol(.3), new BasicDoubleSymbol(6.)));
76+
assertInfixParsesTo("2.1*5.3+1.1", ADD_PREC,
77+
new AddOperation(new MulOperation(new BasicDoubleSymbol(2.1), new BasicDoubleSymbol(5.3)), new BasicDoubleSymbol(1.1)));
78+
assertInfixParsesTo("0.9-2.1/.3", ADD_PREC,
79+
new SubOperation(new BasicDoubleSymbol(0.9), new DivOperation(new BasicDoubleSymbol(2.1), new BasicDoubleSymbol(.3))));
80+
assertInfixParsesTo("(2.2+1.1)+3.7", ADD_PREC,
81+
new AddOperation(new AddOperation(new BasicDoubleSymbol(2.2), new BasicDoubleSymbol(1.1)), new BasicDoubleSymbol(3.7)));
82+
assertInfixParsesTo(CommonData.getBigData1_groupingParens(), ADD_PREC);
83+
assertInfixParsesTo(CommonData.getBigData2_groupingParens(), ADD_PREC);
84+
assertInfixParsesTo("2.2+1.1+3.7", ADD_PREC,
85+
new AddOperation(new AddOperation(new BasicDoubleSymbol(2.2), new BasicDoubleSymbol(1.1)), new BasicDoubleSymbol(3.7)));
86+
assertInfixParsesTo("2.2+1.1+3.7+0.2", ADD_PREC,
87+
new AddOperation(new AddOperation(new AddOperation(new BasicDoubleSymbol(2.2), new BasicDoubleSymbol(1.1)), new BasicDoubleSymbol(3.7)), new BasicDoubleSymbol(0.2)));
88+
assertInfixParsesTo(CommonData.getBigData1_minimumParens(), ADD_PREC);
89+
assertInfixParsesTo(CommonData.getBigData2_minimumParens(), ADD_PREC);
90+
assertInfixParsesTo(".9/2./3.3", MUL_PREC,
91+
new DivOperation(new DivOperation(new BasicDoubleSymbol(.9), new BasicDoubleSymbol(2.)), new BasicDoubleSymbol(3.3)));
92+
assertInfixParsesTo(".9/2./3.3", ADD_PREC,
93+
new DivOperation(new DivOperation(new BasicDoubleSymbol(.9), new BasicDoubleSymbol(2.)), new BasicDoubleSymbol(3.3)));
10594
}
10695
}
10796

108-
@Test
109-
void parsePrecedenceLevel() {
110-
assertParsesTo("1.0/2.0",
111-
new DivOperation(new BasicDoubleSymbol(1.0), new BasicDoubleSymbol(2.0)));
112-
assertParsesTo(".3*6.",
113-
new MulOperation(new BasicDoubleSymbol(.3), new BasicDoubleSymbol(6.)));
114-
assertParsesTo("2.1*5.3+1.1",
115-
new AddOperation(new MulOperation(new BasicDoubleSymbol(2.1), new BasicDoubleSymbol(5.3)), new BasicDoubleSymbol(1.1)));
116-
assertParsesTo("0.9-2.1/.3",
117-
new SubOperation(new BasicDoubleSymbol(0.9), new DivOperation(new BasicDoubleSymbol(2.1), new BasicDoubleSymbol(.3))));
118-
assertParsesTo("(2.2+1.1)+3.7",
119-
new AddOperation(new AddOperation(new BasicDoubleSymbol(2.2), new BasicDoubleSymbol(1.1)), new BasicDoubleSymbol(3.7)));
120-
assertParsesTo(CommonData.getBigData1_groupingParens());
121-
assertParsesTo(CommonData.getBigData2_groupingParens());
122-
assertParsesTo("2.2+1.1+3.7",
123-
new AddOperation(new AddOperation(new BasicDoubleSymbol(2.2), new BasicDoubleSymbol(1.1)), new BasicDoubleSymbol(3.7)));
124-
assertParsesTo("2.2+1.1+3.7+0.2",
125-
new AddOperation(new AddOperation(new AddOperation(new BasicDoubleSymbol(2.2), new BasicDoubleSymbol(1.1)), new BasicDoubleSymbol(3.7)), new BasicDoubleSymbol(0.2)));
126-
assertParsesTo(CommonData.getBigData1_minimumParens());
127-
assertParsesTo(CommonData.getBigData2_minimumParens());
128-
assertParsesTo(".9/2./3.3",
129-
new DivOperation(new DivOperation(new BasicDoubleSymbol(.9), new BasicDoubleSymbol(2.)), new BasicDoubleSymbol(3.3)));
130-
assertParsesTo(".9/2./3.3",
131-
new DivOperation(new DivOperation(new BasicDoubleSymbol(.9), new BasicDoubleSymbol(2.)), new BasicDoubleSymbol(3.3)));
132-
}
133-
134-
@Test // TODO make this not test/inline it
135-
void parsePrecedenceLevel_pow() {
136-
assertInfixParsesTo("1.2**9.1", POW_PREC,
137-
new PowOperation(new BasicDoubleSymbol(1.2), new BasicDoubleSymbol(9.1)));
138-
assertInfixParsesTo("1.2**9.1**.3", POW_PREC,
139-
new PowOperation(new BasicDoubleSymbol(1.2), new PowOperation(new BasicDoubleSymbol(9.1), new BasicDoubleSymbol(.3))));
140-
assertInfixParsesTo("1.2**9.1+.3", ADD_PREC,
141-
new AddOperation(new PowOperation(new BasicDoubleSymbol(1.2), new BasicDoubleSymbol(9.1)), new BasicDoubleSymbol(.3)));
142-
assertInfixParsesTo(CommonData.getBigData3Pow_minimumParens(), ADD_PREC);
143-
assertInfixParsesTo(CommonData.getBigData3Pow_groupingParens(), ADD_PREC);
144-
}
145-
146-
@Test
147-
void parse_pow() {
148-
assertParsesTo("1.2**9.1",
149-
new PowOperation(new BasicDoubleSymbol(1.2), new BasicDoubleSymbol(9.1)));
150-
assertParsesTo("1.2**9.1**.3",
151-
new PowOperation(new BasicDoubleSymbol(1.2), new PowOperation(new BasicDoubleSymbol(9.1), new BasicDoubleSymbol(.3))));
152-
assertParsesTo("1.2**9.1+.3",
153-
new AddOperation(new PowOperation(new BasicDoubleSymbol(1.2), new BasicDoubleSymbol(9.1)), new BasicDoubleSymbol(.3)));
154-
assertParsesTo(CommonData.getBigData3Pow_minimumParens());
155-
assertParsesTo(CommonData.getBigData3Pow_groupingParens());
156-
}
157-
15897
@ParameterizedTest
15998
@ValueSource(booleans={true, false})
160-
void parsePrecedenceLevel_pow_nocache(boolean disableCache) {
161-
try(var ignored = new WithNocache(this, disableCache)) {
162-
parsePrecedenceLevel_pow();
99+
void parse(boolean disableCache) {
100+
try(var ignored = new WithNocache(this, disableCache).start()) {
101+
assertParsesTo("1.0/2.0",
102+
new DivOperation(new BasicDoubleSymbol(1.0), new BasicDoubleSymbol(2.0)));
103+
assertParsesTo(".3*6.",
104+
new MulOperation(new BasicDoubleSymbol(.3), new BasicDoubleSymbol(6.)));
105+
assertParsesTo("2.1*5.3+1.1",
106+
new AddOperation(new MulOperation(new BasicDoubleSymbol(2.1), new BasicDoubleSymbol(5.3)), new BasicDoubleSymbol(1.1)));
107+
assertParsesTo("0.9-2.1/.3",
108+
new SubOperation(new BasicDoubleSymbol(0.9), new DivOperation(new BasicDoubleSymbol(2.1), new BasicDoubleSymbol(.3))));
109+
assertParsesTo("(2.2+1.1)+3.7",
110+
new AddOperation(new AddOperation(new BasicDoubleSymbol(2.2), new BasicDoubleSymbol(1.1)), new BasicDoubleSymbol(3.7)));
111+
assertParsesTo(CommonData.getBigData1_groupingParens());
112+
assertParsesTo(CommonData.getBigData2_groupingParens());
113+
assertParsesTo("2.2+1.1+3.7",
114+
new AddOperation(new AddOperation(new BasicDoubleSymbol(2.2), new BasicDoubleSymbol(1.1)), new BasicDoubleSymbol(3.7)));
115+
assertParsesTo("2.2+1.1+3.7+0.2",
116+
new AddOperation(new AddOperation(new AddOperation(new BasicDoubleSymbol(2.2), new BasicDoubleSymbol(1.1)), new BasicDoubleSymbol(3.7)), new BasicDoubleSymbol(0.2)));
117+
assertParsesTo(CommonData.getBigData1_minimumParens());
118+
assertParsesTo(CommonData.getBigData2_minimumParens());
119+
assertParsesTo(".9/2./3.3",
120+
new DivOperation(new DivOperation(new BasicDoubleSymbol(.9), new BasicDoubleSymbol(2.)), new BasicDoubleSymbol(3.3)));
121+
assertParsesTo(".9/2./3.3",
122+
new DivOperation(new DivOperation(new BasicDoubleSymbol(.9), new BasicDoubleSymbol(2.)), new BasicDoubleSymbol(3.3)));
163123
}
164124
}
165125

166-
// TODO do more parameterized tests
167126
@ParameterizedTest
168127
@ValueSource(booleans={true, false})
169-
void parse_pow_nocache(boolean disableCache) {
128+
void parsePrecedenceLevel_pow(boolean disableCache) {
170129
try(var ignored = new WithNocache(this, disableCache)) {
171-
parse_pow();
130+
assertInfixParsesTo("1.2**9.1", POW_PREC,
131+
new PowOperation(new BasicDoubleSymbol(1.2), new BasicDoubleSymbol(9.1)));
132+
assertInfixParsesTo("1.2**9.1**.3", POW_PREC,
133+
new PowOperation(new BasicDoubleSymbol(1.2), new PowOperation(new BasicDoubleSymbol(9.1), new BasicDoubleSymbol(.3))));
134+
assertInfixParsesTo("1.2**9.1+.3", ADD_PREC,
135+
new AddOperation(new PowOperation(new BasicDoubleSymbol(1.2), new BasicDoubleSymbol(9.1)), new BasicDoubleSymbol(.3)));
136+
assertInfixParsesTo(CommonData.getBigData3Pow_minimumParens(), ADD_PREC);
137+
assertInfixParsesTo(CommonData.getBigData3Pow_groupingParens(), ADD_PREC);
172138
}
173139
}
174140

175141
@ParameterizedTest
176142
@ValueSource(booleans={true, false})
177-
void parsePrecedenceLevel_nocache(boolean disableCache) {
178-
try(var ignored = new WithNocache(this, disableCache)) {
179-
parsePrecedenceLevel();
143+
void parse_pow(boolean disableCache) {
144+
try(var ignored = new WithNocache(this, disableCache).start()) {
145+
assertParsesTo("1.2**9.1",
146+
new PowOperation(new BasicDoubleSymbol(1.2), new BasicDoubleSymbol(9.1)));
147+
assertParsesTo("1.2**9.1**.3",
148+
new PowOperation(new BasicDoubleSymbol(1.2), new PowOperation(new BasicDoubleSymbol(9.1), new BasicDoubleSymbol(.3))));
149+
assertParsesTo("1.2**9.1+.3",
150+
new AddOperation(new PowOperation(new BasicDoubleSymbol(1.2), new BasicDoubleSymbol(9.1)), new BasicDoubleSymbol(.3)));
151+
assertParsesTo(CommonData.getBigData3Pow_minimumParens());
152+
assertParsesTo(CommonData.getBigData3Pow_groupingParens());
180153
}
181154
}
182155

@@ -186,20 +159,22 @@ static class WithNocache implements AutoCloseable {
186159
ParserTest inst;
187160

188161
WithNocache(ParserTest inst_) {
189-
inst = inst_;
190-
start();
162+
this(inst_, true);
191163
}
192164
WithNocache(ParserTest inst_, boolean doDisable_) {
193165
inst = inst_;
194166
doDisable = doDisable_;
195-
start();
196167
}
197-
168+
198169
@Contract("->this")
199170
public WithNocache start() {
171+
_start();
172+
return this;
173+
}
174+
175+
private void _start() {
200176
origNocache = inst.nocache;
201177
inst.nocache = doDisable;
202-
return this;
203178
}
204179

205180
public void close() {
@@ -235,12 +210,11 @@ public void close() {
235210
Map<SymbolInfo, Optional<BinOpBiConstructor<?>>> origCache = new HashMap<>();
236211
void clearCache() {
237212
Field cacheField = getBiConstructorCache();
238-
239-
origCache = Arrays.stream(SymbolInfo.values()).<Entry<SymbolInfo, Optional<BinOpBiConstructor<?>>>>map(sym -> {
213+
origCache = Arrays.stream(SymbolInfo.values()).map(sym -> {
240214
try {
241215
@Nullable BinOpBiConstructor<?> cachedValue = (BinOpBiConstructor<?>)cacheField.get(sym);
242216
cacheField.set(sym, null);
243-
return Util.makeEntry(sym, Optional.ofNullable(cachedValue));
217+
return Util.makeEntry(sym, Optional.<BinOpBiConstructor<?>>ofNullable(cachedValue));
244218
} catch (IllegalAccessException e) {
245219
throw Util.excToError(e);
246220
}

0 commit comments

Comments
 (0)