compiler/tests/PPCOptimizingVisitorTest.st
changeset 452 9f4558b3be66
parent 438 20598d7ce9fa
child 453 bd5107faf4d6
child 459 4751c407bb40
equal deleted inserted replaced
438:20598d7ce9fa 452:9f4558b3be66
     1 "{ Package: 'stx:goodies/petitparser/compiler/tests' }"
       
     2 
       
     3 "{ NameSpace: Smalltalk }"
       
     4 
       
     5 TestCase subclass:#PPCOptimizingVisitorTest
       
     6 	instanceVariableNames:'node result visitor'
       
     7 	classVariableNames:''
       
     8 	poolDictionaries:''
       
     9 	category:'PetitCompiler-Tests-Visitors'
       
    10 !
       
    11 
       
    12 !PPCOptimizingVisitorTest methodsFor:'as yet unclassified'!
       
    13 
       
    14 asNode: aPPParser
       
    15 	^ aPPParser asCompilerTree
       
    16 !
       
    17 
       
    18 assert: object type: class
       
    19 	self assert: object class == class
       
    20 !
       
    21 
       
    22 setUp
       
    23 	visitor := PPCOptimizingVisitor new.
       
    24 !
       
    25 
       
    26 testAnyPredicate
       
    27 	node := self asNode: #any asParser.
       
    28 	result := visitor visit: node.
       
    29 	
       
    30 	self assert: result type: PPCAnyNode.
       
    31 !
       
    32 
       
    33 testIdentity
       
    34 	| token star1 star2 |
       
    35 	token := $a asParser token.
       
    36 	star1 :=  token star.
       
    37 	star2 := token star.
       
    38 	node := self asNode: star1, star2.
       
    39 	result := visitor visit: node.
       
    40 	
       
    41 	self assert: result type: PPCSequenceNode.
       
    42 	self assert: result children first type: PPCStarNode.
       
    43 	self assert: result children second type: PPCStarNode.	
       
    44 !
       
    45 
       
    46 testNoOptimization
       
    47 	node := self asNode: 'foo' asParser.
       
    48 	self assert: node type: PPCLiteralNode.
       
    49 
       
    50 	result := visitor visit: node.
       
    51 	self assert: result type: PPCLiteralNode.
       
    52 !
       
    53 
       
    54 testNotCharSet
       
    55 	node := self asNode: #hex asParser not.
       
    56 	result := visitor visit: node.
       
    57 	
       
    58 	self assert: result type: PPCNotCharSetPredicateNode.
       
    59 !
       
    60 
       
    61 testNotLiteral
       
    62 	node := self asNode: 'foo' asParser not.
       
    63 	result := visitor visit: node.
       
    64 	
       
    65 	self assert: result type: PPCNotLiteralNode.
       
    66 	self assert: result literal = 'foo'.
       
    67 !
       
    68 
       
    69 testNotMessagePredicate
       
    70 	node := self asNode: #letter asParser not.
       
    71 	result := visitor visit: node.
       
    72 	
       
    73 	self assert: result type: PPCNotMessagePredicateNode.
       
    74 !
       
    75 
       
    76 testPredicateNode01
       
    77 	node := self asNode: #letter asParser.
       
    78 	result := visitor visit: node.
       
    79 	
       
    80 	self assert: result type: PPCMessagePredicateNode.
       
    81 	self assert: result message = #isLetter.
       
    82 !
       
    83 
       
    84 testPredicateNode02
       
    85 	node := self asNode: #digit asParser.
       
    86 	result := visitor visit: node.
       
    87 	
       
    88 	self assert: result type: PPCMessagePredicateNode.
       
    89 	self assert: result message = #isDigit.
       
    90 !
       
    91 
       
    92 testPredicateNode03
       
    93 	node := self asNode: #space asParser.
       
    94 	result := visitor visit: node.
       
    95 	
       
    96 	self assert: result type: PPCMessagePredicateNode.
       
    97 	self assert: result message = #isSeparator.
       
    98 !
       
    99 
       
   100 testPredicateNode04
       
   101 	node := self asNode: #word asParser.
       
   102 	result := visitor visit: node.
       
   103 	
       
   104 	self assert: result type: PPCMessagePredicateNode.
       
   105 	self assert: result message = #isAlphaNumeric.
       
   106 !
       
   107 
       
   108 testPredicateNode05
       
   109 	node := self asNode: #hex asParser.
       
   110 	result := visitor visit: node.
       
   111 	
       
   112 	self assert: result type: PPCCharSetPredicateNode.
       
   113 !
       
   114 
       
   115 testStarNode1
       
   116 	node := self asNode: #letter asParser star.
       
   117 	result := visitor visit: node.
       
   118 	
       
   119 	self assert: result type: PPCStarMessagePredicateNode.
       
   120 	self assert: result message = #isLetter.
       
   121 !
       
   122 
       
   123 testStarNode2
       
   124 	node := self asNode: #any asParser star.
       
   125 	result := visitor visit: node.
       
   126 	
       
   127 	self assert: result type: PPCStarAnyNode.
       
   128 !
       
   129 
       
   130 testStarNode3
       
   131 	node := self asNode: #hex asParser star.
       
   132 	result := visitor visit: node.
       
   133 	
       
   134 	self assert: result type: PPCStarCharSetPredicateNode.
       
   135 !
       
   136 
       
   137 testStarNode4
       
   138 	node := self asNode: #letter asParser not star.
       
   139 	result := visitor visit: node.
       
   140 	
       
   141 	self assert: result type: PPCStarNode.
       
   142 	self assert: result child type: PPCNotMessagePredicateNode.
       
   143 !
       
   144 
       
   145 testStarNode5
       
   146 	| star |
       
   147 	star := $a asParser not star.
       
   148 	node := self asNode: star, star.
       
   149 	result := visitor visit: node.
       
   150 	
       
   151 	self assert: result type: PPCSequenceNode.
       
   152 	self assert: result children first type: PPCStarNode.
       
   153 	self assert: result children second type: PPCStarNode.	
       
   154 ! !
       
   155