56 lines
1.7 KiB
Java
56 lines
1.7 KiB
Java
package appeng.client.gui;
|
|
|
|
import org.junit.jupiter.params.ParameterizedTest;
|
|
import org.junit.jupiter.params.provider.CsvSource;
|
|
|
|
import java.text.DecimalFormat;
|
|
import java.text.DecimalFormatSymbols;
|
|
import java.util.Locale;
|
|
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
|
|
public class MathExpressionParserTest {
|
|
|
|
@ParameterizedTest
|
|
@CsvSource(value = {
|
|
"1 + 2|3",
|
|
"3 *4 |12",
|
|
"1 + 2 * 3 |7",
|
|
"1 - 6|-5",
|
|
"1/3|0.333333",
|
|
"23.4 + 0.6|24",
|
|
"1 - -4|5",
|
|
"1 + 4*3*2|25",
|
|
"1/0|failed",
|
|
"1/(1 - 1)|failed",
|
|
"3 + 2 * 4 - 1 /2|10.5",
|
|
"1 + (2 * (2 * (1 + 1)))|9",
|
|
"arkazkdhz|failed",
|
|
"1 + 2 3 7 - 1|237", // whitespace is trimmed
|
|
"2 + + 2|failed",
|
|
"10e6|10000000",
|
|
"-1 -1|-2",
|
|
"- (1 + 1)|-2",
|
|
"2 * -1|-2",
|
|
"2 -2|0",
|
|
"- 1|-1",
|
|
"-1|-1",
|
|
"- - - - - 5|failed", // not able to handle multiple negations, may fix in the future
|
|
"-(-(-(-2)))|failed", // not able to handle multiple negations, may fix in the future
|
|
"1 - -1|2",
|
|
"1 + -(2|failed"
|
|
}, delimiter = '|')
|
|
void testMath(String expression, String expected) {
|
|
DecimalFormat format = new DecimalFormat("#.######", DecimalFormatSymbols.getInstance(Locale.US));
|
|
format.setParseBigDecimal(true);
|
|
format.setNegativePrefix("-");
|
|
|
|
double parsed = MathExpressionParser.parse(expression);
|
|
if (Double.isNaN(parsed)) {
|
|
assertEquals(expected, "failed");
|
|
} else {
|
|
assertEquals(expected, format.format(parsed));
|
|
}
|
|
}
|
|
}
|