source testing.tcl section "String comparison" test expr-1.1 "Compare strings lt" { expr {"V000500" < "V000405"} } {0} test expr-1.2 "Compare strings with embedded nulls" { set s1 [format abc%cdef 0] set s2 [format abc%cghi 0] expr {$s1 < $s2} } {1} test expr-1.3 "Hex values" { set mask1 [expr 0x4050 & 0x0CCC] } {64} test expr-1.4 "Ternary operator - true" { expr {1 ? 2 : 3} } {2} test expr-1.5 "Ternary operator - false" { expr {0 ? 2 : 3} } {3} test expr-1.6 "Ternary operator - double check" { expr {1.0 ? 2 : 3} } {2} test expr-1.7 "Ternary operator - string result" { expr {1 ? "two" : 3} } {two} test expr-1.8 "Ternary operator - don't eval false path" { set a 100 set b 200 set c [expr {20 ? [incr a] : [incr b]}] list $a $b $c } {101 200 101} test expr-1.9 "Unary minus" { set a 1 expr {-$a} } {-1} test expr-1.10 "Subtraction" { set a 1 set b 10 expr {$b-$a} } {9} # This crashes older jim test expr-2.1 "bogus unarymin" { expr {unarymin 1} } {-1} test expr-2.2 "Ternary operator - missing colon" { list [catch {expr {1 ? 2 3}} msg] $msg } {1 {Invalid expression}} testreport