Updated to PetitCompiler-JanKurs.118, PetitCompiler-Tests-JanKurs.46, PetitCompiler-Extras-Tests-JanKurs.11, and PetitCompiler-Benchmarks-JanKurs.11
Name: PetitCompiler-JanKurs.118
Author: JanKurs
Time: 13-05-2015, 03:59:01.292 PM
UUID: 4a8ccd94-3131-4cc7-9098-528f8e5ea0b5
Name: PetitCompiler-Tests-JanKurs.46
Author: JanKurs
Time: 04-05-2015, 04:25:06.162 PM
UUID: 9f4cf8b7-876e-4a13-9579-b833f016db66
Name: PetitCompiler-Extras-Tests-JanKurs.11
Author: JanKurs
Time: 13-05-2015, 04:27:27.940 PM
UUID: e9f30c31-fbd0-4e96-ad2a-868f88d20ea8
Name: PetitCompiler-Benchmarks-JanKurs.11
Author: JanKurs
Time: 13-05-2015, 02:21:49.932 PM
UUID: 6a23fd1e-a86f-46db-8221-cc41b778d32c
"{ Package: 'stx:goodies/petitparser/tests' }"
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 trim , expression , $) asParser trim
==> [ :value | value second ].
number := (#digit asParser plus , ($. asParser , #digit asParser plus) optional) flatten trim
==> [ :value | value asNumber ].
expression term: parens / number.
expression
group: [ :g |
g prefix: $- asParser trim do: [ :op :a | a negated ] ];
group: [ :g |
g postfix: '++' asParser trim do: [ :a :op | a + 1 ].
g postfix: '--' asParser trim do: [ :a :op | a - 1 ] ];
group: [ :g |
g right: $^ asParser trim do: [ :a :op :b | a raisedTo: b ] ];
group: [ :g |
g left: $* asParser trim do: [ :a :op :b | a * b ].
g left: $/ asParser trim do: [ :a :op :b | a / b ] ];
group: [ :g |
g left: $+ asParser trim do: [ :a :op :b | a + b ].
g left: $- asParser 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
^ '$Header: /cvs/stx/stx/goodies/petitparser/PPExpressionParserTest.st,v 1.4 2014-03-04 14:34:13 cg Exp $'
!
version_CVS
^ '$Header: /cvs/stx/stx/goodies/petitparser/PPExpressionParserTest.st,v 1.4 2014-03-04 14:34:13 cg Exp $'
!
version_SVN
^ '$Id: PPExpressionParserTest.st,v 1.4 2014-03-04 14:34:13 cg Exp $'
! !