diff -r 1e45d3c96ec5 -r b5316ef15274 compiler/tests/PEGFsaInterpretTest.st --- a/compiler/tests/PEGFsaInterpretTest.st Fri Jul 24 15:06:54 2015 +0100 +++ b/compiler/tests/PEGFsaInterpretTest.st Mon Aug 17 12:13:16 2015 +0100 @@ -68,16 +68,32 @@ ! setUp - a := PEGFsaState new name: #a; retval: #a; yourself. - b := PEGFsaState new name: #b; retval: #b; yourself. - c := PEGFsaState new name: #c; retval: #c; yourself. - d := PEGFsaState new name: #d; retval: #d; yourself. - e := PEGFsaState new name: #e; retval: #e; yourself. + a := PEGFsaState new name: #a; retval: #token; yourself. + b := PEGFsaState new name: #b; retval: #token; yourself. + c := PEGFsaState new name: #c; retval: #token; yourself. + d := PEGFsaState new name: #d; retval: #token; yourself. + e := PEGFsaState new name: #e; retval: #token; yourself. fsa := PEGFsa new. interpreter := PEGFsaInterpret new yourself. +! ! + +!PEGFsaInterpretTest methodsFor:'tests'! + +testA + fsa addState: a. + fsa addState: b. + fsa startState: a. + fsa finalState: b. + + fsa addTransitionFrom: a to: b on: $a. + + self assert: fsa parse: 'a'. + self assert: fsa parse: 'abc' end: 1. + + self assert: fsa fail: 'b'. ! testAB @@ -90,8 +106,8 @@ fsa addTransitionFrom: a to: b on: $a. fsa addTransitionFrom: b to: c on: $b. - self assert: fsa parse: 'ab' retval: #c. - self assert: fsa parse: 'abc' retval: #c end: 2. + self assert: fsa parse: 'ab' retval: #token. + self assert: fsa parse: 'abc' retval: #token end: 2. self assert: fsa fail: 'ac'. ! @@ -117,45 +133,17 @@ testAOptional fsa addState: a. fsa addState: b. - fsa addState: c. fsa startState: a. + fsa finalState: a. fsa finalState: b. - fsa finalState: c. - - c priority: -1. - b priority: 0. fsa addTransitionFrom: a to: b on: $a. - fsa addTransitionFrom: a to: c priority: -1. self assert: fsa parse: 'a'. self assert: fsa parse: 'ab' end: 1. self assert: fsa parse: 'b' end: 0. ! -testAPlusA - fsa addState: a. - fsa addState: b. - fsa addState: c. - fsa addState: d. - fsa startState: a. - fsa finalState: d. - - fsa addTransitionFrom: a to: b on: $a. - - fsa addTransitionFrom: c to: d on: $a. - fsa addTransitionFrom: c to: d on: $b. - - b priority: 0. - d priority: -1. - fsa addTransitionFrom: b to: a. "a-loop" - fsa addTransitionFrom: b to: c priority: -1. "sequence" - - - self assert: fsa parse: 'aaab'. - self assert: fsa fail: 'aaaa'. -! - testAPlusB fsa addState: a. fsa addState: b. @@ -172,6 +160,26 @@ self assert: fsa fail: 'ac'. ! +testA_Bnot + fsa addState: a. + fsa addState: b. + fsa addState: c. + fsa startState: a. + fsa finalState: b. + fsa finalState: c. + + fsa addTransitionFrom: a to: b on: $a. + fsa addTransitionFrom: b to: c on: $b. + + c retval: #token. + c failure: true. + + self assert: fsa parse: 'ac' retval: #token end: 1. + self assert: fsa parse: 'aaa' retval: #token end: 1. + + self assert: fsa fail: 'ab'. +! + testChoice fsa addState: a. fsa addState: b. @@ -189,24 +197,6 @@ self assert: fsa fail: 'a' ! -testChoice2 - fsa addState: a. - fsa addState: b. - fsa addState: c. - fsa startState: a. - fsa finalState: b. - fsa finalState: c. - - fsa addTransitionFrom: a to: b on: $a. - fsa addTransitionFrom: a to: c on: $a. - - self assert: fsa parse: 'a'. - self assert: #b position: 1. - self assert: #c position: 1. - - self assert: fsa fail: 'b' -! - testEmpty fsa addState: a. fsa startState: a. @@ -214,8 +204,10 @@ " fsa addTransitionFrom: a to: b. " - self assert: fsa parse: '' retval: #a. -! + self assert: fsa parse: '' retval: #token. +! ! + +!PEGFsaInterpretTest methodsFor:'tests - multivalues'! testEpsilonChoice fsa addState: a. @@ -232,9 +224,12 @@ fsa addTransitionFrom: a to: b. fsa addTransitionFrom: a to: d. + + c retval: #c. + e retval: #e. - self assert: fsa parse: 'c'. - self assert: fsa parse: 'e'. + self assert: fsa parse: 'c' retval: #c. + self assert: fsa parse: 'e' retval: #e. self assert: fsa fail: 'a' ! @@ -254,6 +249,9 @@ fsa addTransitionFrom: a to: b. fsa addTransitionFrom: a to: d. + + c retval: #c. + e retval: #e. self assert: fsa parse: 'a'. self assert: #c position: 1. @@ -262,72 +260,7 @@ self assert: fsa fail: 'b' ! -testOverlap - fsa addState: a. - fsa addState: b. - fsa addState: c. - fsa startState: a. - fsa finalState: b. - fsa finalState: c. - - b priority: -1. - c priority: -1. - fsa addTransitionFrom: a to: b on: $a. - fsa addTransitionFrom: b to: c on: $a priority: -1. - - self assert: fsa parse: 'aa'. - self assertPass: #b. - self assertPass: #c. - - self assert: fsa parse: 'ac' end: 1. - self assertPass: #b. - self assertFail: #c. -! - -testOverlap2 - fsa addState: a. - fsa addState: b. - fsa addState: c. - fsa startState: a. - fsa finalState: b. - fsa finalState: c. - - b priority: 0. - c priority: -1. - fsa addTransitionFrom: a to: b on: $a. - fsa addTransitionFrom: b to: c on: $a priority: -1. - - self assert: fsa parse: 'aa' end: 1. - self assertPass: #b. - self assertFail: #c. - - self assert: fsa parse: 'ac' end: 1. - self assertPass: #b. - self assertFail: #c. -! - -testPriorityChoice - fsa addState: a. - fsa addState: b. - fsa addState: c. - fsa startState: a. - fsa finalState: b. - fsa finalState: c. - - b priority: 0. - c priority: -1. - fsa addTransitionFrom: a to: b on: $a. - fsa addTransitionFrom: a to: c on: $a priority: -1. - - self assert: fsa parse: 'a'. - self assert: #b position: 1. - self assert: (result includesKey: #b). - self assert: (result includesKey: #c) not. - - self assert: fsa fail: 'b' -! - -testPriorityChoice2 +testMultivalueChoice fsa addState: a. fsa addState: b. fsa addState: c. @@ -335,108 +268,16 @@ fsa finalState: b. fsa finalState: c. - b priority: -1. - c priority: 0. - fsa addTransitionFrom: a to: b on: $a priority: -1. + fsa addTransitionFrom: a to: b on: $a. fsa addTransitionFrom: a to: c on: $a. - self assert: fsa parse: 'a'. - self assert: #c position: 1. - self assert: (result includesKey: #b) not. - self assert: (result includesKey: #c). - - self assert: fsa fail: 'b' -! - -testPriorityContinuation - fsa addState: a. - fsa addState: b. - fsa addState: c. - fsa startState: a. - - fsa finalState: b. - fsa finalState: c. - - - fsa addTransitionFrom: a to: b on: $a. - fsa addTransitionFrom: b to: c on: $a priority: -1. - - b retval: PEGFsaFailure new. - b priority: 0. - c priority: -1. - - self assert: fsa fail: 'a'. - self assert: fsa fail: 'aa' -! - -testPriorityEpsilonChoice - fsa addState: a. - fsa addState: b. - fsa addState: c. - fsa addState: d. - fsa addState: e. - fsa startState: a. - fsa finalState: c. - fsa finalState: e. - - fsa addTransitionFrom: b to: c on: $a. - fsa addTransitionFrom: d to: e on: $a. - - c priority: 0. - e priority: -1. - fsa addTransitionFrom: a to: b. - fsa addTransitionFrom: a to: d priority: -1. - - self assert: fsa parse: 'a'. - self assert: #c position: 1. - self assertPass: #c. - self assertFail: #e. - - self assert: fsa fail: 'b' -! - -testPriorityEpsilonChoice2 - fsa addState: a. - fsa addState: b. - fsa addState: c. - fsa addState: d. - fsa addState: e. - fsa startState: a. - fsa finalState: c. - fsa finalState: e. - - fsa addTransitionFrom: b to: c on: $a. - fsa addTransitionFrom: d to: e on: $a. - - c priority: -1. - e priority: 0. - fsa addTransitionFrom: a to: b priority: -1. - fsa addTransitionFrom: a to: d. - - self assert: fsa parse: 'a'. - self assert: #e position: 1. - self assertPass: #e. - self assertFail: #c. - - self assert: fsa fail: 'b' -! - -testPriorityReturn - fsa addState: a. - fsa addState: b. - fsa addState: c. - fsa startState: a. - fsa finalState: b. - - fsa addTransitionFrom: a to: b on: $a. - fsa addTransitionFrom: b to: c on: $a. - - b priority: -1. - c priority: 0. + b retval: #b. + c retval: #c. self assert: fsa parse: 'a'. self assert: #b position: 1. - - self assert: fsa fail: 'aa' + self assert: #c position: 1. + + self assert: fsa fail: 'b' ! !