diff options
Diffstat (limited to 'tests/execute.test')
-rw-r--r-- | tests/execute.test | 145 |
1 files changed, 125 insertions, 20 deletions
diff --git a/tests/execute.test b/tests/execute.test index e82ac57..c59292a 100644 --- a/tests/execute.test +++ b/tests/execute.test @@ -14,7 +14,7 @@ # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# RCS: @(#) $Id: execute.test,v 1.9 2001/02/23 21:41:01 msofer Exp $ +# RCS: @(#) $Id: execute.test,v 1.10 2002/02/15 14:28:50 dkf Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest @@ -33,6 +33,9 @@ set ::tcltest::testConstraints(testobj) \ && [info commands teststringobj] != {} \ && [info commands testobj] != {}}] +set ::tcltest::testConstraints(longIs32bit) \ + [expr {int(0x80000000) < 0}] + # Tests for the omnibus TclExecuteByteCode function: # INST_DONE not tested @@ -589,6 +592,127 @@ test execute-6.2 {Evaluate an expression in a variable; compile the first time, set res "[a $w]:[a $w]" } {15:15} +test execute-7.0 {Wide int handling in INST_JUMP_FALSE/LAND} {longIs32bit} { + set x 0x100000000 + expr {$x && 1} +} 1 +test execute-7.1 {Wide int handling in INST_JUMP_FALSE/LAND} {longIs32bit} { + expr {0x100000000 && 1} +} 1 +test execute-7.2 {Wide int handling in INST_JUMP_FALSE/LAND} {longIs32bit} { + expr {1 && 0x100000000} +} 1 +test execute-7.3 {Wide int handling in INST_JUMP_FALSE/LAND} {longIs32bit} { + expr {wide(0x100000000) && 1} +} 1 +test execute-7.4 {Wide int handling in INST_JUMP_FALSE/LAND} {longIs32bit} { + expr {1 && wide(0x100000000)} +} 1 +test execute-7.5 {Wide int handling in INST_EQ} {longIs32bit} { + expr {4 == (wide(1)+wide(3))} +} 1 +test execute-7.6 {Wide int handling in INST_EQ and [incr]} {longIs32bit} { + set x 399999999999 + expr {400000000000 == [incr x]} +} 1 +# wide ints have more bits of precision than doubles, but we convert anyway +test execute-7.7 {Wide int handling in INST_EQ and [incr]} {longIs32bit} { + set x [expr {wide(1)<<62}] + set y [expr {$x+1}] + expr {double($x) == double($y)} +} 1 +test execute-7.8 {Wide int conversions can change sign} {longIs32bit} { + set x 0x80000000 + expr {int($x) < wide($x)} +} 1 +test execute-7.9 {Wide int handling in INST_MOD} {longIs32bit} { + expr {(wide(1)<<60) % ((wide(47)<<45)-1)} +} 316659348800185 +test execute-7.10 {Wide int handling in INST_MOD} {longIs32bit} { + expr {((wide(1)<<60)-1) % 0x400000000} +} 17179869183 +test execute-7.11 {Wide int handling in INST_LSHIFT} {longIs32bit} { + expr wide(42)<<30 +} 45097156608 +test execute-7.12 {Wide int handling in INST_LSHIFT} {longIs32bit} { + expr 12345678901<<3 +} 98765431208 +test execute-7.13 {Wide int handling in INST_RSHIFT} {longIs32bit} { + expr 0x543210febcda9876>>7 +} 47397893236700464 +test execute-7.14 {Wide int handling in INST_RSHIFT} {longIs32bit} { + expr 0x9876543210febcda>>7 +} -58286587177206407 +test execute-7.15 {Wide int handling in INST_BITOR} {longIs32bit} { + expr 0x9876543210febcda | 0x543210febcda9876 +} -2560765885044310786 +test execute-7.16 {Wide int handling in INST_BITXOR} {longIs32bit} { + expr 0x9876543210febcda ^ 0x543210febcda9876 +} -3727778945703861076 +test execute-7.17 {Wide int handling in INST_BITAND} {longIs32bit} { + expr 0x9876543210febcda & 0x543210febcda9876 +} 1167013060659550290 +test execute-7.18 {Wide int handling in INST_ADD} {longIs32bit} { + expr wide(0x7fffffff)+wide(0x7fffffff) +} 4294967294 +test execute-7.19 {Wide int handling in INST_ADD} {longIs32bit} { + expr 0x7fffffff+wide(0x7fffffff) +} 4294967294 +test execute-7.20 {Wide int handling in INST_ADD} {longIs32bit} { + expr wide(0x7fffffff)+0x7fffffff +} 4294967294 +test execute-7.21 {Wide int handling in INST_ADD} {longIs32bit} { + expr double(0x7fffffff)+wide(0x7fffffff) +} 4294967294.0 +test execute-7.22 {Wide int handling in INST_ADD} {longIs32bit} { + expr wide(0x7fffffff)+double(0x7fffffff) +} 4294967294.0 +test execute-7.23 {Wide int handling in INST_SUB} {longIs32bit} { + expr 0x123456789a-0x20406080a +} 69530054800 +test execute-7.24 {Wide int handling in INST_MULT} {longIs32bit} { + expr 0x123456789a*193 +} 15090186251290 +test execute-7.25 {Wide int handling in INST_DIV} {longIs32bit} { + expr 0x123456789a/193 +} 405116546 +test execute-7.26 {Wide int handling in INST_UPLUS} {longIs32bit} { + set x 0x123456871234568 + expr {+ $x} +} 81985533099853160 +test execute-7.27 {Wide int handling in INST_UMINUS} {longIs32bit} { + set x 0x123456871234568 + expr {- $x} +} -81985533099853160 +test execute-7.28 {Wide int handling in INST_LNOT} {longIs32bit} { + set x 0x123456871234568 + expr {! $x} +} 0 +test execute-7.29 {Wide int handling in INST_BITNOT} {longIs32bit} { + set x 0x123456871234568 + expr {~ $x} +} -81985533099853161 +test execute-7.30 {Wide int handling in function call} {longIs32bit} { + set x 0x12345687123456 + incr x + expr {sin($x) == sin(double($x))} +} 1 +test execute-7.31 {Wide int handling in abs()} {longIs32bit} { + set x 0xa23456871234568 + incr x + set y 0x123456871234568 + concat [expr {abs($x)}] [expr {abs($y)}] +} {730503879441204585 81985533099853160} +test execute-7.32 {Wide int handling} {longIs32bit} { + expr {1024 * 1024 * 1024 * 1024} +} 0 +test execute-7.33 {Wide int handling} {longIs32bit} { + expr {0x1 * 1024 * 1024 * 1024 * 1024} +} 0 +test execute-7.34 {Wide int handling} {longIs32bit} { + expr {wide(0x1) * 1024 * 1024 * 1024 * 1024} +} 1099511627776 + # cleanup catch {eval namespace delete [namespace children :: test_ns_*]} catch {rename foo ""} @@ -600,22 +724,3 @@ catch {unset y} catch {unset msg} ::tcltest::cleanupTests return - - - - - - - - - - - - - - - - - - - |