diff options
Diffstat (limited to 'tcllib/modules/grammar_fa/tests/fa_serial.test')
-rw-r--r-- | tcllib/modules/grammar_fa/tests/fa_serial.test | 221 |
1 files changed, 221 insertions, 0 deletions
diff --git a/tcllib/modules/grammar_fa/tests/fa_serial.test b/tcllib/modules/grammar_fa/tests/fa_serial.test new file mode 100644 index 0000000..46b018f --- /dev/null +++ b/tcllib/modules/grammar_fa/tests/fa_serial.test @@ -0,0 +1,221 @@ +# -*- tcl -*- +# finite_automaton.test: tests for the grammar::fa container. +# +# Copyright (c) 2004-2007 by Andreas Kupries <andreas_kupries@users.sourceforge.net> +# +# RCS: @(#) $Id: fa_serial.test,v 1.8 2007/04/12 03:43:14 andreas_kupries Exp $ + +# ------------------------------------------------------------------------- + +if {![::tcltest::testConstraint runtotal]} { + ::tcltest::cleanupTests + return +} + +# ------------------------------------------------------------------------- + +test fa-serial-${setimpl}-1.0 {serialize, error} { + grammar::fa a + catch {a serialize a} msg + a destroy + set msg +} {wrong # args: should be "::grammar::fa::Snit_methodserialize type selfns win self"} + + +test fa-serial-${setimpl}-1.1 {deserialize, error} { + grammar::fa a + catch {a deserialize} msg + a destroy + set msg +} {wrong # args: should be "::grammar::fa::Snit_methoddeserialize type selfns win self value"} + + +test fa-serial-${setimpl}-1.2 {deserialize, error} { + grammar::fa a + catch {a deserialize a b} msg + a destroy + set msg +} {wrong # args: should be "::grammar::fa::Snit_methoddeserialize type selfns win self value"} + + +test fa-serial-${setimpl}-1.3 {assignment, error} { + grammar::fa a + catch {a =} msg + a destroy + set msg +} {wrong # args: should be "::grammar::fa::Snit_method= type selfns win self b"} + + +test fa-serial-${setimpl}-1.4 {assignment, error} { + grammar::fa a + catch {a = a b} msg + a destroy + set msg +} {wrong # args: should be "::grammar::fa::Snit_method= type selfns win self b"} + + +test fa-serial-${setimpl}-1.5 {assignment, error} { + grammar::fa a + catch {a -->} msg + a destroy + set msg +} {wrong # args: should be "::grammar::fa::Snit_method--> type selfns win self b"} + +test fa-serial-${setimpl}-1.6 {assignment, error} { + grammar::fa a + catch {a --> a b} msg + a destroy + set msg +} {wrong # args: should be "::grammar::fa::Snit_method--> type selfns win self b"} + +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +foreach {n code} { + 00 x + 01 x- + 02 xe + 03 xy + 04 xy- + 05 xye + 06 xyee + 07 xye- + 08 xy-- + 09 xy-= + 10 xyz/ee + 11 xyz/e- + 12 xyz/-- + 13 xyz/-= + 14 xyz|ee + 15 xyz|e- + 16 xyz|-- + 17 xyz|-= + 18 xyz+eee + 19 xyz+ee- + 20 xyz+e-- + 21 xyz+e-= + 22 xyz+--- + 23 xyz+--= + 24 xyz+-=_ + 25 xyz&eee + 26 xyz&ee- + 27 xyz&e-- + 28 xyz&e-= + 29 xyz&--- + 30 xyz&--= + 31 xyz&-=_ + 32 xyz!ee + 33 xyz!e- + 34 xyz!-- + 35 xyz!-= + 36 xyz!-e +} { + if {[string match xyz* $code]} { + set sets {{} x y z {x y} {x z} {y z} {x y z}} + } elseif {[string match xy* $code]} { + set sets {{} x y {x y}} + } elseif {[string match x* $code]} { + set sets {{} x} + } else { + set sets {{}} + } + + foreach st $sets { + foreach fin $sets { + set key $n.$code.([join $st {}],[join $fin {}]) + + test fa-serial-${setimpl}-2.$key {serialize} { + grammar::fa a + gen $code + foreach s $st {if {[a state exists $s]} {a start add $s}} + foreach s $fin {if {[a state exists $s]} {a final add $s}} + set res [validate_serial [a serialize] a] + a destroy + set res + } ok + + test fa-serial-${setimpl}-3.$key {deserialize} { + grammar::fa a + gen $code + foreach s $st {if {[a state exists $s]} {a start add $s}} + foreach s $fin {if {[a state exists $s]} {a final add $s}} + + grammar::fa b + b deserialize [a serialize] + set res [validate_serial [b serialize] a] + lappend res [validate_serial [a serialize] b] + + a destroy + b destroy + set res + } {ok ok} + + test fa-serial-${setimpl}-4.$key {assignment} { + grammar::fa a + gen $code + foreach s $st {if {[a state exists $s]} {a start add $s}} + foreach s $fin {if {[a state exists $s]} {a final add $s}} + + grammar::fa b + b = a + set res [validate_serial [b serialize] a] + lappend res [validate_serial [a serialize] b] + + a destroy + b destroy + set res + } {ok ok} + + test fa-serial-${setimpl}-5.$key {reverse assignment} { + grammar::fa a + gen $code + foreach s $st {if {[a state exists $s]} {a start add $s}} + foreach s $fin {if {[a state exists $s]} {a final add $s}} + + grammar::fa b + a --> b + set res [validate_serial [b serialize] a] + lappend res [validate_serial [a serialize] b] + + a destroy + b destroy + set res + } {ok ok} + + foreach op {= := <-- as} { + test fa-serial-${setimpl}-6.$key.$op {construction from fa} { + grammar::fa a + gen $code + foreach s $st {if {[a state exists $s]} {a start add $s}} + foreach s $fin {if {[a state exists $s]} {a final add $s}} + + grammar::fa b $op a + set res [validate_serial [b serialize] a] + lappend res [validate_serial [a serialize] b] + + a destroy + b destroy + set res + } {ok ok} + } + + test fa-serial-${setimpl}-7.$key {construction from fa} { + grammar::fa a + gen $code + foreach s $st {if {[a state exists $s]} {a start add $s}} + foreach s $fin {if {[a state exists $s]} {a final add $s}} + + grammar::fa b deserialize [a serialize] + set res [validate_serial [b serialize] a] + lappend res [validate_serial [a serialize] b] + + a destroy + b destroy + set res + } {ok ok} + } + } +} + + +# ------------------------------------------------------------------------- +::tcltest::cleanupTests |