summaryrefslogtreecommitdiffstats
path: root/tests/compExpr.test
diff options
context:
space:
mode:
Diffstat (limited to 'tests/compExpr.test')
-rw-r--r--tests/compExpr.test216
1 files changed, 93 insertions, 123 deletions
diff --git a/tests/compExpr.test b/tests/compExpr.test
index 14c875d..f02e999 100644
--- a/tests/compExpr.test
+++ b/tests/compExpr.test
@@ -1,21 +1,18 @@
-# This file contains a collection of tests for the procedures in the file
-# tclCompExpr.c. Sourcing this file into Tcl runs the tests and generates
-# output for errors. No output means no errors were found.
+# This file contains a collection of tests for the procedures in the
+# file tclCompExpr.c. Sourcing this file into Tcl runs the tests and
+# generates output for errors. No output means no errors were found.
#
# Copyright (c) 1997 Sun Microsystems, Inc.
# Copyright (c) 1998-1999 by Scriptics Corporation.
#
-# See the file "license.terms" for information on usage and redistribution of
-# this file, and for a DISCLAIMER OF ALL WARRANTIES.
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
-if {"::tcltest" ni [namespace children]} {
- package require tcltest 2
+if {[lsearch [namespace children] ::tcltest] == -1} {
+ package require tcltest
namespace import -force ::tcltest::*
}
-::tcltest::loadTestedCommands
-catch [list package require -exact Tcltest [info patchlevel]]
-
if {[catch {expr T1()} msg] && $msg eq {invalid command name "tcl::mathfunc::T1"}} {
testConstraint testmathfunctions 0
} else {
@@ -26,7 +23,7 @@ if {[catch {expr T1()} msg] && $msg eq {invalid command name "tcl::mathfunc::T1"
testConstraint memory [llength [info commands memory]]
catch {unset a}
-
+
test compExpr-1.1 {TclCompileExpr procedure, successful expr parse and compile} {
expr 1+2
} 3
@@ -36,17 +33,17 @@ test compExpr-1.2 {TclCompileExpr procedure, error parsing expr} -body {
test compExpr-1.3 {TclCompileExpr procedure, error compiling expr} -body {
list [catch {expr "foo(123)"} msg] $msg
} -match glob -result {1 {* "*foo"}}
+
test compExpr-1.4 {TclCompileExpr procedure, expr has no operators} {
set a {0o00123}
expr {$a}
} 83
-test compExpr-2.1 {CompileSubExpr procedure, TCL_TOKEN_WORD parse token} -setup {
- unset -nocomplain a
-} -body {
+test compExpr-2.1 {CompileSubExpr procedure, TCL_TOKEN_WORD parse token} {
+ catch {unset a}
set a 27
expr {"foo$a" < "bar"}
-} -result 0
+} 0
test compExpr-2.2 {CompileSubExpr procedure, error compiling TCL_TOKEN_WORD parse token} -body {
expr {"00[expr 1+]" + 17}
} -returnCodes error -match glob -result *
@@ -69,33 +66,30 @@ test compExpr-2.7 {CompileSubExpr procedure, TCL_TOKEN_COMMAND parse token} {
test compExpr-2.8 {CompileSubExpr procedure, error in TCL_TOKEN_COMMAND parse token} -body {
expr {[foo "bar"xxx] + 17}
} -returnCodes error -match glob -result *
-test compExpr-2.9 {CompileSubExpr procedure, TCL_TOKEN_VARIABLE parse token} -setup {
- unset -nocomplain a
-} -body {
+test compExpr-2.9 {CompileSubExpr procedure, TCL_TOKEN_VARIABLE parse token} {
+ catch {unset a}
set a 123
expr {$a*2}
-} -result 246
-test compExpr-2.10 {CompileSubExpr procedure, TCL_TOKEN_VARIABLE parse token} -setup {
- unset -nocomplain a
- unset -nocomplain b
-} -body {
+} 246
+test compExpr-2.10 {CompileSubExpr procedure, TCL_TOKEN_VARIABLE parse token} {
+ catch {unset a}
+ catch {unset b}
set a(george) martha
set b geo
expr {$a(${b}rge)}
-} -result martha
-test compExpr-2.11 {CompileSubExpr procedure, error in TCL_TOKEN_VARIABLE parse token} -body {
- unset -nocomplain a
- expr {$a + 17}
-} -returnCodes error -result {can't read "a": no such variable}
+} martha
+test compExpr-2.11 {CompileSubExpr procedure, error in TCL_TOKEN_VARIABLE parse token} {
+ catch {unset a}
+ list [catch {expr {$a + 17}} msg] $msg
+} {1 {can't read "a": no such variable}}
test compExpr-2.12 {CompileSubExpr procedure, TCL_TOKEN_SUB_EXPR parse token} {
expr {27||3? 3<<(1+4) : 4&&9}
} 96
-test compExpr-2.13 {CompileSubExpr procedure, error in TCL_TOKEN_SUB_EXPR parse token} -setup {
- unset -nocomplain a
-} -body {
+test compExpr-2.13 {CompileSubExpr procedure, error in TCL_TOKEN_SUB_EXPR parse token} {
+ catch {unset a}
set a 15
list [catch {expr {27 || "$a[expr 1+]00"}} msg] $msg
-} -result {0 1}
+} {0 1}
test compExpr-2.14 {CompileSubExpr procedure, TCL_TOKEN_OPERATOR token, op found} {
expr {5*6}
} 30
@@ -153,12 +147,11 @@ test compExpr-2.31 {CompileSubExpr procedure, TCL_TOKEN_OPERATOR token, normal o
test compExpr-2.32 {CompileSubExpr procedure, TCL_TOKEN_OPERATOR token, normal operator, 1 operand} {
expr {~4}
} -5
-test compExpr-2.33 {CompileSubExpr procedure, TCL_TOKEN_OPERATOR token, normal operator, comparison} -setup {
- unset -nocomplain a
-} -body {
+test compExpr-2.33 {CompileSubExpr procedure, TCL_TOKEN_OPERATOR token, normal operator, comparison} {
+ catch {unset a}
set a 15
expr {$a==15} ;# compiled out-of-line to runtime call on Tcl_ExprObjCmd
-} -result 1
+} 1
test compExpr-2.34 {CompileSubExpr procedure, TCL_TOKEN_OPERATOR token, special operator} {
expr {+2}
} 2
@@ -180,84 +173,72 @@ test compExpr-2.39 {CompileSubExpr procedure, TCL_TOKEN_OPERATOR token, special
test compExpr-2.40 {CompileSubExpr procedure, TCL_TOKEN_OPERATOR token, special operator} {
expr {4-2}
} 2
-test compExpr-2.41 {CompileSubExpr procedure, TCL_TOKEN_OPERATOR token, special operator} -setup {
- unset -nocomplain a
-} -body {
+test compExpr-2.41 {CompileSubExpr procedure, TCL_TOKEN_OPERATOR token, special operator} {
+ catch {unset a}
set a true
expr {0||$a}
-} -result 1
-test compExpr-2.42 {CompileSubExpr procedure, error in TCL_TOKEN_SUB_EXPR parse token} -setup {
- unset -nocomplain a
-} -body {
+} 1
+test compExpr-2.42 {CompileSubExpr procedure, error in TCL_TOKEN_SUB_EXPR parse token} {
+ catch {unset a}
set a 15
list [catch {expr {27 || "$a[expr 1+]00"}} msg] $msg
-} -result {0 1}
-test compExpr-2.43 {CompileSubExpr procedure, TCL_TOKEN_OPERATOR token, special operator} -setup {
- unset -nocomplain a
-} -body {
+} {0 1}
+test compExpr-2.43 {CompileSubExpr procedure, TCL_TOKEN_OPERATOR token, special operator} {
+ catch {unset a}
set a false
expr {3&&$a}
-} -result 0
-test compExpr-2.44 {CompileSubExpr procedure, TCL_TOKEN_OPERATOR token, special operator} -setup {
- unset -nocomplain a
-} -body {
+} 0
+test compExpr-2.44 {CompileSubExpr procedure, TCL_TOKEN_OPERATOR token, special operator} {
+ catch {unset a}
set a false
expr {$a||1? 1 : 0}
-} -result 1
-test compExpr-2.45 {CompileSubExpr procedure, error in TCL_TOKEN_SUB_EXPR parse token} -setup {
- unset -nocomplain a
-} -body {
+} 1
+test compExpr-2.45 {CompileSubExpr procedure, error in TCL_TOKEN_SUB_EXPR parse token} {
+ catch {unset a}
set a 15
list [catch {expr {1? 54 : "$a[expr 1+]00"}} msg] $msg
-} -result {0 54}
+} {0 54}
-test compExpr-3.1 {CompileLandOrLorExpr procedure, numeric 1st operand} -setup {
- unset -nocomplain a
-} -body {
+test compExpr-3.1 {CompileLandOrLorExpr procedure, numeric 1st operand} {
+ catch {unset a}
set a 2
expr {[set a]||0}
-} -result 1
-test compExpr-3.2 {CompileLandOrLorExpr procedure, nonnumeric 1st operand} -setup {
- unset -nocomplain a
-} -body {
+} 1
+test compExpr-3.2 {CompileLandOrLorExpr procedure, nonnumeric 1st operand} {
+ catch {unset a}
set a no
expr {$a&&1}
-} -result 0
+} 0
test compExpr-3.3 {CompileSubExpr procedure, error in 1st operand} -body {
expr {[expr *2]||0}
} -returnCodes error -match glob -result *
-test compExpr-3.4 {CompileLandOrLorExpr procedure, result is 1 or 0} -setup {
- unset -nocomplain a
- unset -nocomplain b
-} -body {
+test compExpr-3.4 {CompileLandOrLorExpr procedure, result is 1 or 0} {
+ catch {unset a}
+ catch {unset b}
set a no
set b true
expr {$a || $b}
-} -result 1
-test compExpr-3.5 {CompileLandOrLorExpr procedure, short-circuit semantics} -setup {
- unset -nocomplain a
-} -body {
+} 1
+test compExpr-3.5 {CompileLandOrLorExpr procedure, short-circuit semantics} {
+ catch {unset a}
set a yes
expr {$a || [exit]}
-} -result 1
-test compExpr-3.6 {CompileLandOrLorExpr procedure, short-circuit semantics} -setup {
- unset -nocomplain a
-} -body {
+} 1
+test compExpr-3.6 {CompileLandOrLorExpr procedure, short-circuit semantics} {
+ catch {unset a}
set a no
expr {$a && [exit]}
-} -result 0
-test compExpr-3.7 {CompileLandOrLorExpr procedure, numeric 2nd operand} -setup {
- unset -nocomplain a
-} -body {
+} 0
+test compExpr-3.7 {CompileLandOrLorExpr procedure, numeric 2nd operand} {
+ catch {unset a}
set a 2
expr {0||[set a]}
-} -result 1
-test compExpr-3.8 {CompileLandOrLorExpr procedure, nonnumeric 2nd operand} -setup {
- unset -nocomplain a
-} -body {
+} 1
+test compExpr-3.8 {CompileLandOrLorExpr procedure, nonnumeric 2nd operand} {
+ catch {unset a}
set a no
expr {1&&$a}
-} -result 0
+} 0
test compExpr-3.9 {CompileLandOrLorExpr procedure, error in 2nd operand} -body {
expr {0||[expr %2]}
} -returnCodes error -match glob -result *
@@ -267,48 +248,42 @@ test compExpr-3.10 {CompileLandOrLorExpr procedure, long lor/land arm} {
expr {[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]] || [string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]] || [string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]] || [string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]&&[string compare [format %c $i] [string index $a $i]]}
} 1
-test compExpr-4.1 {CompileCondExpr procedure, simple test} -setup {
- unset -nocomplain a
-} -body {
+test compExpr-4.1 {CompileCondExpr procedure, simple test} {
+ catch {unset a}
set a 2
expr {($a > 1)? "ok" : "nope"}
-} -result ok
-test compExpr-4.2 {CompileCondExpr procedure, complex test, convert to numeric} -setup {
- unset -nocomplain a
-} -body {
+} ok
+test compExpr-4.2 {CompileCondExpr procedure, complex test, convert to numeric} {
+ catch {unset a}
set a no
expr {[set a]? 27 : -54}
-} -result -54
+} -54
test compExpr-4.3 {CompileCondExpr procedure, error in test} -body {
expr {[expr *2]? +1 : -1}
} -returnCodes error -match glob -result *
-test compExpr-4.4 {CompileCondExpr procedure, simple "true" clause} -setup {
- unset -nocomplain a
-} -body {
+test compExpr-4.4 {CompileCondExpr procedure, simple "true" clause} {
+ catch {unset a}
set a no
expr {1? (27-2) : -54}
-} -result 25
-test compExpr-4.5 {CompileCondExpr procedure, convert "true" clause to numeric} -setup {
- unset -nocomplain a
-} -body {
+} 25
+test compExpr-4.5 {CompileCondExpr procedure, convert "true" clause to numeric} {
+ catch {unset a}
set a no
expr {1? $a : -54}
-} -result no
+} no
test compExpr-4.6 {CompileCondExpr procedure, error in "true" clause} -body {
expr {1? [expr *2] : -127}
} -returnCodes error -match glob -result *
-test compExpr-4.7 {CompileCondExpr procedure, simple "false" clause} -setup {
- unset -nocomplain a
-} -body {
+test compExpr-4.7 {CompileCondExpr procedure, simple "false" clause} {
+ catch {unset a}
set a no
expr {(2-2)? -3.14159 : "nope"}
-} -result nope
-test compExpr-4.8 {CompileCondExpr procedure, convert "false" clause to numeric} -setup {
- unset -nocomplain a
-} -body {
+} nope
+test compExpr-4.8 {CompileCondExpr procedure, convert "false" clause to numeric} {
+ catch {unset a}
set a 0o0123
expr {0? 42 : $a}
-} -result 83
+} 83
test compExpr-4.9 {CompileCondExpr procedure, error in "false" clause} {
list [catch {expr {1? 15 : [expr *2]}} msg] $msg
} {0 15}
@@ -317,8 +292,8 @@ test compExpr-5.1 {CompileMathFuncCall procedure, math function found} {
format %.6g [expr atan2(1.0, 2.0)]
} 0.463648
test compExpr-5.2 {CompileMathFuncCall procedure, math function not found} -body {
- expr {do_it()}
-} -returnCodes error -match glob -result {* "*do_it"}
+ list [catch {expr {do_it()}} msg] $msg
+} -match glob -result {1 {* "*do_it"}}
test compExpr-5.3 {CompileMathFuncCall: call registered math function} testmathfunctions {
expr 3*T1()-1
} 368
@@ -326,8 +301,8 @@ test compExpr-5.4 {CompileMathFuncCall: call registered math function} testmathf
expr T2()*3
} 1035
test compExpr-5.5 {CompileMathFuncCall procedure, too few arguments} -body {
- expr {atan2(1.0)}
-} -returnCodes error -match glob -result {too few arguments for math function*}
+ list [catch {expr {atan2(1.0)}} msg] $msg
+} -match glob -result {1 {too few arguments for math function*}}
test compExpr-5.6 {CompileMathFuncCall procedure, complex argument} {
format %.6g [expr pow(2.1, 27.5-(24.4*(5%2)))]
} 9.97424
@@ -335,11 +310,11 @@ test compExpr-5.7 {CompileMathFuncCall procedure, error in argument} -body {
expr {sinh(2.*)}
} -returnCodes error -match glob -result *
test compExpr-5.8 {CompileMathFuncCall procedure, too many arguments} -body {
- expr {sinh(2.0, 3.0)}
-} -returnCodes error -match glob -result {too many arguments for math function*}
+ list [catch {expr {sinh(2.0, 3.0)}} msg] $msg
+} -match glob -result {1 {too many arguments for math function*}}
test compExpr-5.9 {CompileMathFuncCall procedure, too many arguments} -body {
- expr {0 <= rand(5.2)}
-} -returnCodes error -match glob -result {too many arguments for math function*}
+ list [catch {expr {0 <= rand(5.2)}} msg] $msg
+} -match glob -result {1 {too many arguments for math function*}}
test compExpr-6.1 {LogSyntaxError procedure, error in expr longer than 60 chars} -body {
expr {(+0123456)*(+0123456)*(+0123456)*(+0123456)*(+0123456)*(+0123456)*(+0123456)/} -1 foo 3
@@ -383,14 +358,9 @@ test compExpr-7.2 {[Bug 1869989]: expr parser memleak} -constraints memory -setu
unset end i tmp
rename getbytes {}
} -result 0
-
+
# cleanup
catch {unset a}
catch {unset b}
::tcltest::cleanupTests
return
-
-# Local Variables:
-# mode: tcl
-# fill-column: 78
-# End: