Annotation of researchv10dc/cmd/worm/scsi/tcl/tests/expr.test, revision 1.1.1.1

1.1       root        1: # This file contains contains a collection of tests for the "expr"
                      2: # command in Tcl.  If everything is OK then it finishes silently.
                      3: # If a problem is detected then it generates a Tcl error with a
                      4: # cryptic message.  To trace the error you'll have to read through
                      5: # the commands in this file.
                      6: #
                      7: # $Header: /sprite/src/lib/tcl/tests/RCS/expr.test,v 1.1 90/03/22 15:24:40 ouster Exp $ (Berkeley)
                      8: 
                      9: proc check {a b num} {
                     10:     if {$a != $b} {
                     11:        error [format {Expr error %s: wanted "%s", got "%s"} $num $b $a]}
                     12: }
                     13: proc checkstr {a b num} {
                     14:     if {[string compare $a $b] != 0} {
                     15:        error [format {Expr error %s: wanted "%s", got "%s"} $num $b $a]}
                     16: }
                     17: 
                     18: # First, test all of the operators individually.
                     19: 
                     20: check [expr -4] -4 1.1
                     21: check [expr -(1+4)] -5 1.2
                     22: check [expr ~3] 0xfffffffc 1.3
                     23: check [expr !2] 0 1.3
                     24: check [expr !0] 1 1.4
                     25: check [expr 4*6] 24 1.5
                     26: check [expr 36/12] 3 1.6
                     27: check [expr 27/4] 6 1.7
                     28: check [expr 27%4] 3 1.8
                     29: check [expr 2+2] 4 1.9
                     30: check [expr 2-6] -4 1.10
                     31: check [expr 1<<3] 8 1.11
                     32: check [expr 0xff>>2] 0x3f 1.12
                     33: check [expr -1>>2] -1 1.13
                     34: check [expr 3>2] 1 1.14
                     35: check [expr 2>2] 0 1.15
                     36: check [expr 1>2] 0 1.16
                     37: check [expr 3<2] 0 1.17
                     38: check [expr 2<2] 0 1.18
                     39: check [expr 1<2] 1 1.19
                     40: check [expr 3>=2] 1 1.20
                     41: check [expr 2>=2] 1 1.21
                     42: check [expr 1>=2] 0 1.22
                     43: check [expr 3<=2] 0 1.23
                     44: check [expr 2<=2] 1 1.24
                     45: check [expr 1<=2] 1 1.25
                     46: check [expr 3==2] 0 1.26
                     47: check [expr 2==2] 1 1.27
                     48: check [expr 3!=2] 1 1.28
                     49: check [expr 2!=2] 0 1.29
                     50: check [expr 7&0x13] 3 1.30
                     51: check [expr 7^0x13] 0x14 1.31
                     52: check [expr 7|0x13] 0x17 1.32
                     53: check [expr 0&&1] 0 1.33
                     54: check [expr 0&&0] 0 1.34
                     55: check [expr 1&&3] 1 1.35
                     56: check [expr 0||1] 1 1.36
                     57: check [expr 3||0] 1 1.37
                     58: check [expr 0||0] 0 1.38
                     59: check [expr 3>2?44:66] 44 1.39
                     60: check [expr 2>3?44:66] 66 1.40
                     61: 
                     62: # Check precedence pairwise.
                     63: 
                     64: check [expr -~3] 4 2.1
                     65: check [expr -!3] 0 2.2
                     66: check [expr -~0] 1 2.3
                     67: 
                     68: check [expr 2*4/6] 1 3.1
                     69: check [expr 24/6*3] 12 3.2
                     70: check [expr 24/6/2] 2 3.3
                     71: 
                     72: check [expr -2+4] 2 4.1
                     73: check [expr -2-4] -6 4.2
                     74: 
                     75: check [expr 2*3+4] 10 5.1
                     76: check [expr 8/2+4] 8 5.2
                     77: check [expr 8%3+4] 6 5.3
                     78: check [expr 2*3-1] 5 5.4
                     79: check [expr 8/2-1] 3 5.5
                     80: check [expr 8%3-1] 1 5.6
                     81: 
                     82: check [expr 6-3-2] 1 6.1
                     83: 
                     84: check [expr 7+1>>2] 2 7.1
                     85: check [expr 7+1<<2] 32 7.2
                     86: check [expr 7>>3-2] 3 7.3
                     87: check [expr 7<<3-2] 14 7.4
                     88: 
                     89: check [expr 6>>1>4] 0 8.1
                     90: check [expr 6>>1<2] 0 8.2
                     91: check [expr 6>>1>=3] 1 8.3
                     92: check [expr 6>>1<=2] 0 8.4
                     93: check [expr 6<<1>5] 1 8.5
                     94: check [expr 6<<1<5] 0 8.6
                     95: check [expr 5<=6<<1] 1 8.7
                     96: check [expr 5>=6<<1] 0 8.8
                     97: 
                     98: check [expr 2<3<4] 1 9.1
                     99: check [expr 0<4>2] 0 9.2
                    100: check [expr 4>2<1] 0 9.3
                    101: check [expr 4>3>2] 0 9.4
                    102: check [expr 4>3>=2] 0 9.5
                    103: check [expr 4>=3>2] 0 9.6
                    104: check [expr 4>=3>=2] 0 9.7
                    105: check [expr 0<=4>=2] 0 9.8
                    106: check [expr 4>=2<=0] 0 9.9
                    107: check [expr 2<=3<=4] 1 9.10
                    108: 
                    109: check [expr 1==4>3] 1 10.1
                    110: check [expr 0!=4>3] 1 10.2
                    111: check [expr 1==3<4] 1 10.3
                    112: check [expr 0!=3<4] 1 10.4
                    113: check [expr 1==4>=3] 1 10.5
                    114: check [expr 0!=4>=3] 1 10.6
                    115: check [expr 1==3<=4] 1 10.7
                    116: check [expr 0!=3<=4] 1 10.8
                    117: 
                    118: check [expr 1==3==3] 0 11.1
                    119: check [expr 3==3!=2] 1 11.2
                    120: check [expr 2!=3==3] 0 11.3
                    121: check [expr 2!=1!=1] 0 11.3
                    122: 
                    123: check [expr 2&3==2] 0 12.1
                    124: check [expr 1&3!=3] 0 12.2
                    125: 
                    126: check [expr 7&3^0x10] 0x13 13.1
                    127: check [expr 7^0x10&3] 7 13.2
                    128: 
                    129: check [expr 7^0x10|3] 0x17 14.1
                    130: check [expr 7|0x10^3] 0x17 14.2
                    131: 
                    132: check [expr 7|3&&1] 1 15.1
                    133: check [expr 1&&3|7] 1 15.2
                    134: 
                    135: check [expr 0&&1||1] 1 15.3
                    136: check [expr 1||1&&0] 1 15.4
                    137: 
                    138: check [expr 1||0?3:4] 3 16.1
                    139: check [expr 1?0:4||1] 0 16.2
                    140: 
                    141: # Parentheses.
                    142: 
                    143: check [expr (2+4)*6] 36 17.1
                    144: check [expr (1?0:4)||1] 1 17.2
                    145: 
                    146: # Embedded commands and variable names.
                    147: 
                    148: set a 16
                    149: check [expr {2*$a}] 32 18.1
                    150: check [expr {[set a] - 14}] 2 18.2
                    151: 
                    152: # Numbers in various bases.
                    153: 
                    154: check [expr 0x20] 32 19.1
                    155: check [expr 015] 13 19.2
                    156: 
                    157: # Various error conditions.
                    158: 
                    159: check [catch {expr 2+a} msg] 1 20.1
                    160: checkstr $msg {syntax error in expression "2+a"} 20.2
                    161: check [catch {expr 2+4*} msg] 1 20.3
                    162: check [catch {expr 2+4*(} msg] 1 20.4
                    163: check [catch {expr 2+$_non_existent_} msg] 1 20.5
                    164: checkstr $msg {couldn't find variable "_non_existent_"} 20.6
                    165: set a xx
                    166: check [catch {expr {2+$a}} msg] 1 20.7
                    167: checkstr $msg {variable "$a" contained non-numeric value "xx"} 20.8
                    168: check [catch {expr {2+[set a]}} msg] 1 20.9
                    169: checkstr $msg {command "set a" returned non-numeric result "xx"} 20.10
                    170: check [catch {expr {2+(4}} msg] 1 20.11
                    171: checkstr $msg {unmatched parentheses in expression "2+(4"} 20.12
                    172: check [catch {expr 2/0} msg] 1 20.13
                    173: checkstr $msg {divide by zero} 20.14
                    174: check [catch {expr 2%0} msg] 1 20.15
                    175: checkstr $msg {divide by zero} 20.16
                    176: check [catch {expr 2#} msg] 1 20.17
                    177: checkstr $msg {syntax error in expression "2#"} 20.18
                    178: check [catch {expr 2?foo:1} msg] 1 20.19
                    179: check [catch {expr 0?foo:1} msg] 1 20.20
                    180: check [catch {expr 2?1:foo} msg] 1 20.21
                    181: check [catch {expr 0?1:foo} msg] 1 20.22

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.