--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/PPExpressionParserTest.st Thu Aug 18 20:56:17 2011 +0200
@@ -0,0 +1,77 @@
+"{ Package: 'squeak:petitparser' }"
+
+PPArithmeticParserTest subclass:#PPExpressionParserTest
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitTests-Tests'
+!
+
+
+!PPExpressionParserTest class methodsFor:'testing'!
+
+shouldInheritSelectors
+ ^ true
+! !
+
+!PPExpressionParserTest methodsFor:'accessing'!
+
+parserInstance
+ | expression parens number |
+ expression := PPExpressionParser new.
+ parens := $( asParser token trim , expression , $) asParser token trim
+ ==> [ :nodes | nodes second ].
+ number := (#digit asParser plus , ($. asParser , #digit asParser plus) optional) token trim
+ ==> [ :token | token value asNumber ].
+ expression term: parens / number.
+ expression
+ group: [ :g |
+ g prefix: $- asParser token trim do: [ :op :a | a negated ] ];
+ group: [ :g |
+ g postfix: '++' asParser token trim do: [ :a :op | a + 1 ].
+ g postfix: '--' asParser token trim do: [ :a :op | a - 1 ] ];
+ group: [ :g |
+ g right: $^ asParser token trim do: [ :a :op :b | a raisedTo: b ] ];
+ group: [ :g |
+ g left: $* asParser token trim do: [ :a :op :b | a * b ].
+ g left: $/ asParser token trim do: [ :a :op :b | a / b ] ];
+ group: [ :g |
+ g left: $+ asParser token trim do: [ :a :op :b | a + b ].
+ g left: $- asParser token trim do: [ :a :op :b | a - b ] ].
+ ^ expression end
+! !
+
+!PPExpressionParserTest methodsFor:'testing'!
+
+testPostfixAdd
+ self assert: '0++' is: 1.
+ self assert: '0++++' is: 2.
+ self assert: '0++++++' is: 3.
+
+ self assert: '0+++1' is: 2.
+ self assert: '0+++++1' is: 3.
+ self assert: '0+++++++1' is: 4
+!
+
+testPostfixSub
+ self assert: '1--' is: 0.
+ self assert: '2----' is: 0.
+ self assert: '3------' is: 0.
+
+ self assert: '2---1' is: 0.
+ self assert: '3-----1' is: 0.
+ self assert: '4-------1' is: 0.
+!
+
+testPrefixNegate
+ self assert: '1' is: 1.
+ self assert: '-1' is: -1.
+ self assert: '--1' is: 1.
+ self assert: '---1' is: -1
+! !
+
+!PPExpressionParserTest class methodsFor:'documentation'!
+
+version_SVN
+ ^ '$Id: PPExpressionParserTest.st,v 1.1 2011-08-18 18:56:17 cg Exp $'
+! !