summaryrefslogtreecommitdiffstats
path: root/tcllib/modules/grammar_fa/tests/fa_state.test
diff options
context:
space:
mode:
Diffstat (limited to 'tcllib/modules/grammar_fa/tests/fa_state.test')
-rw-r--r--tcllib/modules/grammar_fa/tests/fa_state.test304
1 files changed, 304 insertions, 0 deletions
diff --git a/tcllib/modules/grammar_fa/tests/fa_state.test b/tcllib/modules/grammar_fa/tests/fa_state.test
new file mode 100644
index 0000000..d752b72
--- /dev/null
+++ b/tcllib/modules/grammar_fa/tests/fa_state.test
@@ -0,0 +1,304 @@
+# -*- 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_state.test,v 1.8 2009/10/27 21:17:23 andreas_kupries Exp $
+
+# -------------------------------------------------------------------------
+
+test fa-state-${setimpl}-1.0 {state, error} {
+ grammar::fa a
+ catch {a state} res
+ a destroy
+ set res
+} {wrong number args: should be "::a state method args"}
+# [tcltest::wrongNumArgs {::a state method} {args} 0]
+
+
+test fa-state-${setimpl}-1.1 {state, error} {
+ grammar::fa a
+ catch {a state add} res
+ a destroy
+ set res
+} [tcltest::wrongNumArgs ::grammar::fa::Snit_hmethodstate_add {type selfns win self s args} 4]
+
+
+test fa-state-${setimpl}-1.2 {state, error} {
+ grammar::fa a
+ a state add x
+ catch {a state foo x} res
+ a destroy
+ set res
+} {"::a state foo" is not defined}
+
+
+test fa-state-${setimpl}-1.3 {state, error} {
+ grammar::fa a
+ a state add x
+ catch {a state add x} res
+ a destroy
+ set res
+} {State "x" is already known}
+
+
+test fa-state-${setimpl}-1.4 {state, error} {
+ grammar::fa a
+ catch {a state exists} res
+ a destroy
+ set res
+} [tcltest::wrongNumArgs ::grammar::fa::Snit_hmethodstate_exists {type selfns win self s} 4]
+
+
+test fa-state-${setimpl}-1.5 {state, error} {
+ grammar::fa a
+ catch {a state exists a b} res
+ a destroy
+ set res
+} {wrong # args: should be "::grammar::fa::Snit_hmethodstate_exists type selfns win self s"}
+
+
+test fa-state-${setimpl}-1.6 {state, error} {
+ grammar::fa a
+ catch {a state delete} res
+ a destroy
+ set res
+} [tcltest::wrongNumArgs ::grammar::fa::Snit_hmethodstate_delete {type selfns win self s args} 4]
+
+
+test fa-state-${setimpl}-1.7 {state, error} {
+ grammar::fa a
+ catch {a state delete x} res
+ a destroy
+ set res
+} {Illegal state "x"}
+
+
+test fa-state-${setimpl}-1.8 {state, error} {
+ grammar::fa a
+ catch {a state rename} res
+ a destroy
+ set res
+} [tcltest::wrongNumArgs ::grammar::fa::Snit_hmethodstate_rename {type selfns win self s snew} 0]
+
+
+test fa-state-${setimpl}-1.9 {state, error} {
+ grammar::fa a
+ catch {a state rename foo} res
+ a destroy
+ set res
+} [tcltest::wrongNumArgs ::grammar::fa::Snit_hmethodstate_rename {type selfns win self s snew} 1]
+
+
+test fa-state-${setimpl}-1.10 {state, error} {
+ grammar::fa a
+ catch {a state rename x y} res
+ a destroy
+ set res
+} {Illegal state "x"}
+
+
+test fa-state-${setimpl}-1.11 {state, error} {
+ grammar::fa a
+ a state add x y
+ catch {a state rename x y} res
+ a destroy
+ set res
+} {State "y" is already known}
+
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+test fa-state-${setimpl}-2.0 {state add} {
+ grammar::fa a
+ set res [a state add x]
+ a destroy
+ set res
+} {}
+
+
+test fa-state-${setimpl}-2.1 {state add, variadic} {
+ grammar::fa a
+ set res [a state add x y]
+ a destroy
+ set res
+} {}
+
+
+test fa-state-${setimpl}-2.2 {state add / states / exists} {
+ grammar::fa a
+ a state add x
+ set res [a states]
+ lappend res [a state exists x]
+ lappend res [a state exists y]
+ a destroy
+ set res
+} {x 1 0}
+
+
+test fa-state-${setimpl}-2.3 {state add / states / exists} {
+ grammar::fa a
+ a state add x y
+ set res {}
+ lappend res [lsort [a states]]
+ lappend res [a state exists x]
+ lappend res [a state exists y]
+ a destroy
+ set res
+} {{x y} 1 1}
+
+
+test fa-state-${setimpl}-2.4 {state add, basic properties} {
+ grammar::fa a
+ a state add x
+ set res {}
+ lappend res [a final? x]
+ lappend res [a start? x]
+ lappend res [a symbols@ x]
+ a destroy
+ set res
+} {0 0 {}}
+
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+test fa-state-${setimpl}-3.0 {state delete} {
+ grammar::fa a
+ a state add x
+ set res [a states]
+ lappend res [a state exists x]
+ a state delete x
+ lappend res [a states]
+ lappend res [a state exists x]
+ a destroy
+ set res
+} {x 1 {} 0}
+
+test fa-state-${setimpl}-3.1 {state delete, variadic} {
+ grammar::fa a
+ a state add x y
+ set res {}
+ lappend res [lsort [a states]]
+ lappend res [a state exists x]
+ lappend res [a state exists y]
+ a state delete x y
+ lappend res [a states]
+ lappend res [a state exists x]
+ lappend res [a state exists y]
+ a destroy
+ set res
+} {{x y} 1 1 {} 0 0}
+
+test fa-state-${setimpl}-3.2 {state delete, loop} {
+ grammar::fa a
+ a state add a
+ a symbol add @
+ a next a @ --> a
+ a state delete a
+ a destroy
+} {}
+
+test fa-state-${setimpl}-3.3 {state delete, inbound transition} {
+ grammar::fa a
+ gen xyz!-=
+ set res [a next x @]
+ a state delete y
+ lappend res [a next x @]
+ a destroy
+ set res
+} {y {}}
+
+
+test fa-state-${setimpl}-3.4 {state delete, outbound transition} {
+ grammar::fa a
+ gen xy-
+ a state delete x
+ a state delete y
+ a symbol delete @
+ a destroy
+ set res {}
+} {}
+
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+test fa-state-${setimpl}-4.0 {state, exists} {
+ grammar::fa a
+ set res [a state exists x]
+ a destroy
+ set res
+} 0
+
+
+test fa-state-${setimpl}-4.1 {state, exists} {
+ grammar::fa a
+ a state add x
+ set res [a state exists x]
+ a destroy
+ set res
+} 1
+
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+test fa-state-${setimpl}-5.4 {state rename} {
+ grammar::fa a
+ a state add x y
+ a state rename x z
+ set res [a serialize]
+ a destroy
+ set res
+} {grammar::fa {} {z {0 0 {}} y {0 0 {}}}}
+
+
+test fa-state-${setimpl}-5.5 {state rename} {
+ grammar::fa a
+ a state add x y
+ a state rename y z
+ set res [a serialize]
+ a destroy
+ set res
+} {grammar::fa {} {x {0 0 {}} z {0 0 {}}}}
+
+
+test fa-state-${setimpl}-5.6 {state rename} {
+ grammar::fa a
+ a state add x y
+ a symbol add @
+ a next x @ --> y
+ a state rename x z
+ set res [a serialize]
+ a destroy
+ set res
+} {grammar::fa @ {z {0 0 {@ y}} y {0 0 {}}}}
+
+
+test fa-state-${setimpl}-5.7 {state rename} {
+ grammar::fa a
+ a state add x y
+ a symbol add @
+ a next x @ --> y
+ a state rename y z
+ set res [a serialize]
+ a destroy
+ set res
+} {grammar::fa @ {x {0 0 {@ z}} z {0 0 {}}}}
+
+
+test fa-state-${setimpl}-6.0 {state rename with loop, SF bug 2595296} {
+ grammar::fa a
+ a state add x
+ a symbol add @
+ a next x @ --> x
+ a state rename x y
+ set res [a serialize]
+ a destroy
+ set res
+} {grammar::fa @ {y {0 0 {@ y}}}}
+
+
+# -------------------------------------------------------------------------
+::tcltest::cleanupTests