package mulCal.equationParser; import static junit.framework.Assert.assertEquals; import static mulCal.equationParser.InfixToRPN.toRPN; import static mulCal.equationParser.Tokenize.asString; import static mulCal.equationParser.Tokenize.toTokens; import java.util.List; import mulCal.equationParser.Tokenize.Token; import org.junit.Test; public class InfixToRPNTest { @Test public void testBasic() throws Exception { List<Token> tokens = toRPN(toTokens("1 + sin 2")); assertEquals(tokens.size(), 4); assertEquals(tokens.get(0).text, "1"); assertEquals(tokens.get(0).type, Tokenize.TokenType.NUMBER); assertEquals(tokens.get(1).text, "2"); assertEquals(tokens.get(1).type, Tokenize.TokenType.NUMBER); assertEquals(tokens.get(2).text, "sin"); assertEquals(tokens.get(2).type, Tokenize.TokenType.FUNCTION); assertEquals(tokens.get(3).text, "+"); assertEquals(tokens.get(3).type, Tokenize.TokenType.OPERATOR); assertEquals(asString(tokens), "1 2 sin + "); } @Test public void testLots() throws Exception { assertEquals(asString(toRPN(toTokens("1 + 2"))), "1 2 + "); assertEquals(asString(toRPN(toTokens("2 * 3"))), "2 3 * "); assertEquals(asString(toRPN(toTokens("(1)"))), "1 "); assertEquals(asString(toRPN(toTokens("1 + - 2"))), "1 2 - + "); assertEquals(asString(toRPN(toTokens("1 +-- 2"))), "1 2 - - + "); assertEquals(asString(toRPN(toTokens("1 + sin sin 2"))), "1 2 sin sin + "); assertEquals(asString(toRPN(toTokens("1 + (sin 5)"))), "1 5 sin + "); assertEquals(asString(toRPN(toTokens("1 + 2 * 3"))), "1 2 3 * + "); assertEquals(asString(toRPN(toTokens("1 * 2 + 3"))), "1 2 * 3 + "); assertEquals(asString(toRPN(toTokens("(1 + 2) * 3"))), "1 2 + 3 * "); assertEquals(asString(toRPN(toTokens("(1) + (2)"))), "1 2 + "); // assertEquals(asString(toRPN(toTokens(""))), ""); } }