1e6d6c189SCody Peter Mello#!/bin/bash
2e6d6c189SCody Peter Mello
3e6d6c189SCody Peter Melloif [[ -z "$AWK" || -z "$WORKDIR" ]]; then
4e6d6c189SCody Peter Mello    printf '$AWK and $WORKDIR must be set\n' >&2
5e6d6c189SCody Peter Mello    exit 1
6e6d6c189SCody Peter Mellofi
7e6d6c189SCody Peter Mello
8e6d6c189SCody Peter MelloTEMP0=$WORKDIR/test.temp.0
9e6d6c189SCody Peter MelloTEMP1=$WORKDIR/test.temp.1
10e6d6c189SCody Peter MelloTEMP2=$WORKDIR/test.temp.2
11e6d6c189SCody Peter MelloTEMP3=$WORKDIR/test.temp.3
12e6d6c189SCody Peter MelloTEMP4=$WORKDIR/test.temp.4
13e6d6c189SCody Peter MelloTEMP5=$WORKDIR/test.temp.5
14e6d6c189SCody Peter Mello
15e6d6c189SCody Peter MelloRESULT=0
16e6d6c189SCody Peter Mello
17e6d6c189SCody Peter Mellofail() {
18e6d6c189SCody Peter Mello	echo "$1" >&2
19e6d6c189SCody Peter Mello	RESULT=1
20e6d6c189SCody Peter Mello}
21e6d6c189SCody Peter Mello
22e6d6c189SCody Peter Melloecho T.argv: misc tests of argc and argv
23e6d6c189SCody Peter Mello
24e6d6c189SCody Peter Melloecho > $TEMP1
25e6d6c189SCody Peter Melloecho > $TEMP2
26e6d6c189SCody Peter Mello$AWK '
27e6d6c189SCody Peter MelloBEGIN {
28e6d6c189SCody Peter Mello	for (i = 1; i < ARGC-1; i++)
29e6d6c189SCody Peter Mello		printf "%s ", ARGV[i]
30e6d6c189SCody Peter Mello	if (ARGC > 1)
31e6d6c189SCody Peter Mello		printf "%s", ARGV[i]
32e6d6c189SCody Peter Mello	printf "\n"
33e6d6c189SCody Peter Mello	exit
34e6d6c189SCody Peter Mello}' * > $TEMP1
35e6d6c189SCody Peter Melloecho * > $TEMP2
36e6d6c189SCody Peter Mellodiff $TEMP1 $TEMP2 || fail 'BAD: T.argv (echo1 *)'
37e6d6c189SCody Peter Mello
38e6d6c189SCody Peter Mello$AWK '
39e6d6c189SCody Peter MelloBEGIN {
40e6d6c189SCody Peter Mello	for (i = 1; i < ARGC; i++) {
41e6d6c189SCody Peter Mello		printf "%s", ARGV[i]
42e6d6c189SCody Peter Mello		if (i < ARGC-1)
43e6d6c189SCody Peter Mello			printf " "
44e6d6c189SCody Peter Mello	}
45e6d6c189SCody Peter Mello	printf "\n"
46e6d6c189SCody Peter Mello	exit
47e6d6c189SCody Peter Mello}' * > $TEMP1
48e6d6c189SCody Peter Melloecho * > $TEMP2
49e6d6c189SCody Peter Mellodiff $TEMP1 $TEMP2 || fail 'BAD: T.argv (echo2 *)'
50e6d6c189SCody Peter Mello
51e6d6c189SCody Peter Mello$AWK '
52e6d6c189SCody Peter MelloBEGIN {
53e6d6c189SCody Peter Mello	print ARGC
54e6d6c189SCody Peter Mello	ARGV[ARGC-1] = ""
55e6d6c189SCody Peter Mello	for (i=0; i < ARGC; i++)
56e6d6c189SCody Peter Mello		print ARGV[i]
57e6d6c189SCody Peter Mello	exit
58e6d6c189SCody Peter Mello}
59e6d6c189SCody Peter Mello' a bc def gh > $TEMP1
60e6d6c189SCody Peter Melloecho "5
61e6d6c189SCody Peter Mello$AWK
62e6d6c189SCody Peter Melloa
63e6d6c189SCody Peter Mellobc
64e6d6c189SCody Peter Mellodef
65e6d6c189SCody Peter Mello" > $TEMP2
66e6d6c189SCody Peter Mellodiff $TEMP1 $TEMP2 || fail 'BAD: T.argv (argc *)'
67e6d6c189SCody Peter Mello
68e6d6c189SCody Peter Melloecho '1
69e6d6c189SCody Peter Mello2
70e6d6c189SCody Peter Mello3' > $TEMP0
71e6d6c189SCody Peter Melloecho 'foo1
72e6d6c189SCody Peter Mellofoo2
73e6d6c189SCody Peter Mellofoo3' > $TEMP1
74e6d6c189SCody Peter Mello$AWK '{print L $0}' L=foo <$TEMP0 > $TEMP2
75e6d6c189SCody Peter Mellodiff $TEMP1 $TEMP2 || fail 'BAD: T.argv (L=foo <test.temp.1)'
76e6d6c189SCody Peter Mello
77e6d6c189SCody Peter Melloecho '1
78e6d6c189SCody Peter Mello2
79e6d6c189SCody Peter Mello3' > $TEMP0
80e6d6c189SCody Peter Melloecho 'foo1
81e6d6c189SCody Peter Mellofoo2
82e6d6c189SCody Peter Mellofoo3' > $TEMP1
83e6d6c189SCody Peter Mello$AWK '{print L $0}' L=foo $TEMP0 > $TEMP2
84e6d6c189SCody Peter Mellodiff $TEMP1 $TEMP2 || fail 'BAD: T.argv (L=foo test.temp.1)'
85e6d6c189SCody Peter Mello
86e6d6c189SCody Peter Melloecho '1
87e6d6c189SCody Peter Mello2
88e6d6c189SCody Peter Mello3' > $TEMP0
89e6d6c189SCody Peter Melloecho 'foo1
90e6d6c189SCody Peter Mellofoo2
91e6d6c189SCody Peter Mellofoo3' > $TEMP1
92e6d6c189SCody Peter Mellocat $TEMP0 | $AWK '{print L $0}' L=foo - > $TEMP2
93e6d6c189SCody Peter Mellodiff $TEMP1 $TEMP2 || fail 'BAD: T.argv (L=foo -)'
94e6d6c189SCody Peter Mello
95e6d6c189SCody Peter Melloecho '1
96e6d6c189SCody Peter Mello2
97e6d6c189SCody Peter Mello3' > $TEMP0
98e6d6c189SCody Peter Melloecho 'foo1
99e6d6c189SCody Peter Mellofoo2
100e6d6c189SCody Peter Mellofoo3
101e6d6c189SCody Peter Melloglop1
102e6d6c189SCody Peter Melloglop2
103e6d6c189SCody Peter Melloglop3' > $TEMP1
104e6d6c189SCody Peter Mello$AWK '{print L $0}' L=foo $TEMP0 L=glop $TEMP0 > $TEMP2
105e6d6c189SCody Peter Mellodiff $TEMP1 $TEMP2 || fail 'BAD: T.argv (L=foo L=glop)'
106e6d6c189SCody Peter Mello
107e6d6c189SCody Peter Melloecho '1
108e6d6c189SCody Peter Mello2
109e6d6c189SCody Peter Mello3' > $TEMP0
110e6d6c189SCody Peter Melloecho '111
111e6d6c189SCody Peter Mello112
112e6d6c189SCody Peter Mello113
113e6d6c189SCody Peter Mello221
114e6d6c189SCody Peter Mello222
115e6d6c189SCody Peter Mello223' > $TEMP1
116e6d6c189SCody Peter Mello$AWK '{print L $0}' L=11 $TEMP0 L=22 $TEMP0 > $TEMP2
117e6d6c189SCody Peter Mellodiff $TEMP1 $TEMP2 || fail 'BAD: T.argv (L=11 L=22)'
118e6d6c189SCody Peter Mello
119e6d6c189SCody Peter Melloecho 3.345 > $TEMP1
120e6d6c189SCody Peter Mello$AWK 'BEGIN { print ARGV[1] + ARGV[2]}' 1 2.345 > $TEMP2
121e6d6c189SCody Peter Mellodiff $TEMP1 $TEMP2 || fail 'BAD: T.argv (ARGV[1] + ARGV[2])'
122e6d6c189SCody Peter Mello
123e6d6c189SCody Peter Melloecho 3.345 > $TEMP1
124e6d6c189SCody Peter Mellox1=1 x2=2.345 $AWK 'BEGIN { print ENVIRON["x1"] + ENVIRON["x2"]}' 1 2.345 > $TEMP2
125e6d6c189SCody Peter Mellodiff $TEMP1 $TEMP2 || fail 'BAD: T.argv (ENVIRON[x1] + ENVIRON[x2])'
126e6d6c189SCody Peter Mello
127e6d6c189SCody Peter Mello
128e6d6c189SCody Peter Melloecho 'test.temp.1' > $TEMP1
129e6d6c189SCody Peter Melloecho 'test.temp.2' > $TEMP2
130e6d6c189SCody Peter Melloecho 'test.temp.3' > $TEMP3
131e6d6c189SCody Peter Mello$AWK 'BEGIN { ARGV[2] = "" }
132e6d6c189SCody Peter Mello	{ print }' $TEMP1 $TEMP2 $TEMP3 > $TEMP4
133e6d6c189SCody Peter Melloecho 'test.temp.1
134e6d6c189SCody Peter Mellotest.temp.3' > $TEMP5
135e6d6c189SCody Peter Mellodiff $TEMP4 $TEMP5 || fail 'BAD: T.argv zap ARGV[2]'
136e6d6c189SCody Peter Mello
137*3ee4fc2aSCody Peter Melloecho hi > $TEMP1 ; mv $TEMP1 $TEMP2
138*3ee4fc2aSCody Peter Mello$AWK 'BEGIN { ARGV[1] = "'$TEMP2'" ; print FILENAME }
139*3ee4fc2aSCody Peter Mello             { print FILENAME }' $TEMP1 > $TEMP3
140*3ee4fc2aSCody Peter Melloecho "
141*3ee4fc2aSCody Peter Mello$TEMP2" > $TEMP4
142*3ee4fc2aSCody Peter Mellodiff $TEMP3 $TEMP4 || fail 'BAD: T.argv startup FILENAME'
143*3ee4fc2aSCody Peter Mello	# assumes that startup FILENAME is ""
144*3ee4fc2aSCody Peter Mello
145*3ee4fc2aSCody Peter Mello
146*3ee4fc2aSCody Peter Mello# test data balanced on pinhead...
147*3ee4fc2aSCody Peter Melloecho "ARGV[3] is /dev/null
148*3ee4fc2aSCody Peter MelloARGV[0] is $AWK
149*3ee4fc2aSCody Peter MelloARGV[1] is /dev/null" > $TEMP1
150*3ee4fc2aSCody Peter Mello
151*3ee4fc2aSCody Peter Mello$AWK 'BEGIN {   # this is a variant of arnolds original example
152*3ee4fc2aSCody Peter Mello        ARGV[1] = "/dev/null"
153*3ee4fc2aSCody Peter Mello        ARGV[2] = "glotch"  # file open must skipped deleted argv
154*3ee4fc2aSCody Peter Mello        ARGV[3] = "/dev/null"
155*3ee4fc2aSCody Peter Mello        ARGC = 4
156*3ee4fc2aSCody Peter Mello        delete ARGV[2]
157*3ee4fc2aSCody Peter Mello}
158*3ee4fc2aSCody Peter Mello# note that input is read here
159*3ee4fc2aSCody Peter MelloEND {
160*3ee4fc2aSCody Peter Mello        for (i in ARGV)
161*3ee4fc2aSCody Peter Mello                printf("ARGV[%d] is %s\n", i, ARGV[i])
162*3ee4fc2aSCody Peter Mello}' > $TEMP2
163*3ee4fc2aSCody Peter Mellodiff $TEMP1 $TEMP2 || fail 'BAD: T.argv delete ARGV[2]'
164*3ee4fc2aSCody Peter Mello
165e6d6c189SCody Peter Melloexit $RESULT
166