summaryrefslogtreecommitdiffstats
path: root/tcllib/modules/grammar_fa/tests/fa_next.test
diff options
context:
space:
mode:
Diffstat (limited to 'tcllib/modules/grammar_fa/tests/fa_next.test')
-rw-r--r--tcllib/modules/grammar_fa/tests/fa_next.test421
1 files changed, 421 insertions, 0 deletions
diff --git a/tcllib/modules/grammar_fa/tests/fa_next.test b/tcllib/modules/grammar_fa/tests/fa_next.test
new file mode 100644
index 0000000..749d354
--- /dev/null
+++ b/tcllib/modules/grammar_fa/tests/fa_next.test
@@ -0,0 +1,421 @@
+# -*- 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_next.test,v 1.5 2007/04/12 03:43:14 andreas_kupries Exp $
+
+# -------------------------------------------------------------------------
+
+test fa-next-${setimpl}-1.0 {next} {
+ grammar::fa a
+ catch {a next} res
+ a destroy
+ set res
+} [tcltest::wrongNumArgs ::grammar::fa::Snit_methodnext {type selfns win self s sym args} 5]
+
+
+test fa-next-${setimpl}-1.1 {next} {
+ grammar::fa a
+ catch {a next a} res
+ a destroy
+ set res
+} [tcltest::wrongNumArgs ::grammar::fa::Snit_methodnext {type selfns win self s sym args} 5]
+
+
+test fa-next-${setimpl}-1.2 {next} {
+ grammar::fa a
+ catch {a next a b c} res
+ a destroy
+ set res
+} {wrong#args: ::a next s sym ?--> s'?}
+
+
+test fa-next-${setimpl}-1.3 {next} {
+ grammar::fa a
+ catch {a next a b c d e} res
+ a destroy
+ set res
+} {wrong#args: ::a next s sym ?--> s'?}
+
+
+test fa-next-${setimpl}-1.4 {next} {
+ grammar::fa a
+ catch {a next a b} res
+ a destroy
+ set res
+} {Illegal state "a"}
+
+
+test fa-next-${setimpl}-1.5 {next} {
+ grammar::fa a
+ a state add a
+ catch {a next a b} res
+ a destroy
+ set res
+} {Illegal symbol "b"}
+
+
+test fa-next-${setimpl}-1.6 {next} {
+ grammar::fa a
+ a state add a
+ a symbol add b
+ catch {a next a b --> c} res
+ a destroy
+ set res
+} {Illegal state "c"}
+
+
+test fa-next-${setimpl}-1.7 {next} {
+ grammar::fa a
+ a state add a
+ a state add c
+ a symbol add b
+ catch {a next a b x c} res
+ a destroy
+ set res
+} {Expected -->, got "x"}
+
+
+test fa-next-${setimpl}-1.8 {next} {
+ grammar::fa a
+ a state add a c
+ a symbol add b
+ a next a b --> c
+ catch {a next a b --> c} res
+ a destroy
+ set res
+} {Transition "(a, (b)) --> c" is already known}
+
+
+test fa-next-${setimpl}-1.9 {!next} {
+ grammar::fa a
+ catch {a !next} res
+ a destroy
+ set res
+} [tcltest::wrongNumArgs ::grammar::fa::Snit_method!next {type selfns win self s sym args} 5]
+
+
+test fa-next-${setimpl}-1.10 {!next} {
+ grammar::fa a
+ catch {a !next a} res
+ a destroy
+ set res
+} [tcltest::wrongNumArgs ::grammar::fa::Snit_method!next {type selfns win self s sym args} 5]
+
+
+test fa-next-${setimpl}-1.11 {!next} {
+ grammar::fa a
+ catch {a !next a b c} res
+ a destroy
+ set res
+} {wrong#args: ::a !next s sym ?--> s'?}
+
+
+test fa-next-${setimpl}-1.12 {!next} {
+ grammar::fa a
+ catch {a !next a b c d e} res
+ a destroy
+ set res
+} {wrong#args: ::a !next s sym ?--> s'?}
+
+
+test fa-next-${setimpl}-1.13 {!next} {
+ grammar::fa a
+ catch {a !next a b} res
+ a destroy
+ set res
+} {Illegal state "a"}
+
+
+test fa-next-${setimpl}-1.14 {!next} {
+ grammar::fa a
+ a state add a
+ catch {a !next a b} res
+ a destroy
+ set res
+} {Illegal symbol "b"}
+
+
+test fa-next-${setimpl}-1.15 {!next} {
+ grammar::fa a
+ a state add a
+ a symbol add b
+ catch {a !next a b --> c} res
+ a destroy
+ set res
+} {Illegal state "c"}
+
+
+test fa-next-${setimpl}-1.16 {!next} {
+ grammar::fa a
+ a state add a
+ a state add c
+ a symbol add b
+ catch {a !next a b x c} res
+ a destroy
+ set res
+} {Expected -->, got "x"}
+
+
+test fa-next-${setimpl}-1.17 {nextset} {
+ grammar::fa a
+ catch {a nextset} res
+ a destroy
+ set res
+} {wrong # args: should be "::grammar::fa::Snit_methodnextset type selfns win self states sym"}
+
+
+test fa-next-${setimpl}-1.18 {nextset} {
+ grammar::fa a
+ catch {a nextset a} res
+ a destroy
+ set res
+} {wrong # args: should be "::grammar::fa::Snit_methodnextset type selfns win self states sym"}
+
+
+test fa-next-${setimpl}-1.19 {nextset} {
+ grammar::fa a
+ catch {a nextset a b c} res
+ a destroy
+ set res
+} {wrong # args: should be "::grammar::fa::Snit_methodnextset type selfns win self states sym"}
+
+
+test fa-next-${setimpl}-1.20 {nextset} {
+ grammar::fa a
+ catch {a nextset a b} res
+ a destroy
+ set res
+} {Illegal symbol "b"}
+
+
+test fa-next-${setimpl}-1.21 {nextset} {
+ grammar::fa a
+ a symbol add b
+ catch {a nextset a b} res
+ a destroy
+ set res
+} {Illegal state "a"}
+
+
+test fa-next-${setimpl}-1.22 {nextset} {
+ grammar::fa a
+ a symbol add b
+ a state add a
+ catch {a nextset {a c} b} res
+ a destroy
+ set res
+} {Illegal state "c"}
+
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+test fa-next-${setimpl}-2.0 {next} {
+ grammar::fa a
+ a state add a
+ a symbol add b
+ set res [a next a b]
+ a destroy
+ set res
+} {}
+
+
+test fa-next-${setimpl}-2.1 {next} {
+ grammar::fa a
+ a state add a
+ a state add c
+ a symbol add b
+ a next a b --> c
+ set res [a next a b]
+ a destroy
+ set res
+} c
+
+
+test fa-next-${setimpl}-2.2 {next} {
+ grammar::fa a
+ a state add a c d
+ a symbol add b
+ a next a b --> c
+ a next a b --> d
+ set res [lsort [a next a b]]
+ a destroy
+ set res
+} {c d}
+
+
+test fa-next-${setimpl}-2.3 {next, loop} {
+ grammar::fa a
+ a state add a
+ a symbol add @
+ a next a @ --> a
+ set res [a next a @]
+ a destroy
+ set res
+} a
+
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+test fa-next-${setimpl}-3.0 {!next} {
+ set res {}
+ grammar::fa a
+ a state add a
+ a symbol add b
+ a next a b --> a
+ lappend res [a next a b]
+ a !next a b --> a
+ lappend res [a next a b]
+ a destroy
+ set res
+} {a {}}
+
+
+test fa-next-${setimpl}-3.1 {!next} {
+ set res {}
+ grammar::fa a
+ a state add a
+ a symbol add b
+ a next a b --> a
+ lappend res [a next a b]
+ a !next a b
+ lappend res [a next a b]
+ a destroy
+ set res
+} {a {}}
+
+
+test fa-next-${setimpl}-3.2 {!next} {
+ set res {}
+ grammar::fa a
+ a state add a
+ a state add b
+ a symbol add b
+ a next a b --> a
+ a next a b --> b
+ lappend res [lsort [a next a b]]
+ a !next a b --> a
+ lappend res [a next a b]
+ a destroy
+ set res
+} {{a b} b}
+
+
+test fa-next-${setimpl}-3.3 {!next} {
+ set res {}
+ grammar::fa a
+ a state add a
+ a state add b
+ a symbol add b
+ a next a b --> a
+ a next a b --> b
+ lappend res [lsort [a next a b]]
+ a !next a b
+ lappend res [a next a b]
+ a destroy
+ set res
+} {{a b} {}}
+
+
+test fa-next-${setimpl}-3.4 {!next} {
+ set res {}
+ grammar::fa a
+ a state add a
+ a symbol add b
+ a !next a b
+ a destroy
+ set res
+} {}
+
+
+test fa-next-${setimpl}-3.5 {!next} {
+ set res {}
+ grammar::fa a
+ a state add a
+ a symbol add b
+ a !next a b --> a
+ a destroy
+ set res
+} {}
+
+
+test fa-next-${setimpl}-3.6 {!next, loop} {
+ grammar::fa a
+ a state add a
+ a symbol add @
+ a next a @ --> a
+ set res [a next a @]
+ a !next a @ --> a
+ a destroy
+ set res
+} a
+
+
+test fa-next-${setimpl}-3.7 {!next, loop} {
+ grammar::fa a
+ a state add a
+ a symbol add @
+ a next a @ --> a
+ set res [a next a @]
+ a !next a @
+ a destroy
+ set res
+} a
+
+
+test fa-next-${setimpl}-3.8 {!next, loop} {
+ grammar::fa a
+ a state add a
+ a symbol add @ =
+ a next a @ --> a
+ a next a = --> a
+ a !next a @ --> a
+ a !next a = --> a
+ a destroy
+} {}
+
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+test fa-next-${setimpl}-4.0 {nextset} {
+ grammar::fa a
+ a symbol add b
+ a state add a
+ a state add c
+ set res [a nextset {a c} b]
+ a destroy
+ set res
+} {}
+
+
+test fa-next-${setimpl}-4.1 {nextset} {
+ grammar::fa a
+ a symbol add b
+ a state add a
+ a state add c
+ a next a b --> c
+ set res [a nextset {a c} b]
+ a destroy
+ set res
+} c
+
+
+test fa-next-${setimpl}-4.2 {nextset} {
+ grammar::fa a
+ a symbol add b
+ a state add a
+ a state add c
+ a next a b --> c
+ a next c b --> a
+ set res [lsort [a nextset {a c} b]]
+ a destroy
+ set res
+} {a c}
+
+
+# -------------------------------------------------------------------------
+::tcltest::cleanupTests