Annotation of researchv10no/cmd/worm/scsi/tcl/tests/expr.test, revision 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.