create changelog entry
[debian/openrocket] / core / test / net / sf / openrocket / util / ExpressionParserTest.java
1 package net.sf.openrocket.util;
2
3 import static org.junit.Assert.*;
4
5 import org.junit.Test;
6
7 public class ExpressionParserTest {
8         
9         private static final double EPS = 1e-10;
10         
11         private ExpressionParser parser = new ExpressionParser();
12         
13         @Test
14         public void testPlainNumber() throws InvalidExpressionException {
15                 assertEquals(1.0, parser.parse("1"), EPS);
16                 assertEquals(1.0, parser.parse("\t 1 "), EPS);
17                 assertEquals(0.9, parser.parse(".9"), EPS);
18                 assertEquals(1.0, parser.parse("1."), EPS);
19                 assertEquals(1.2, parser.parse("1.2"), EPS);
20                 assertEquals(1.2, parser.parse("01.200"), EPS);
21         }
22         
23         @Test
24         public void testNegativeNumber() throws InvalidExpressionException {
25                 assertEquals(-1.0, parser.parse("-1"), EPS);
26                 assertEquals(-15.0, parser.parse("-15"), EPS);
27                 assertEquals(-0.9, parser.parse("-.9"), EPS);
28                 assertEquals(-1.0, parser.parse("-1."), EPS);
29                 assertEquals(-1.2, parser.parse("-1.2"), EPS);
30                 assertEquals(-1.2, parser.parse("-01.200"), EPS);
31         }
32         
33         
34         @Test
35         public void testDecimalComma() throws InvalidExpressionException {
36                 assertEquals(1.0, parser.parse("1,"), EPS);
37                 assertEquals(1.2, parser.parse("1,2"), EPS);
38                 assertEquals(1.2, parser.parse("01,200"), EPS);
39                 assertEquals(0.9, parser.parse(",9"), EPS);
40         }
41         
42         
43         @Test
44         public void testSimpleExpression() throws InvalidExpressionException {
45                 assertEquals(3.0, parser.parse("1+2"), EPS);
46                 assertEquals(6.0, parser.parse("1+2.5*2"), EPS);
47                 assertEquals(7.0, parser.parse("(1+2.5) * 2"), EPS);
48                 assertEquals(1.0 + 2.0 / 3.0, parser.parse("1+2/3"), EPS);
49         }
50         
51         @Test
52         public void testFraction() throws InvalidExpressionException {
53                 assertEquals(1.5, parser.parse("1 1/2"), EPS);
54                 assertEquals(11 + 11.0 / 22.0, parser.parse("11 11/22"), EPS);
55                 assertEquals(-11 - 11.0 / 22.0, parser.parse("-11 11/22"), EPS);
56                 assertEquals(1.5, parser.parse("  1    1 / 2"), EPS);
57                 assertEquals(11 + 11.0 / 22.0, parser.parse("  11    11 / 22"), EPS);
58                 assertEquals(2.0 + 3.0 / 7.0, parser.parse("1 + 1 3/7"), EPS);
59                 assertEquals(2.0 + 3.0 / 7.0, parser.parse("1 + 1 3/7"), EPS);
60                 assertEquals(3.0, parser.parse("1 1/2* 2"), EPS);
61                 assertEquals(3.0, parser.parse("1 1/2* 2"), EPS);
62         }
63         
64         @Test
65         public void testCharConversion() throws InvalidExpressionException {
66                 assertEquals(1 + 1.0 / 9.0, parser.parse("1 \u2081 \u2044 \u2089"), EPS);
67         }
68         
69         @Test
70         public void testInvalidExpression() {
71                 expectInvalid("1+");
72                 expectInvalid("1+2/");
73                 expectInvalid("1 2");
74                 expectInvalid("12 2.5");
75                 expectInvalid("1 2.5/4");
76                 expectInvalid("11 22.55/44");
77                 expectInvalid("1 2/4.1");
78                 expectInvalid("11 22/44.11");
79                 expectInvalid("1.2 3/4");
80                 expectInvalid("12.23 34/45");
81                 
82                 expectInvalid("1. 2");
83                 expectInvalid("1 .2");
84         }
85         
86         private void expectInvalid(String exp) {
87                 try {
88                         double value = parser.parse(exp);
89                         fail("Expression '" + exp + "' evaluated to " + value + ", expected failure");
90                 } catch (InvalidExpressionException e) {
91                         // expected
92                 }
93         }
94 }