stringcomp.test

来自「tcl是工具命令语言」· TEST 代码 · 共 720 行 · 第 1/2 页

TEST
720
字号
# Commands covered:  string## This file contains a collection of tests for one or more of the Tcl# built-in commands.  Sourcing this file into Tcl runs the tests and# generates output for errors.  No output means no errors were found.## This differs from the original string tests in that the tests call# things in procs, which uses the compiled string code instead of# the runtime parse string code.  The tests of import should match# their equivalent number in string.test.## Copyright (c) 2001 by ActiveState Corporation.# Copyright (c) 2001 by Kevin B. Kenny.  All rights reserved.## See the file "license.terms" for information on usage and redistribution# of this file, and for a DISCLAIMER OF ALL WARRANTIES.## RCS: @(#) $Id: stringComp.test,v 1.6 2003/02/18 02:25:45 hobbs Exp $if {[lsearch [namespace children] ::tcltest] == -1} {    package require tcltest    namespace import -force ::tcltest::*}# Some tests require the testobj commandset ::tcltest::testConstraints(testobj) \	[expr {[info commands testobj] != {}}]test string-1.1 {error conditions} {    proc foo {} {string gorp a b}    list [catch {foo} msg] $msg} {1 {bad option "gorp": must be bytelength, compare, equal, first, index, is, last, length, map, match, range, repeat, replace, tolower, toupper, totitle, trim, trimleft, trimright, wordend, or wordstart}}test string-1.2 {error conditions} {    proc foo {} {string}    list [catch {foo} msg] $msg} {1 {wrong # args: should be "string option arg ?arg ...?"}}test string-1.3 {error condition - undefined method during compile} {    # We don't want this to complain about 'never' because it may never    # be called, or string may get redefined.  This must compile OK.    proc foo {str i} {        if {"yes" == "no"} { string never called but complains here }        string index $str $i    }    foo abc 0} atest string-2.1 {string compare, too few args} {    proc foo {} {string compare a}    list [catch {foo} msg] $msg} {1 {wrong # args: should be "string compare ?-nocase? ?-length int? string1 string2"}}test string-2.2 {string compare, bad args} {    proc foo {} {string compare a b c}    list [catch {foo} msg] $msg} {1 {bad option "a": must be -nocase or -length}}test string-2.3 {string compare, bad args} {    list [catch {string compare -length -nocase str1 str2} msg] $msg} {1 {expected integer but got "-nocase"}}test string-2.4 {string compare, too many args} {    list [catch {string compare -length 10 -nocase str1 str2 str3} msg] $msg} {1 {wrong # args: should be "string compare ?-nocase? ?-length int? string1 string2"}}test string-2.5 {string compare with length unspecified} {    list [catch {string compare -length 10 10} msg] $msg} {1 {wrong # args: should be "string compare ?-nocase? ?-length int? string1 string2"}}test string-2.6 {string compare} {    proc foo {} {string compare abcde abdef}    foo} -1test string-2.7 {string compare, shortest method name} {    proc foo {} {string c abcde ABCDE}    foo} 1test string-2.8 {string compare} {    proc foo {} {string compare abcde abcde}    foo} 0test string-2.9 {string compare with length} {    proc foo {} {string compare -length 2 abcde abxyz}    foo} 0test string-2.10 {string compare with special index} {    proc foo {} {string compare -length end-3 abcde abxyz}    list [catch {foo} msg] $msg} {1 {expected integer but got "end-3"}}test string-2.11 {string compare, unicode} {    proc foo {} {string compare ab\u7266 ab\u7267}    foo} -1test string-2.12 {string compare, high bit} {    # This test will fail if the underlying comparaison    # is using signed chars instead of unsigned chars.    # (like SunOS's default memcmp thus the compat/memcmp.c)    proc foo {} {string compare "\x80" "@"}    foo    # Nb this tests works also in utf8 space because \x80 is    # translated into a 2 or more bytelength but whose first byte has    # the high bit set.} 1test string-2.13 {string compare -nocase} {    proc foo {} {string compare -nocase abcde abdef}    foo} -1test string-2.14 {string compare -nocase} {    proc foo {} {string c -nocase abcde ABCDE}    foo} 0test string-2.15 {string compare -nocase} {    proc foo {} {string compare -nocase abcde abcde}    foo} 0test string-2.16 {string compare -nocase with length} {    proc foo {} {string compare -length 2 -nocase abcde Abxyz}    foo} 0test string-2.17 {string compare -nocase with length} {    proc foo {} {string compare -nocase -length 3 abcde Abxyz}    foo} -1test string-2.18 {string compare -nocase with length <= 0} {    proc foo {} {string compare -nocase -length -1 abcde AbCdEf}    foo} -1test string-2.19 {string compare -nocase with excessive length} {    proc foo {} {string compare -nocase -length 50 AbCdEf abcde}    foo} 1test string-2.20 {string compare -len unicode} {    # These are strings that are 6 BYTELENGTH long, but the length    # shouldn't make a different because there are actually 3 CHARS long    proc foo {} {string compare -len 5 \334\334\334 \334\334\374}    foo} -1test string-2.21 {string compare -nocase with special index} {    proc foo {} {string compare -nocase -length end-3 Abcde abxyz}    list [catch {foo} msg] $msg} {1 {expected integer but got "end-3"}}test string-2.22 {string compare, null strings} {    proc foo {} {string compare "" ""}    foo} 0test string-2.23 {string compare, null strings} {    proc foo {} {string compare "" foo}    foo} -1test string-2.24 {string compare, null strings} {    proc foo {} {string compare foo ""}    foo} 1test string-2.25 {string compare -nocase, null strings} {    proc foo {} {string compare -nocase "" ""}    foo} 0test string-2.26 {string compare -nocase, null strings} {    proc foo {} {string compare -nocase "" foo}    foo} -1test string-2.27 {string compare -nocase, null strings} {    proc foo {} {string compare -nocase foo ""}    foo} 1test string-2.28 {string compare with length, unequal strings} {    proc foo {} {string compare -length 2 abc abde}    foo} 0test string-2.29 {string compare with length, unequal strings} {    proc foo {} {string compare -length 2 ab abde}    foo} 0test string-2.30 {string compare with NUL character vs. other ASCII} {    # Be careful here, since UTF-8 rep comparison with memcmp() of    # these puts chars in the wrong order    proc foo {} {string compare \x00 \x01}    foo} -1test string-2.31 {string compare, high bit} {    proc foo {} {string compare "a\x80" "a@"}    foo} 1test string-2.32 {string compare, high bit} {    proc foo {} {string compare "a\x00" "a\x01"}    foo} -1test string-2.33 {string compare, high bit} {    proc foo {} {string compare "\x00\x00" "\x00\x01"}    foo} -1# only need a few tests on equal, since it uses the same code as# string compare, but just modifies the return outputtest string-3.1 {string equal} {    proc foo {} {string equal abcde abdef}    foo} 0test string-3.2 {string equal} {    proc foo {} {string eq abcde ABCDE}    foo} 0test string-3.3 {string equal} {    proc foo {} {string equal abcde abcde}    foo} 1test string-3.4 {string equal -nocase} {    proc foo {} {string equal -nocase \334\334\334\334\374\374\374\374 \334\334\334\334\334\334\334\334}    foo} 1test string-3.5 {string equal -nocase} {    proc foo {} {string equal -nocase abcde abdef}    foo} 0test string-3.6 {string equal -nocase} {    proc foo {} {string eq -nocase abcde ABCDE}    foo} 1test string-3.7 {string equal -nocase} {    proc foo {} {string equal -nocase abcde abcde}    foo} 1test string-3.8 {string equal with length, unequal strings} {    proc foo {} {string equal -length 2 abc abde}    foo} 1test string-4.1 {string first, too few args} {    proc foo {} {string first a}    list [catch {foo} msg] $msg} {1 {wrong # args: should be "string first subString string ?startIndex?"}}test string-4.2 {string first, bad args} {    proc foo {} {string first a b c}    list [catch {foo} msg] $msg} {1 {bad index "c": must be integer or end?-integer?}}test string-4.3 {string first, too many args} {    proc foo {} {string first a b 5 d}    list [catch {foo} msg] $msg} {1 {wrong # args: should be "string first subString string ?startIndex?"}}test string-4.4 {string first} {    proc foo {} {string first bq abcdefgbcefgbqrs}    foo} 12test string-4.5 {string first} {    proc foo {} {string fir bcd abcdefgbcefgbqrs}    foo} 1test string-4.6 {string first} {    proc foo {} {string f b abcdefgbcefgbqrs}    foo} 1test string-4.7 {string first} {    proc foo {} {string first xxx x123xx345xxx789xxx012}    foo} 9test string-4.8 {string first} {    proc foo {} {string first "" x123xx345xxx789xxx012}    foo} -1test string-4.9 {string first, unicode} {    proc foo {} {string first x abc\u7266x}    foo} 4test string-4.10 {string first, unicode} {    proc foo {} {string first \u7266 abc\u7266x}    foo} 3test string-4.11 {string first, start index} {    proc foo {} {string first \u7266 abc\u7266x 3}    foo} 3test string-4.12 {string first, start index} {    proc foo {} {string first \u7266 abc\u7266x 4}    foo} -1test string-4.13 {string first, start index} {    proc foo {} {string first \u7266 abc\u7266x end-2}    foo} 3test string-4.14 {string first, negative start index} {    proc foo {} {string first b abc -1}    foo} 1test string-5.1 {string index} {    proc foo {} {string index}    list [catch {foo} msg] $msg} {1 {wrong # args: should be "string index string charIndex"}}test string-5.2 {string index} {    proc foo {} {string index a b c}    list [catch {foo} msg] $msg} {1 {wrong # args: should be "string index string charIndex"}}test string-5.3 {string index} {    proc foo {} {string index abcde 0}    foo} atest string-5.4 {string index} {    proc foo {} {string in abcde 4}    foo} etest string-5.5 {string index} {    proc foo {} {string index abcde 5}    foo} {}test string-5.6 {string index} {    proc foo {} {string index abcde -10}    list [catch {foo} msg] $msg} {0 {}}test string-5.7 {string index} {    proc foo {} {string index a xyz}    list [catch {foo} msg] $msg} {1 {bad index "xyz": must be integer or end?-integer?}}test string-5.8 {string index} {    proc foo {} {string index abc end}    foo} ctest string-5.9 {string index} {    proc foo {} {string index abc end-1}    foo} btest string-5.10 {string index, unicode} {    proc foo {} {string index abc\u7266d 4}    foo} dtest string-5.11 {string index, unicode} {    proc foo {} {string index abc\u7266d 3}    foo} \u7266test string-5.12 {string index, unicode over char length, under byte length} {    proc foo {} {string index \334\374\334\374 6}    foo} {}test string-5.13 {string index, bytearray object} {    proc foo {} {string index [binary format a5 fuz] 0}    foo} ftest string-5.14 {string index, bytearray object} {    proc foo {} {string index [binary format I* {0x50515253 0x52}] 3}    foo} Stest string-5.15 {string index, bytearray object} {    proc foo {} {	set b [binary format I* {0x50515253 0x52}]	set i1 [string index $b end-6]	set i2 [string index $b 1]	string compare $i1 $i2    }    foo} 0test string-5.16 {string index, bytearray object with string obj shimmering} {    proc foo {} {	set str "0123456789\x00 abcdedfghi"	binary scan $str H* dump	string compare [string index $str 10] \x00    }    foo} 0test string-5.17 {string index, bad integer} {    proc foo {} {string index "abc" 08}    list [catch {foo} msg] $msg} {1 {bad index "08": must be integer or end?-integer? (looks like invalid octal number)}}test string-5.18 {string index, bad integer} {    proc foo {} {string index "abc" end-00289}    list [catch {foo} msg] $msg} {1 {bad index "end-00289": must be integer or end?-integer? (looks like invalid octal number)}}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?