1 "{ Package: 'stx:goodies/petitparser' }" |
|
2 |
|
3 PPArithmeticParserTest subclass:#PPExpressionParserTest |
|
4 instanceVariableNames:'' |
|
5 classVariableNames:'' |
|
6 poolDictionaries:'' |
|
7 category:'PetitTests-Tests' |
|
8 ! |
|
9 |
|
10 |
|
11 !PPExpressionParserTest class methodsFor:'testing'! |
|
12 |
|
13 shouldInheritSelectors |
|
14 ^ true |
|
15 ! ! |
|
16 |
|
17 !PPExpressionParserTest methodsFor:'accessing'! |
|
18 |
|
19 parserInstance |
|
20 | expression parens number | |
|
21 expression := PPExpressionParser new. |
|
22 parens := $( asParser trim , expression , $) asParser trim |
|
23 ==> [ :value | value second ]. |
|
24 number := (#digit asParser plus , ($. asParser , #digit asParser plus) optional) flatten trim |
|
25 ==> [ :value | value asNumber ]. |
|
26 expression term: parens / number. |
|
27 expression |
|
28 group: [ :g | |
|
29 g prefix: $- asParser trim do: [ :op :a | a negated ] ]; |
|
30 group: [ :g | |
|
31 g postfix: '++' asParser trim do: [ :a :op | a + 1 ]. |
|
32 g postfix: '--' asParser trim do: [ :a :op | a - 1 ] ]; |
|
33 group: [ :g | |
|
34 g right: $^ asParser trim do: [ :a :op :b | a raisedTo: b ] ]; |
|
35 group: [ :g | |
|
36 g left: $* asParser trim do: [ :a :op :b | a * b ]. |
|
37 g left: $/ asParser trim do: [ :a :op :b | a / b ] ]; |
|
38 group: [ :g | |
|
39 g left: $+ asParser trim do: [ :a :op :b | a + b ]. |
|
40 g left: $- asParser trim do: [ :a :op :b | a - b ] ]. |
|
41 ^ expression end |
|
42 ! ! |
|
43 |
|
44 !PPExpressionParserTest methodsFor:'testing'! |
|
45 |
|
46 testPostfixAdd |
|
47 self assert: '0++' is: 1. |
|
48 self assert: '0++++' is: 2. |
|
49 self assert: '0++++++' is: 3. |
|
50 |
|
51 self assert: '0+++1' is: 2. |
|
52 self assert: '0+++++1' is: 3. |
|
53 self assert: '0+++++++1' is: 4 |
|
54 ! |
|
55 |
|
56 testPostfixSub |
|
57 self assert: '1--' is: 0. |
|
58 self assert: '2----' is: 0. |
|
59 self assert: '3------' is: 0. |
|
60 |
|
61 self assert: '2---1' is: 0. |
|
62 self assert: '3-----1' is: 0. |
|
63 self assert: '4-------1' is: 0. |
|
64 ! |
|
65 |
|
66 testPrefixNegate |
|
67 self assert: '1' is: 1. |
|
68 self assert: '-1' is: -1. |
|
69 self assert: '--1' is: 1. |
|
70 self assert: '---1' is: -1 |
|
71 ! ! |
|
72 |
|
73 !PPExpressionParserTest class methodsFor:'documentation'! |
|
74 |
|
75 version |
|
76 ^ '$Header: /cvs/stx/stx/goodies/petitparser/PPExpressionParserTest.st,v 1.4 2014-03-04 14:34:13 cg Exp $' |
|
77 ! |
|
78 |
|
79 version_CVS |
|
80 ^ '$Header: /cvs/stx/stx/goodies/petitparser/PPExpressionParserTest.st,v 1.4 2014-03-04 14:34:13 cg Exp $' |
|
81 ! |
|
82 |
|
83 version_SVN |
|
84 ^ '$Id: PPExpressionParserTest.st,v 1.4 2014-03-04 14:34:13 cg Exp $' |
|
85 ! ! |
|
86 |
|