17c2fbfb3SApril Chin########################################################################
27c2fbfb3SApril Chin#                                                                      #
37c2fbfb3SApril Chin#               This software is part of the ast package               #
4*b30d1939SAndy Fiddaman#          Copyright (c) 1982-2011 AT&T Intellectual Property          #
57c2fbfb3SApril Chin#                      and is licensed under the                       #
6*b30d1939SAndy Fiddaman#                 Eclipse Public License, Version 1.0                  #
77c2fbfb3SApril Chin#                    by AT&T Intellectual Property                     #
87c2fbfb3SApril Chin#                                                                      #
97c2fbfb3SApril Chin#                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)         #
127c2fbfb3SApril Chin#                                                                      #
137c2fbfb3SApril Chin#              Information and Software Systems Research               #
147c2fbfb3SApril Chin#                            AT&T Research                             #
157c2fbfb3SApril Chin#                           Florham Park NJ                            #
167c2fbfb3SApril Chin#                                                                      #
177c2fbfb3SApril Chin#                  David Korn <dgk@research.att.com>                   #
187c2fbfb3SApril Chin#                                                                      #
197c2fbfb3SApril Chin########################################################################
207c2fbfb3SApril Chinfunction err_exit
217c2fbfb3SApril Chin{
227c2fbfb3SApril Chin	print -u2 -n "\t"
237c2fbfb3SApril Chin	print -u2 -r ${Command}[$1]: "${@:2}"
247c2fbfb3SApril Chin	(( Errors+=1 ))
257c2fbfb3SApril Chin}
267c2fbfb3SApril Chinalias err_exit='err_exit $LINENO'
277c2fbfb3SApril Chin
287c2fbfb3SApril ChinCommand=${0##*/}
297c2fbfb3SApril Chininteger Errors=0
307c2fbfb3SApril Chin
317c2fbfb3SApril Chintypeset -T Pt_t=(
327c2fbfb3SApril Chin	float x=1
337c2fbfb3SApril Chin	float y=0
347c2fbfb3SApril Chin	len()
357c2fbfb3SApril Chin	{
367c2fbfb3SApril Chin		print -r $((sqrt(_.x*_.x + _.y*_.y)))
377c2fbfb3SApril Chin	}
387c2fbfb3SApril Chin)
397c2fbfb3SApril Chin
407c2fbfb3SApril Chinfor ((i=0; i < 100; i++))
417c2fbfb3SApril Chindo
427c2fbfb3SApril ChinPt_t p
437c2fbfb3SApril Chin[[ ${p.x} == 1 ]] || err_exit '${p[x]} is not 1'
447c2fbfb3SApril Chin(( p.x == 1 )) || err_ext 'p[x] is not 1'
457c2fbfb3SApril Chin[[ $(p.len) == 1 ]] || err_exit '$(p.len) != 1'
467c2fbfb3SApril Chin[[ ${p.len} == 1 ]] || err_exit '${p.len} != 1'
477c2fbfb3SApril Chin(( p.len == 1  )) || err_exit '((p.len != 1))'
487c2fbfb3SApril ChinPt_t q=(y=2)
497c2fbfb3SApril Chin(( q.x == 1 )) || err_exit 'q.x is not 1'
507c2fbfb3SApril Chin(( (q.len - sqrt(5)) < 10e-10 )) || err_exit 'q.len != sqrt(5)'
517c2fbfb3SApril Chinq.len()
527c2fbfb3SApril Chin{
537c2fbfb3SApril Chin	print -r $((abs(_.x)+abs(_.y) ))
547c2fbfb3SApril Chin}
557c2fbfb3SApril Chin(( q.len == 3 )) || err_exit 'q.len is not 3'
567c2fbfb3SApril Chinp=q
577c2fbfb3SApril Chin[[ ${p.y} == 2 ]] || err_exit '${p[y]} is not 2'
587c2fbfb3SApril Chin[[ ${@p} == Pt_t ]] || err_exit 'type of p is not Pt_t'
597c2fbfb3SApril Chin[[ ${@q} == Pt_t ]] || err_exit 'type of q is not Pt_t'
607c2fbfb3SApril Chin(( p.len == 3 )) || err_exit 'p.len is not 3'
617c2fbfb3SApril Chinunset p q
627c2fbfb3SApril ChinPt_t pp=( (  x=3 y=4) (  x=5 y=12) (y=2) )
637c2fbfb3SApril Chin(( pp[0].len == 5 )) || err_exit 'pp[0].len != 5'
647c2fbfb3SApril Chin(( pp[1].len == 13 )) || err_exit 'pp[0].len != 12'
657c2fbfb3SApril Chin(( (pp[2].len - sqrt(5)) < 10e-10 )) || err_exit 'pp[2].len != sqrt(5)'
667c2fbfb3SApril Chin[[ ${pp[1]} == $'(\n\ttypeset -l -E x=5\n\ttypeset -l -E y=12\n)' ]] || err_exit '${pp[1] is not correct'
677c2fbfb3SApril Chin[[ ${!pp[@]} == '0 1 2' ]] || err_exit '${pp[@] != "0 1 2"'
687c2fbfb3SApril Chinpp+=( x=6 y=8)
697c2fbfb3SApril Chin(( pp[3].len == 10 )) || err_exit 'pp[3].len != 10'
707c2fbfb3SApril Chin[[ ${!pp[@]} == '0 1 2 3' ]] || err_exit '${pp[@] != "0 1 2 3"'
717c2fbfb3SApril Chinpp[4]=pp[1]
727c2fbfb3SApril Chin[[ ${pp[4]} == $'(\n\ttypeset -l -E x=5\n\ttypeset -l -E y=12\n)' ]] || err_exit '${pp[4] is not correct'
737c2fbfb3SApril Chinunset pp
747c2fbfb3SApril ChinPt_t pp=( [one]=(  x=3 y=4) [two]=(  x=5 y=12) [three]=(y=2) )
757c2fbfb3SApril Chin(( pp[one].len == 5 )) || err_exit 'pp[one].len != 5'
767c2fbfb3SApril Chin(( pp[two].len == 13 )) || err_exit 'pp[two].len != 12'
777c2fbfb3SApril Chin[[ ${pp[two]} == $'(\n\ttypeset -l -E x=5\n\ttypeset -l -E y=12\n)' ]] || err_exit '${pp[two] is not correct'
787c2fbfb3SApril Chin[[ ${!pp[@]} == 'one three two' ]] || err_exit '${pp[@] != "one three two"'
797c2fbfb3SApril Chin[[ ${@pp[1]} == Pt_t ]] || err_exit 'type of pp[1] is not Pt_t'
807c2fbfb3SApril Chinunset pp
817c2fbfb3SApril Chindone
827c2fbfb3SApril Chin# redefinition of point
837c2fbfb3SApril Chintypeset -T Pt_t=(
847c2fbfb3SApril Chin	Pt_t _=(x=3 y=6)
857c2fbfb3SApril Chin	float z=2
867c2fbfb3SApril Chin	len()
877c2fbfb3SApril Chin	{
887c2fbfb3SApril Chin		print -r $((sqrt(_.x*_.x + _.y*_.y + _.z*_.z)))
897c2fbfb3SApril Chin	}
907c2fbfb3SApril Chin)
917c2fbfb3SApril ChinPt_t p
927c2fbfb3SApril Chin[[ ${p.y} == 6 ]] || err_exit '${p.y} != 6'
937c2fbfb3SApril Chin(( p.len == 7 )) || err_exit '((p.len !=7))'
947c2fbfb3SApril Chin
957c2fbfb3SApril Chinz=()
967c2fbfb3SApril ChinPt_t -a z.p
977c2fbfb3SApril Chinz.p[1]=(y=2)
987c2fbfb3SApril Chinz.p[2]=(y=5)
997c2fbfb3SApril Chinz.p[3]=(x=6 y=4)
1007c2fbfb3SApril Chineval y="$z"
1017c2fbfb3SApril Chin[[ $y == "$z" ]] || err_exit 'expansion of indexed array of types is incorrect'
1027c2fbfb3SApril Chineval "$(typeset -p y)"
1037c2fbfb3SApril Chin[[ $y == "$z" ]] || err_exit 'typeset -p z for indexed array of types is incorrect'
1047c2fbfb3SApril Chinunset z y
1057c2fbfb3SApril Chinz=()
1067c2fbfb3SApril ChinPt_t -A z.p
1077c2fbfb3SApril Chinz.p[1]=(y=2)
1087c2fbfb3SApril Chinz.p[2]=(y=5)
1097c2fbfb3SApril Chinz.p[3]=(x=6 y=4)
1107c2fbfb3SApril Chineval y="$z"
1117c2fbfb3SApril Chin[[ $y == "$z" ]] || err_exit 'expansion of associative array of types is incorrect'
1127c2fbfb3SApril Chineval "$(typeset -p y)"
1137c2fbfb3SApril Chin[[ $y == "$z" ]] || err_exit 'typeset -p z for associative of types is incorrect'
1147c2fbfb3SApril Chinunset z y
1157c2fbfb3SApril Chin
1167c2fbfb3SApril Chintypeset -T A_t=(
1177c2fbfb3SApril Chin        Pt_t  -a  b
1187c2fbfb3SApril Chin)
1197c2fbfb3SApril Chintypeset -T B_t=(
1207c2fbfb3SApril Chin        Pt_t  -A  b
1217c2fbfb3SApril Chin)
1227c2fbfb3SApril ChinA_t r
1237c2fbfb3SApril Chinr.b[1]=(y=2)
1247c2fbfb3SApril Chinr.b[2]=(y=5)
1257c2fbfb3SApril Chineval s="$r"
1267c2fbfb3SApril Chin[[ $r == "$s" ]] || err_exit 'expansion of type containing index array of types is incorrect'
1277c2fbfb3SApril Chineval "$(typeset -p s)"
1287c2fbfb3SApril Chin[[ $y == "$z" ]] || err_exit 'typeset -p z for type containing index of types is incorrect'
1297c2fbfb3SApril Chinunset r s
1307c2fbfb3SApril ChinB_t r
1317c2fbfb3SApril Chinr.b[1]=(y=2)
1327c2fbfb3SApril Chinr.b[2]=(y=5)
1337c2fbfb3SApril Chineval s="$r"
1347c2fbfb3SApril Chin[[ $r == "$s" ]] || err_exit 'expansion of type containing index array of types is incorrect'
1357c2fbfb3SApril Chineval "$(typeset -p s)"
1367c2fbfb3SApril Chin[[ $y == "$z" ]] || err_exit 'typeset -p z for type containing index of types is incorrect'
1377c2fbfb3SApril Chin
138*b30d1939SAndy Fiddamanexit $((Errors<125?Errors:125))
139