summaryrefslogtreecommitdiffstats
path: root/tcllib/modules/pt/tests/pt_pexpression.tests
diff options
context:
space:
mode:
Diffstat (limited to 'tcllib/modules/pt/tests/pt_pexpression.tests')
-rw-r--r--tcllib/modules/pt/tests/pt_pexpression.tests371
1 files changed, 371 insertions, 0 deletions
diff --git a/tcllib/modules/pt/tests/pt_pexpression.tests b/tcllib/modules/pt/tests/pt_pexpression.tests
new file mode 100644
index 0000000..e897714
--- /dev/null
+++ b/tcllib/modules/pt/tests/pt_pexpression.tests
@@ -0,0 +1,371 @@
+# -*- tcl -*-
+# Testsuite for pt::pe.
+# Called by the ../pe_structure.test driver file.
+
+test pt-pe-1.0 {verify, wrong#args} -body {
+ pt::pe verify
+} -returnCodes error -result {wrong # args: should be "pt::pe verify serial ?canonvar?"}
+
+test pt-pe-1.1 {verify, wrong#args} -body {
+ pt::pe verify PE PFX XXX
+} -returnCodes error -result {wrong # args: should be "pt::pe verify serial ?canonvar?"}
+
+test pt-pe-2.0 {print, wrong#args} -body {
+ pt::pe print
+} -returnCodes error -result {wrong # args: should be "pt::pe print serial"}
+
+test pt-pe-2.1 {print, wrong#args} -body {
+ pt::pe print PE XXX
+} -returnCodes error -result {wrong # args: should be "pt::pe print serial"}
+
+test pt-pe-5.1 {equal, wrong#args} -body {
+ pt::pe equal
+} -returnCodes error -result {wrong # args: should be "pt::pe equal seriala serialb"}
+
+test pt-pe-5.2 {equal, wrong#args} -body {
+ pt::pe equal PE
+} -returnCodes error -result {wrong # args: should be "pt::pe equal seriala serialb"}
+
+test pt-pe-5.3 {equal, wrong#args} -body {
+ pt::pe equal PE PEB XXX
+} -returnCodes error -result {wrong # args: should be "pt::pe equal seriala serialb"}
+
+# -------------------------------------------------------------------------
+# Various bad serials. Mainly testing the arity checks.
+set n 0
+
+# Non-arity errors
+foreach {badserial expected} {
+ {} {got empty string}
+ {x {t A} {}} {got empty string}
+ {foo} {invalid operator "foo"}
+} {
+ test pt-pe-6.$n "pt::pe verify, error" -body {
+ pt::pe verify $badserial
+ } -returnCodes error -result "error in serialization: $expected"
+ incr n
+}
+
+# Arity 0/0
+foreach {op} {
+ epsilon
+ alpha
+ alnum
+ ascii
+ digit
+ graph
+ lower
+ print
+ punct
+ space
+ upper
+ wordchar
+ xdigit
+ ddigit
+ dot
+} {
+ test pt-pe-6.$n "pt::pe verify, arity 0/0 error, $op" -body {
+ pt::pe verify [list $op xxx]
+ } -returnCodes error -result "error in serialization: wrong#args for \"$op\""
+ incr n
+}
+
+# Arity 1/1
+foreach {op} {
+ n
+ t
+ &
+ !
+ *
+ +
+ ?
+} {
+ test pt-pe-6.$n "pt::pe verify, arity 1/1 error, $op" -body {
+ pt::pe verify [list $op]
+ } -returnCodes error -result "error in serialization: wrong#args for \"$op\""
+ incr n
+ test pt-pe-6.$n "pt::pe verify, arity 1/1 error, $op" -body {
+ pt::pe verify [list $op xxx yyy]
+ } -returnCodes error -result "error in serialization: wrong#args for \"$op\""
+ incr n
+}
+
+# Arity 2/2
+foreach {op} {
+ ..
+} {
+ test pt-pe-6.$n "pt::pe verify, arity 2/2 error, $op" -body {
+ pt::pe verify [list $op]
+ } -returnCodes error -result "error in serialization: wrong#args for \"$op\""
+ incr n
+ test pt-pe-6.$n "pt::pe verify, arity 2/2 error, $op" -body {
+ pt::pe verify [list $op xxx]
+ } -returnCodes error -result "error in serialization: wrong#args for \"$op\""
+ incr n
+ test pt-pe-6.$n "pt::pe verify, arity 2/2 error, $op" -body {
+ pt::pe verify [list $op xxx yyy zzz]
+ } -returnCodes error -result "error in serialization: wrong#args for \"$op\""
+ incr n
+}
+
+# Arity 1/oo
+foreach {op} {
+ x /
+} {
+ test pt-pe-6.$n "pt::pe verify, arity 1/oo error, $op" -body {
+ pt::pe verify [list $op]
+ } -returnCodes error -result "error in serialization: wrong#args for \"$op\""
+ incr n
+}
+
+# -------------------------------------------------------------------------
+
+TestFilesProcess $mytestdir ok pe_serial pe_serial-print -> n label input data expected {
+ # The 'expected' data is irrelevant here, only used to satisfy
+ # TestFilesProcess' syntax.
+ test pt-pe-7.$n "pt::pe verify, $label, ok :- $input" -body {
+ pt::pe verify $data
+ } -result {}
+
+ test pt-pe-7.$n "pt::pe verify, $label, ok :- $input" -body {
+ pt::pe verify $data IGNORED
+ } -result {}
+}
+
+# -------------------------------------------------------------------------
+
+TestFilesProcess $mytestdir ok pe_serial pe_serial-print -> n label input data expected {
+ # The 'expected' data is irrelevant here, only used to satisfy
+ # TestFilesProcess' syntax.
+ test pt-pe-8.$n "pt::pe print, $label :- $input" -body {
+ pt::pe print $data
+ } -result $expected
+}
+
+#----------------------------------------------------------------------
+
+TestFilesProcess $mytestdir ok pe_serial pe_serial-tddump -> n label input data expected {
+ # The 'expected' data is irrelevant here, only used to satisfy
+ # TestFilesProcess' syntax.
+ test pt-pe-11.$n "pt::pe topdown, $label :- $input" -setup {
+ proc DUMP {pe args} { global res ; lappend res $pe }
+ set res {}
+ } -body {
+ pt::pe topdown DUMP $data
+ join $res \n
+ } -cleanup {
+ rename DUMP {}
+ unset res
+ } -result $expected
+}
+
+#----------------------------------------------------------------------
+
+TestFilesProcess $mytestdir ok pe_serial pe_serial-budump -> n label input data expected {
+ # The 'expected' data is irrelevant here, only used to satisfy
+ # TestFilesProcess' syntax.
+ test pt-pe-12.$n "pt::pe bottomup, $label :- $input" -setup {
+ proc DUMP {pe args} { global res ; lappend res $pe ; return $pe }
+ set res {}
+ } -body {
+ pt::pe bottomup DUMP $data
+ join $res \n
+ } -cleanup {
+ rename DUMP {}
+ unset res
+ } -result $expected
+}
+
+#----------------------------------------------------------------------
+
+test pt-pe-13.0 {equal, yes} -body {
+ pt::pe equal {n X} {n X}
+} -result 1
+
+test pt-pe-13.1 {equal, nested, yes} -body {
+ pt::pe equal {x {n X}} {x {n X}}
+} -result 1
+
+test pt-pe-13.2 {equal, no} -body {
+ pt::pe equal {t a} {n X}
+} -result 0
+
+test pt-pe-13.3 {equal, nested, no} -body {
+ pt::pe equal {x {t a}} {x {n X}}
+} -result 0
+
+test pt-pe-13.4 {equal, nested, no} -body {
+ pt::pe equal {x {n X}} {x {n X} {t a}}
+} -result 0
+
+# -------------------------------------------------------------------------
+
+test pt-pe-14.0 {verify-as-canonical, wrong#args} -body {
+ pt::pe verify-as-canonical
+} -returnCodes error -result {wrong # args: should be "pt::pe verify-as-canonical serial"}
+
+test pt-pe-14.1 {verify-as-canonical, wrong#args} -body {
+ pt::pe verify-as-canonical PE XXX
+} -returnCodes error -result {wrong # args: should be "pt::pe verify-as-canonical serial"}
+
+test pt-pe-15.0 {canonicalize, wrong#args} -body {
+ pt::pe canonicalize
+} -returnCodes error -result {wrong # args: should be "pt::pe canonicalize serial"}
+
+test pt-pe-15.1 {canonicalize, wrong#args} -body {
+ pt::pe canonicalize PE XXX
+} -returnCodes error -result {wrong # args: should be "pt::pe canonicalize serial"}
+
+#----------------------------------------------------------------------
+
+test pt-pe-16.0 {verify-as-canonical, ok} -body {
+ pt::pe verify-as-canonical {x {n X} {t a}}
+} -result {}
+
+test pt-pe-16.1 {verify-as-canonical, ok} -body {
+ pt::pe verify-as-canonical {x {/ {n F} {.. a z}} {t a}}
+} -result {}
+
+test pt-pe-16.2 {verify-as-canonical, bad} -body {
+ pt::pe verify-as-canonical {x {n X } {t a}}
+} -returnCodes error -result {error in serialization: has irrelevant whitespace or (.. X X)}
+
+test pt-pe-16.3 {verify-as-canonical, bad} -body {
+ pt::pe verify-as-canonical {x {n
+X } {t a}}
+} -returnCodes error -result {error in serialization: has irrelevant whitespace or (.. X X)}
+
+test pt-pe-16.4 {verify-as-canonical, bad} -body {
+ pt::pe verify-as-canonical {
+ x
+ {
+ /
+ {n F}
+ {.. a z}
+ }
+ {t a}
+ }
+} -returnCodes error -result {error in serialization: has irrelevant whitespace or (.. X X)}
+
+test pt-pe-16.5 {verify-as-canonical, bad} -body {
+ pt::pe verify-as-canonical {x {.. X X} {t a}}
+} -returnCodes error -result {error in serialization: has irrelevant whitespace or (.. X X)}
+
+#----------------------------------------------------------------------
+
+test pt-pe-17.0 {canonicalize} -body {
+ pt::pe canonicalize {x {n X} {t a}}
+} -result {x {n X} {t a}}
+
+test pt-pe-17.1 {canonicalize} -body {
+ pt::pe canonicalize {x {/ {n F} {.. a z}} {t a}}
+} -result {x {/ {n F} {.. a z}} {t a}}
+
+test pt-pe-17.2 {canonicalize} -body {
+ pt::pe canonicalize {x {n X } {t a}}
+} -result {x {n X} {t a}}
+
+test pt-pe-17.3 {canonicalize} -body {
+ pt::pe canonicalize {x {n
+X } {t a}}
+} -result {x {n X} {t a}}
+
+test pt-pe-17.4 {canonicalize} -body {
+ pt::pe canonicalize {
+ x
+ {
+ /
+ {n F}
+ {.. a z}
+ }
+ {t a}
+ }
+} -result {x {/ {n F} {.. a z}} {t a}}
+
+test pt-pe-17.5 {canonicalize} -body {
+ pt::pe canonicalize {x {.. X X} {t a}}
+} -result {x {t X} {t a}}
+
+#----------------------------------------------------------------------
+
+test pt-pe-18.0 {equal} -body {
+ pt::pe equal \
+ {x {n X} {t a}} \
+ {x {n X} {t a}}
+} -result 1
+
+test pt-pe-18.1 {equal} -body {
+ pt::pe equal \
+ {x {/ {n F} {.. a z}} {t a}} \
+ {x {/ {n F} {.. a z}} {t a}}
+} -result 1
+
+test pt-pe-18.2 {equal} -body {
+ pt::pe equal \
+ {x {n X } {t a}} \
+ {x {n X} {t a}}
+} -result 1
+
+test pt-pe-18.3 {equal} -body {
+ pt::pe equal \
+ {x {n X} {t a}} \
+ {x {n
+X } {t a}}
+} -result 1
+
+test pt-pe-18.4 {equal} -body {
+ pt::pe equal \
+ {x {/ {n F} {.. a z}} {t a}} \
+ {
+ x
+ {
+ /
+ {n F}
+ {.. a z}
+ }
+ {t a}
+ }
+} -result 1
+
+test pt-pe-18.5 {equal} -body {
+ pt::pe equal \
+ {x {n X} {t a}} \
+ {x {n X} {t -}}
+} -result 0
+
+test pt-pe-18.6 {equal} -body {
+ pt::pe equal \
+ {x {/ {n F} {.. a z}} {t a}} \
+ {x {/ {n F} {.. a d}} {t a}}
+} -result 0
+
+test pt-pe-18.7 {equal} -body {
+ pt::pe equal \
+ {x {n X } {t a}} \
+ {x {n Z} {t a}}
+} -result 0
+
+test pt-pe-18.8 {equal} -body {
+ pt::pe equal \
+ {x {n X} {t a}} \
+ {/ {n
+X } {t a}}
+} -result 0
+
+test pt-pe-18.9 {equal} -body {
+ pt::pe equal \
+ {x {/ {n F} {.. a z}} {t a}} \
+ {
+ x
+ {
+ /
+ {* {n F}}
+ {.. a z}
+ }
+ {t a}
+ }
+} -result 0
+
+#----------------------------------------------------------------------
+
+unset n badserial expected label input data