7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin########################################################################
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin# This software is part of the ast package #
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner# Copyright (c) 1982-2010 AT&T Intellectual Property #
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin# and is licensed under the #
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin# Common Public License, Version 1.0 #
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin# by AT&T Intellectual Property #
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin# A copy of the License is available at #
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin# (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) #
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin# Information and Software Systems Research #
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin# AT&T Research #
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin# Florham Park NJ #
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin# David Korn <dgk@research.att.com> #
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin########################################################################
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainztmp=$(mktemp -dt) || { err_exit mktemp -dt failed; exit 1; }
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin typeset -i z=5
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin [[ $r == "$s" ]] || err_exit 'r is not equal to s'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin typeset -C x=r.x
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin typeset -C z=y
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin [[ $y == "$z" ]] || err_exit 'y is not equal to z'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin typeset -C s.y=z
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin [[ $y == "${s.y}" ]] || err_exit 'y is not equal to s.y'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin [[ $www == "$z" ]] || err_exit 'www is not equal to z'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin [[ ${s.x} == "${r.x}" ]] || err_exit 's.x is not equal to r.x'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin nameref x=$1 y=$2
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin typeset z=$x
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin [[ $x == "$y" ]] || err_exit "x is not equal to y with ${!x}"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin [[ $y == "${r.y}" ]] || err_exit 'y is not equal to r.y'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin typeset -C y=z
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin [[ $y == "${r.y}" ]] || err_exit 'y is not equal to r.y again'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin typeset -C y=z
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin [[ $q == "$z" ]] || err_exit 'q is not equal to z'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin [[ $z == "$y" ]] || err_exit 'value of z not preserved after subshell'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ $(typeset -p frame) == 'Frame_t frame=(typeset file;typeset lineno;)' ]] || err_exit 'empty fields in type not displayed'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinx=( typeset -a arr=([2]=abc [4]=(x=1 y=def));zz=abc)
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintypeset -C y=x
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ "$x" == "$y" ]] || print -u2 'y is not equal to x'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ "${arr[@]}" == "${brr[@]}" ]] || err_exit 'arr is not brr'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chindo typeset -m zzz=x
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin [[ $zzz == "$y" ]] || err_exit 'zzz is not equal to y'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin typeset -m x=zzz
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin [[ $x == "$y" ]] || err_exit 'x is not equal to y'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin typeset -m r=t
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin [[ $r == "$z" ]] || err_exit 'r is not equal to z'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin typeset -m t=r
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin [[ $t == "$z" ]] || err_exit 't is not equal to z'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin [[ "${crr[@]}" == "${brr[@]}" ]] || err_exit 'crr is not brr'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin [[ "${arr[@]}" == "${brr[@]}" ]] || err_exit 'brr is not arr'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ ${brr[foo]} == 2 ]] || err_exit 'move an associative array element fails'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ ${brr[bar]} ]] && err_exit 'brr[bar] should be unset after move'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ ${x[1]} == c ]] || err_exit 'move an indexed array element fails'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ ${x[2]} ]] && err_exit 'x[2] should be unset after move'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin print -r -- ${p.y}
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ "$got" == "$expected" ]] || err_exit "typedefs in dot script failed -- expected '$expected', got '$got'"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin typeset x=foo y=bar
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin typeset s=${_.x}
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ ${x.x} == foo ]] || err_exit 'x.x should be foo'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ ${x.y} == bam ]] || err_exit 'x.y should be bam'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ ${x.s} == ${x.x} ]] || err_exit 'x.s should be x.x'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ ${z.r.x} == foo ]] || err_exit 'z.r.x should be foo'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ ${z.r.y} == bam ]] || err_exit 'z.r.y should be bam'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ ${z.r.s} == ${z.r.x} ]] || err_exit 'z.r.s should be z.r.x'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin{ typeset -T xx=(typeset yy=zz) ;} 2>/dev/null && err_exit 'type redefinition should fail'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin$SHELL 2> /dev/null <<- +++ || err_exit 'typedef with only f(){} fails'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin$SHELL 2> /dev/null <<- +++ || err_exit 'unable to redefine f discipline function'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin$SHELL 2> /dev/null <<- +++ && err_exit 'invalid discipline name should be an error'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin# compound variables containing type variables
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ "$var" == *x=foobar* ]] || err_exit '$var does not contain x=foobar'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin typeset b=${_.x}
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ "$got" == "$expected" ]] || err_exit "type '_' reference failed -- expected '$expected', got '$got'"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ "$got" == "$expected" ]] || err_exit "_.g where g is a function in type discipline method failed -- expected '$expected', got '$got'"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ "$got" == "$expected" ]] || err_exit "array assignment of subscripts in type discipline arithmetic failed -- expected '$expected', got '$got'"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinexpected='Fileinfo_t -A _Dbg_filenames=([foo]=(size=2;typeset -C -a text=([0]=line1 [1]=line2 [2]=line3);typeset -l -i mtime=-1;))'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin err_exit "copy to associative array of types in function failed -- expected '$expected', got '$got'"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin$SHELL > /dev/null <<- '+++++' || err_exit 'passing _ as nameref arg not working'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin typeset -n v=$1
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz) == "$expected" ]] 2> /dev/null || err_exit '_.a=(name=one) not expanding correctly'
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz typeset -p x
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz) == "$expected" ]] || err_exit 'empty field in definition does not expand correctly'
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz len() { print -r -- $(( sqrt(_.x**2 + _.y**2))) ;}
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz[[ ${foo.len} == 5 ]] || err_exit "discipline function len not working"
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz (( num_iterations= int(tst.num_iterations * 1.0) ))
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz[[ $(do_benchmarks) == 5 ]] || err_exit 'scoping of nameref of type variables in arithmetic expressions not working'
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz foo_t -a foolist=(
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainztypeset -T foo_t=(
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz integer val=-1
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz function print
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz print -- ${_.val}
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzfunction do_something
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz nameref li=$1 # "li" may be an index or associative array
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzcat_content | read -C x
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz[[ $(do_something x.foolist) == 5 ]] || err_exit 'subscripts not honored for arrays of type with disciplines'
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainztypeset -T benchcmd_t=(
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz benchcmd_t -a m
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzexpected=$'(\n\ttypeset -l -i h=0\n\tbenchcmd_t -a m\n\ttypeset -l -E o=0\n)'
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz[[ $x == "$expected" ]] || err_exit 'compound variable with array of types with no elements not working'
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzexpected=$'Std_file_t db.file[/etc/profile]=(action=preserve;typeset -A sum=([8242e663d6f7bb4c5427a0e58e2925f3]=1);)'
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz got=$($SHELL <<- \EOF
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz MAGIC='stdinstall (at&t research) 2009-08-25'
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz typeset -T Std_file_t=(
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz typeset action
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz typeset -A sum
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz typeset -T Std_t=(
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz typeset magic=$MAGIC
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz Std_file_t -A file
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz Std_t db=(magic='stdinstall (at&t research) 2009-08-25';Std_file_t -A file=( [/./home/gsf/.env.sh]=(action=preserve;typeset -A sum=([9b67ab407d01a52b3e73e3945b9a3ee0]=1);)[/etc/profile]=(action=preserve;typeset -A sum=([8242e663d6f7bb4c5427a0e58e2925f3]=1);)[/home/gsf/.profile]=(action=preserve;typeset -A sum=([3ce23137335219672bf2865d003a098e]=1);));)
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz typeset -p db.file[/etc/profile]
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz} 2> /dev/null
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz[[ $got == "$expected" ]] || err_exit 'types with arrays of types as members fails'