# -*- tcl -*- # finite_automaton.test: tests for the grammar::fa container. # # Copyright (c) 2004-2007 by Andreas Kupries # # RCS: @(#) $Id: fa_symbol.test,v 1.7 2009/10/27 21:17:23 andreas_kupries Exp $ # ------------------------------------------------------------------------- test fa-symbol-${setimpl}-1.0 {symbol, error} { grammar::fa a catch {a symbol} res a destroy set res } {wrong number args: should be "::a symbol method args"} # [tcltest::wrongNumArgs {::a symbol method} {sym args} 0] test fa-symbol-${setimpl}-1.1 {symbol, error} { grammar::fa a catch {a symbol foo @} res a destroy set res } {"::a symbol foo" is not defined} test fa-symbol-${setimpl}-1.2 {symbol, error} { grammar::fa a catch {a symbol add} res a destroy set res } [tcltest::wrongNumArgs ::grammar::fa::Snit_hmethodsymbol_add {type selfns win self sym args} 4] test fa-symbol-${setimpl}-1.3 {symbol, error} { grammar::fa a a symbol add x catch {a symbol add x} res a destroy set res } {Symbol "x" is already known} test fa-symbol-${setimpl}-1.4 {symbol, error} { grammar::fa a catch {a symbol add ""} res a destroy set res } {Cannot add illegal empty symbol ""} test fa-symbol-${setimpl}-1.5 {symbol, error} { grammar::fa a catch {a symbol delete} res a destroy set res } [tcltest::wrongNumArgs ::grammar::fa::Snit_hmethodsymbol_delete {type selfns win self sym args} 4] test fa-symbol-${setimpl}-1.6 {symbol, error} { grammar::fa a catch {a symbol delete @} res a destroy set res } {Illegal symbol "@"} test fa-symbol-${setimpl}-1.7 {symbol, error} { grammar::fa a catch {a symbol exists} res a destroy set res } [tcltest::wrongNumArgs ::grammar::fa::Snit_hmethodsymbol_exists {type selfns win self sym} 4] test fa-symbol-${setimpl}-1.8 {symbol, error} { grammar::fa a catch {a symbol exists a b} res a destroy set res } [tcltest::tooManyArgs ::grammar::fa::Snit_hmethodsymbol_exists {type selfns win self sym}] test fa-symbol-${setimpl}-1.9 {symbol, error} { grammar::fa a catch {a symbol rename} res a destroy set res } [tcltest::wrongNumArgs ::grammar::fa::Snit_hmethodsymbol_rename {type selfns win self sym newsym} 4] test fa-symbol-${setimpl}-1.10 {symbol, error} { grammar::fa a catch {a symbol rename foo} res a destroy set res } [tcltest::wrongNumArgs ::grammar::fa::Snit_hmethodsymbol_rename {type selfns win self sym newsym} 5] test fa-symbol-${setimpl}-1.11 {symbol, error} { grammar::fa a catch {a symbol rename foo bar snarf} res a destroy set res } [tcltest::tooManyArgs ::grammar::fa::Snit_hmethodsymbol_rename {type selfns win self sym newsym}] test fa-symbol-${setimpl}-1.12 {symbol, error} { grammar::fa a catch {a symbol rename x y} res a destroy set res } {Illegal symbol "x"} test fa-symbol-${setimpl}-1.13 {symbol, error} { grammar::fa a catch {a symbol rename "" y} res a destroy set res } {Illegal symbol ""} test fa-symbol-${setimpl}-1.14 {symbol, error} { grammar::fa a a symbol add x y catch {a symbol rename x y} res a destroy set res } {Symbol "y" is already known} # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ test fa-symbol-${setimpl}-2.0 {symbol add} { grammar::fa a set res {} lappend res [a symbol add x y] lappend res [lsort [a symbols]] a destroy set res } {{} {x y}} test fa-symbol-${setimpl}-2.1 {symbol add} { grammar::fa a a symbol add x set res [a symbols] a destroy set res } x # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ test fa-symbol-${setimpl}-3.0 {symbol delete} { grammar::fa a a symbol add x set res [a symbols] lappend res [a symbol exists x] a symbol delete x lappend res [a symbols] lappend res [a symbol exists x] a destroy set res } {x 1 {} 0} test fa-symbol-${setimpl}-3.1 {symbol delete, transitions} { grammar::fa a a state add x y a symbol add @ a next x @ --> y set res [a symbols] lappend res [a symbol exists @] a symbol delete @ lappend res [a symbols] lappend res [a symbol exists @] lappend res [validate_serial {grammar::fa {} {x {0 0 {}} y {0 0 {}}}} a] a destroy set res } {@ 1 {} 0 ok} # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ test fa-symbol-${setimpl}-4.0 {symbol exists} { grammar::fa a set res [a symbol exists x] a destroy set res } 0 test fa-symbol-${setimpl}-4.1 {symbol exists} { grammar::fa a a symbol add x set res [a symbol exists x] a destroy set res } 1 test fa-symbol-${setimpl}-4.2 {symbol exists} { grammar::fa a a symbol add x set res [a symbol exists x] a symbol delete x lappend res [a symbol exists x] a destroy set res } {1 0} # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ test fa-symbol-${setimpl}-5.0 {symbol rename} { grammar::fa a a symbol add x y a symbol rename x z set res [validate_serial {grammar::fa {y z} {}} a] a destroy set res } ok test fa-symbol-${setimpl}-5.1 {symbol rename} { grammar::fa a a symbol add x y a symbol rename y z set res [validate_serial {grammar::fa {x z} {}} a] a destroy set res } ok test fa-symbol-${setimpl}-5.2 {symbol rename} { grammar::fa a a state add x y a symbol add @ a next x @ --> y a symbol rename @ = set res [validate_serial {grammar::fa = {x {0 0 {= y}} y {0 0 {}}}} a] a destroy set res } ok # ------------------------------------------------------------------------- ::tcltest::cleanupTests