1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
|
source [file dirname [info script]]/testing.tcl
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}
test expr-1.11 "Short circuit evaluation" {
set a 100
set c [expr {0 || [incr a]}]
list $a $c
} {101 1}
test expr-1.12 "Short circuit evaluation" {
set a 100
set c [expr {1 || [incr a]}]
list $a $c
} {100 1}
test expr-1.13 "Short circuit evaluation" {
set a 100
set c [expr {1 || [incr a] && [incr a]}]
list $a $c
} {100 1}
test expr-1.14 "Rotate left" jim {
expr {1 <<< 5}
} {32}
test expr-1.15 "Rotate left" jim {
expr {1 <<< 65}
} {2}
test expr-1.16 "Rotate right" jim {
expr {1 >>> 48}
} {65536}
test expr-1.17 "Rotate left" jim {
expr {1 >>> 63}
} {2}
# This crashes older jim
test expr-2.1 "bogus unarymin" -body {
expr {unarymin 1}
} -returnCodes error -match glob -result *
test expr-2.2 "Ternary operator - missing colon" -body {
expr {1 ? 2 3}
} -returnCodes error -match glob -result {missing operator*}
test expr-2.3 "Ternary operator - missing third term" -body {
expr {1 ? 2}
} -returnCodes error -match glob -result *
test expr-2.4 "Ternary operator - missing question" -body {
expr {1 : 2}
} -returnCodes error -match glob -result *
test expr-2.5 "Ternary operator with -ve values" {
expr {-1?-2:-3}
} -2
test expr-2.6 "Ternary operator with -ve values" {
expr {0?-2:-3}
} -3
test expr-3.1 "in, ni operators" {
set l {a b c d}
set c C
list [expr {"a" in $l}] [expr {$c in $l}] [expr {"b" ni $l}] [expr {$c ni $l}]
} {1 0 0 1}
test expr-3.2 "if: in, ni operators" {
set l {a b c d}
set a a
set c C
set result {}
if {$a in $l} {
lappend result 1
}
if {$c in $l} {
lappend result 2
}
if {$a ni $l} {
lappend result 3
}
if {$c ni $l} {
lappend result 4
}
if {"d" in $l} {
lappend result 5
}
} {1 4 5}
# Don't want a to become 2.0
test expr-4.1 "Shimmering" {
set a 2
expr {$a < 3.0}
set a
} {2}
test expr-5.1 "Not" {
lmap x {1 0 true false on off yes no} { expr {!$x} }
} {0 1 0 1 0 1 0 1}
test expr-5.2 "Not" -body {
expr {!this}
} -returnCodes error -result {syntax error in expression: "!this"}
test expr-5.3 {boolean in expression} {
expr {true ? 4 : 5}
} {4}
testreport
|