1da2e3ebdSchin######################################################################## 2da2e3ebdSchin# # 3da2e3ebdSchin# This software is part of the ast package # 4*b30d1939SAndy Fiddaman# Copyright (c) 1982-2011 AT&T Intellectual Property # 5da2e3ebdSchin# and is licensed under the # 6*b30d1939SAndy Fiddaman# Eclipse Public License, Version 1.0 # 77c2fbfb3SApril Chin# by AT&T Intellectual Property # 8da2e3ebdSchin# # 9da2e3ebdSchin# A copy of the License is available at # 10*b30d1939SAndy Fiddaman# http://www.eclipse.org/org/documents/epl-v10.html # 11*b30d1939SAndy Fiddaman# (with md5 checksum b35adb5213ca9657e911e9befb180842) # 12da2e3ebdSchin# # 13da2e3ebdSchin# Information and Software Systems Research # 14da2e3ebdSchin# AT&T Research # 15da2e3ebdSchin# Florham Park NJ # 16da2e3ebdSchin# # 17da2e3ebdSchin# David Korn <dgk@research.att.com> # 18da2e3ebdSchin# # 19da2e3ebdSchin######################################################################## 20da2e3ebdSchinfunction err_exit 21da2e3ebdSchin{ 22da2e3ebdSchin print -u2 -n "\t" 23da2e3ebdSchin print -u2 -r ${Command}[$Line]: "$@" 24da2e3ebdSchin ((Errors++)) 25da2e3ebdSchin} 26da2e3ebdSchin 27da2e3ebdSchininteger Errors=0 28da2e3ebdSchinCommand=${0##*/} 29da2e3ebdSchin 30da2e3ebdSchin# {...} expansion tests -- ignore if not supported 31da2e3ebdSchin 32da2e3ebdSchin[[ $(print a{0,1}z) == "a0z a1z" ]] || exit 0 33da2e3ebdSchin 34da2e3ebdSchininteger Line=$LINENO+1 35da2e3ebdSchinset -- \ 36da2e3ebdSchin 'ff{c,b,a}' 'ffc ffb ffa' \ 37da2e3ebdSchin 'f{d,e,f}g' 'fdg feg ffg' \ 38da2e3ebdSchin '{l,n,m}xyz' 'lxyz nxyz mxyz' \ 39da2e3ebdSchin '{abc\,def}' '{abc,def}' \ 407c2fbfb3SApril Chin '{"abc,def"}' '{abc,def}' \ 417c2fbfb3SApril Chin "{'abc,def'}" '{abc,def}' \ 42da2e3ebdSchin '{abc}' '{abc}' \ 43da2e3ebdSchin '\{a,b,c,d,e}' '{a,b,c,d,e}' \ 44da2e3ebdSchin '{x,y,\{a,b,c}}' 'x} y} {a} b} c}' \ 45da2e3ebdSchin '{x\,y,\{abc\},trie}' 'x,y {abc} trie' \ 46da2e3ebdSchin '/usr/{ucb/{ex,edit},lib/{ex,how_ex}}' '/usr/ucb/ex /usr/ucb/edit /usr/lib/ex /usr/lib/how_ex' \ 47da2e3ebdSchin 'XXXX\{a,b,c\}' 'XXXX{a,b,c}' \ 48da2e3ebdSchin '{}' '{}' \ 49da2e3ebdSchin '{ }' '{ }' \ 50da2e3ebdSchin '}' '}' \ 51da2e3ebdSchin '{' '{' \ 52da2e3ebdSchin 'abcd{efgh' 'abcd{efgh' \ 53da2e3ebdSchin 'foo {1,2} bar' 'foo 1 2 bar' \ 54da2e3ebdSchin '`print -r -- foo {1,2} bar`' 'foo 1 2 bar' \ 55da2e3ebdSchin '$(print -r -- foo {1,2} bar)' 'foo 1 2 bar' \ 56da2e3ebdSchin '{1..10}' '1 2 3 4 5 6 7 8 9 10' \ 57da2e3ebdSchin '{0..10,braces}' '0..10 braces' \ 58da2e3ebdSchin '{{0..10},braces}' '0 1 2 3 4 5 6 7 8 9 10 braces' \ 59da2e3ebdSchin 'x{{0..10},braces}y' 'x0y x1y x2y x3y x4y x5y x6y x7y x8y x9y x10y xbracesy' \ 60da2e3ebdSchin '{3..3}' '3' \ 61da2e3ebdSchin 'x{3..3}y' 'x3y' \ 62da2e3ebdSchin '{10..1}' '10 9 8 7 6 5 4 3 2 1' \ 63da2e3ebdSchin '{10..1}y' '10y 9y 8y 7y 6y 5y 4y 3y 2y 1y' \ 64da2e3ebdSchin 'x{10..1}y' 'x10y x9y x8y x7y x6y x5y x4y x3y x2y x1y' \ 65da2e3ebdSchin '{a..f}' 'a b c d e f' \ 66da2e3ebdSchin '{f..a}' 'f e d c b a' \ 67da2e3ebdSchin '{a..A}' '{a..A}' \ 68da2e3ebdSchin '{A..a}' '{A..a}' \ 69da2e3ebdSchin '{f..f}' 'f' \ 70da2e3ebdSchin '{1..f}' '{1..f}' \ 71da2e3ebdSchin '{f..1}' '{f..1}' \ 72da2e3ebdSchin '0{1..9} {10..20}' '01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20' \ 73da2e3ebdSchin '{-1..-10}' '-1 -2 -3 -4 -5 -6 -7 -8 -9 -10' \ 74da2e3ebdSchin '{-19..0}' '-19 -18 -17 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0' \ 75da2e3ebdSchin '{0..10}' '0 1 2 3 4 5 6 7 8 9 10' \ 76da2e3ebdSchin '{0..10..1}' '0 1 2 3 4 5 6 7 8 9 10' \ 77da2e3ebdSchin '{0..10..2}' '0 2 4 6 8 10' \ 78da2e3ebdSchin '{0..10..3}' '0 3 6 9' \ 79da2e3ebdSchin '{0..10..0}' '{0..10..0}' \ 80da2e3ebdSchin '{0..10..-1}' '0' \ 81da2e3ebdSchin '{10..0}' '10 9 8 7 6 5 4 3 2 1 0' \ 82da2e3ebdSchin '{10..0..-1}' '10 9 8 7 6 5 4 3 2 1 0' \ 83da2e3ebdSchin '{10..0..-2}' '10 8 6 4 2 0' \ 84da2e3ebdSchin '{10..0..-3}' '10 7 4 1' \ 85da2e3ebdSchin '{10..0..0}' '{10..0..0}' \ 86da2e3ebdSchin '{10..0..1}' '10' \ 87da2e3ebdSchin '{a..z..2}' 'a c e g i k m o q s u w y' \ 88da2e3ebdSchin '{y..b..-3}' 'y v s p m j g d' \ 89da2e3ebdSchin '{0..0x1000..0x200}' '0 512 1024 1536 2048 2560 3072 3584 4096' \ 90da2e3ebdSchin '{a,b}{0..2}{z,y}' 'a0z a0y a1z a1y a2z a2y b0z b0y b1z b1y b2z b2y' \ 91da2e3ebdSchin '{0..0100..8%03o}' '000 010 020 030 040 050 060 070 100' \ 92da2e3ebdSchin '{0..0100..040%020o}' '00000000000000000000 00000000000000000040 00000000000000000100' \ 93da2e3ebdSchin '{0..7%03..2u}' '000 001 010 011 100 101 110 111' \ 94da2e3ebdSchin '{0..10%llu}' '{0..10%llu}' \ 95da2e3ebdSchin '{0..10%s}' '{0..10%s}' \ 96da2e3ebdSchin '{0..10%dl}' '{0..10%dl}' \ 97da2e3ebdSchin '{a,b}{0..3%02..2u}{y,z}' 'a00y a00z a01y a01z a10y a10z a11y a11z b00y b00z b01y b01z b10y b10z b11y b11z' \ 98da2e3ebdSchin 99da2e3ebdSchinwhile (($#>1)) 100da2e3ebdSchindo ((Line++)) 101da2e3ebdSchin pattern=$1 102da2e3ebdSchin shift 103da2e3ebdSchin expected=$1 104da2e3ebdSchin shift 105da2e3ebdSchin got=$(eval print -r -- "$pattern") 106da2e3ebdSchin [[ $got == $expected ]] || err_exit "'$pattern' failed -- expected '$expected' got '$got'" 107da2e3ebdSchin #print -r -- " '$pattern' '$got' \\" 108da2e3ebdSchindone 109da2e3ebdSchin 110da2e3ebdSchin# ~(N) no expand glob pattern option 111da2e3ebdSchinset -- ~(N)/dev/null 112da2e3ebdSchin[[ $# == 1 && $1 == /dev/null ]] || err_exit "~(N)/dev/null not matching /dev/null" 113da2e3ebdSchinset -- ~(N)/dev/non_existant_file 114da2e3ebdSchin[[ $# == 0 ]] || err_exit "~(N)/dev/nonexistant not empty" 115da2e3ebdSchinset -- ""~(N)/dev/non_existant_file 116da2e3ebdSchin[[ $# == 1 && ! $1 ]] || err_exit '""~(N)/dev/nonexistant not null argument' 117da2e3ebdSchinset -- ~(N)/dev/non_existant_file"" 118da2e3ebdSchin[[ $# == 1 && ! $1 ]] || err_exit '~(N)/dev/nonexistent"" not null argument' 119da2e3ebdSchinfor i in ~(N)/dev/non_existent_file 120da2e3ebdSchindo err_exit "~(N)/dev/non_existent_file in for loop is $i" 121da2e3ebdSchindone 122da2e3ebdSchinfor i in ""~(N)/dev/non_existent_file 123da2e3ebdSchindo [[ ! $i ]] || err_exit '""~(N)/dev/non_existent_file not null' 124da2e3ebdSchindone 125*b30d1939SAndy Fiddaman 126*b30d1939SAndy Fiddamanexit $((Errors<125?Errors:125)) 127