package data_structure.stack; import basic.dataStructure.stack.expr.InfixExpr; import basic.dataStructure.stack.expr.InfixToPostfix; import basic.dataStructure.stack.expr.PostfixExpr; import basic.dataStructure.stack.expr.PrefixExpr; import org.junit.Assert; import org.junit.Test; /** * @author : 温友朝 * @date : 2017/4/27 */ public class ExprTest { @Test public void testInfixEvaluate() { //InfixExpr expr = new InfixExpr("300*20+12*5-20/4"); // { // InfixExpr expr = new InfixExpr("2+3*4+5"); // Assert.assertEquals(19.0, expr.evaluate(), 0.001f); // } { InfixExpr expr = new InfixExpr("3*20+12*5-40/2"); Assert.assertEquals(100.0, expr.evaluate(), 0.001f); } { InfixExpr expr = new InfixExpr("3*20/2"); Assert.assertEquals(30, expr.evaluate(), 0.001f); } { InfixExpr expr = new InfixExpr("20/2*3"); Assert.assertEquals(30, expr.evaluate(), 0.001f); } { InfixExpr expr = new InfixExpr("10-30+50"); Assert.assertEquals(30, expr.evaluate(), 0.001f); } { InfixExpr expr = new InfixExpr("10-2*3+50"); Assert.assertEquals(54, expr.evaluate(), 0.001f); } } @Test public void testPostfixEvaluate() { { PostfixExpr expr = new PostfixExpr("6 5 2 3 + 8 * + 3 + *"); Assert.assertEquals(288, expr.evaluate(),0.0f); } { //9+(3-1)*3+10/2 PostfixExpr expr = new PostfixExpr("9 3 1-3*+ 10 2/+"); Assert.assertEquals(20, expr.evaluate(),0.0f); } { //10-2*3+50 PostfixExpr expr = new PostfixExpr("10 2 3 * - 50 +"); Assert.assertEquals(54, expr.evaluate(),0.0f); } } @Test public void testPrefixEvaluate() { { // 2*3+4*5 PrefixExpr expr = new PrefixExpr("+ * 2 3* 4 5"); Assert.assertEquals(26, expr.evaluate(),0.001f); } { // 4*2 + 6+9*2/3 -8 PrefixExpr expr = new PrefixExpr("-++6/*2 9 3 * 4 2 8"); Assert.assertEquals(12, expr.evaluate(),0.001f); } { //(3+4)*5-6 PrefixExpr expr = new PrefixExpr("- * + 3 4 5 6"); Assert.assertEquals(29, expr.evaluate(),0.001f); } { //1+((2+3)*4)-5 PrefixExpr expr = new PrefixExpr("- + 1 * + 2 3 4 5"); Assert.assertEquals(16, expr.evaluate(),0.001f); } } @Test public void textInfixToPostfixExpr(){ { //9+(3-1)*3+10/2 = 9 3 1 - 3 * 10 2 / + + String expr = "9+(3-1)*3+10/2"; Assert.assertEquals("[9, 3, 1, -, 3, *, 10, 2, /, +, +]", InfixToPostfix.convert(expr).toString()); } { //10-2*3+50 = 10 2 3 * 50 + - String expr = "10-2*3+50"; Assert.assertEquals("[10, 2, 3, *, 50, +, -]", InfixToPostfix.convert(expr).toString()); } } }