1*8462SApril.Chin@Sun.COM########################################################################
2*8462SApril.Chin@Sun.COM#                                                                      #
3*8462SApril.Chin@Sun.COM#               This software is part of the ast package               #
4*8462SApril.Chin@Sun.COM#          Copyright (c) 1982-2008 AT&T Intellectual Property          #
5*8462SApril.Chin@Sun.COM#                      and is licensed under the                       #
6*8462SApril.Chin@Sun.COM#                  Common Public License, Version 1.0                  #
7*8462SApril.Chin@Sun.COM#                    by AT&T Intellectual Property                     #
8*8462SApril.Chin@Sun.COM#                                                                      #
9*8462SApril.Chin@Sun.COM#                A copy of the License is available at                 #
10*8462SApril.Chin@Sun.COM#            http://www.opensource.org/licenses/cpl1.0.txt             #
11*8462SApril.Chin@Sun.COM#         (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9)         #
12*8462SApril.Chin@Sun.COM#                                                                      #
13*8462SApril.Chin@Sun.COM#              Information and Software Systems Research               #
14*8462SApril.Chin@Sun.COM#                            AT&T Research                             #
15*8462SApril.Chin@Sun.COM#                           Florham Park NJ                            #
16*8462SApril.Chin@Sun.COM#                                                                      #
17*8462SApril.Chin@Sun.COM#                  David Korn <dgk@research.att.com>                   #
18*8462SApril.Chin@Sun.COM#                                                                      #
19*8462SApril.Chin@Sun.COM########################################################################
20*8462SApril.Chin@Sun.COMfunction err_exit
21*8462SApril.Chin@Sun.COM{
22*8462SApril.Chin@Sun.COM	print -u2 -n "\t"
23*8462SApril.Chin@Sun.COM	print -u2 -r ${Command}[$1]: "${@:2}"
24*8462SApril.Chin@Sun.COM	(( Errors+=1 ))
25*8462SApril.Chin@Sun.COM}
26*8462SApril.Chin@Sun.COM
27*8462SApril.Chin@Sun.COMalias err_exit='err_exit $LINENO'
28*8462SApril.Chin@Sun.COM
29*8462SApril.Chin@Sun.COMfloat DELAY=${1:-0.5}
30*8462SApril.Chin@Sun.COMinteger FOREGROUND=10 BACKGROUND=2 Errors=0
31*8462SApril.Chin@Sun.COM
32*8462SApril.Chin@Sun.COMs=$($SHELL -c '
33*8462SApril.Chin@Sun.COMinteger i foreground=0 background=0
34*8462SApril.Chin@Sun.COMfloat delay='$DELAY' d=0 s=0
35*8462SApril.Chin@Sun.COM
36*8462SApril.Chin@Sun.COMset --errexit
37*8462SApril.Chin@Sun.COM
38*8462SApril.Chin@Sun.COMtrap "(( background++ ))" CHLD
39*8462SApril.Chin@Sun.COM
40*8462SApril.Chin@Sun.COM(( d = delay ))
41*8462SApril.Chin@Sun.COMfor ((i = 0; i < '$BACKGROUND'; i++))
42*8462SApril.Chin@Sun.COMdo	sleep $d &
43*8462SApril.Chin@Sun.COM	(( d *= 4 ))
44*8462SApril.Chin@Sun.COM	(( s += d ))
45*8462SApril.Chin@Sun.COMdone
46*8462SApril.Chin@Sun.COMfor ((i = 0; i < '$FOREGROUND'; i++))
47*8462SApril.Chin@Sun.COMdo	(( foreground++ ))
48*8462SApril.Chin@Sun.COM	sleep $delay
49*8462SApril.Chin@Sun.COM	(( s -= delay ))
50*8462SApril.Chin@Sun.COM	$SHELL -c : > /dev/null # foreground does not generate SIGCHLD
51*8462SApril.Chin@Sun.COMdone
52*8462SApril.Chin@Sun.COMif	(( (s += delay) < 1 ))
53*8462SApril.Chin@Sun.COMthen	(( s = 1 ))
54*8462SApril.Chin@Sun.COMfi
55*8462SApril.Chin@Sun.COMsleep $s
56*8462SApril.Chin@Sun.COMwait
57*8462SApril.Chin@Sun.COMprint foreground=$foreground background=$background
58*8462SApril.Chin@Sun.COM') || err_exit "test loop failed"
59*8462SApril.Chin@Sun.COM
60*8462SApril.Chin@Sun.COMeval $s
61*8462SApril.Chin@Sun.COM
62*8462SApril.Chin@Sun.COM(( foreground == FOREGROUND )) || err_exit "expected $FOREGROUND foreground -- got $foreground (DELAY=$DELAY)"
63*8462SApril.Chin@Sun.COM(( background == BACKGROUND )) || err_exit "expected $BACKGROUND background -- got $background (DELAY=$DELAY)"
64*8462SApril.Chin@Sun.COM
65*8462SApril.Chin@Sun.COMexit $((Errors))
66