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 MelloTEMP1=$WORKDIR/test.temp.1
9e6d6c189SCody Peter MelloTEMP2=$WORKDIR/test.temp.2
10e6d6c189SCody Peter Mello
11e6d6c189SCody Peter MelloRESULT=0
12e6d6c189SCody Peter Mello
13e6d6c189SCody Peter Mellofail() {
14e6d6c189SCody Peter Mello	echo "$1" >&2
15e6d6c189SCody Peter Mello	RESULT=1
16e6d6c189SCody Peter Mello}
17e6d6c189SCody Peter Mello
18e6d6c189SCody Peter Melloecho T.getline: test getline function
19e6d6c189SCody Peter Mello
20e6d6c189SCody Peter Mellowho > $TEMP1
21e6d6c189SCody Peter Mellocat $TEMP1 | $AWK '
22e6d6c189SCody Peter MelloBEGIN {
23e6d6c189SCody Peter Mello	while (getline)
24e6d6c189SCody Peter Mello		print
25e6d6c189SCody Peter Mello	exit
26e6d6c189SCody Peter Mello}
27e6d6c189SCody Peter Mello' > $TEMP2
28e6d6c189SCody Peter Mellocmp -s $TEMP1 $TEMP2 || fail 'BAD: T.getline (bare getline)'
29e6d6c189SCody Peter Mello
30e6d6c189SCody Peter Mellowho > $TEMP1
31e6d6c189SCody Peter Mellocat $TEMP1 | $AWK '
32e6d6c189SCody Peter MelloBEGIN {
33e6d6c189SCody Peter Mello	while (getline xxx)
34e6d6c189SCody Peter Mello		print xxx
35e6d6c189SCody Peter Mello	exit
36e6d6c189SCody Peter Mello}
37e6d6c189SCody Peter Mello' > $TEMP2
38e6d6c189SCody Peter Mellocmp -s $TEMP1 $TEMP2 || fail 'BAD: T.getline (getline xxx)'
39e6d6c189SCody Peter Mello
40e6d6c189SCody Peter Mello$AWK '
41e6d6c189SCody Peter MelloBEGIN {
42e6d6c189SCody Peter Mello	while (getline <"/etc/passwd")
43e6d6c189SCody Peter Mello		print
44e6d6c189SCody Peter Mello	exit
45e6d6c189SCody Peter Mello}
46e6d6c189SCody Peter Mello' > $TEMP1
47e6d6c189SCody Peter Mellocmp -s /etc/passwd $TEMP1 || fail 'BAD: T.getline (getline <file)'
48e6d6c189SCody Peter Mello
49e6d6c189SCody Peter Mellocat /etc/passwd | $AWK '
50e6d6c189SCody Peter MelloBEGIN {
51e6d6c189SCody Peter Mello	while (getline <"-")	# stdin
52e6d6c189SCody Peter Mello		print
53e6d6c189SCody Peter Mello	exit
54e6d6c189SCody Peter Mello}
55e6d6c189SCody Peter Mello' > $TEMP1
56e6d6c189SCody Peter Mellocmp -s /etc/passwd $TEMP1 || fail 'BAD: T.getline (getline <"-")'
57e6d6c189SCody Peter Mello
58e6d6c189SCody Peter Mello$AWK '
59e6d6c189SCody Peter MelloBEGIN {
60e6d6c189SCody Peter Mello	while (getline <ARGV[1])
61e6d6c189SCody Peter Mello		print
62e6d6c189SCody Peter Mello	exit
63e6d6c189SCody Peter Mello}
64e6d6c189SCody Peter Mello' /etc/passwd > $TEMP1
65e6d6c189SCody Peter Mellocmp -s /etc/passwd $TEMP1 || fail 'BAD: T.getline (getline <arg)'
66e6d6c189SCody Peter Mello
67e6d6c189SCody Peter Mello$AWK '
68e6d6c189SCody Peter MelloBEGIN {
69e6d6c189SCody Peter Mello	while (getline x <ARGV[1])
70e6d6c189SCody Peter Mello		print x
71e6d6c189SCody Peter Mello	exit
72e6d6c189SCody Peter Mello}
73e6d6c189SCody Peter Mello' /etc/passwd > $TEMP1
74e6d6c189SCody Peter Mellocmp -s /etc/passwd $TEMP1 || fail 'BAD: T.getline (getline x <arg)'
75e6d6c189SCody Peter Mello
76e6d6c189SCody Peter Mello$AWK '
77e6d6c189SCody Peter MelloBEGIN {
78e6d6c189SCody Peter Mello	while (("cat " ARGV[1]) | getline)
79e6d6c189SCody Peter Mello		print
80e6d6c189SCody Peter Mello	exit
81e6d6c189SCody Peter Mello}
82e6d6c189SCody Peter Mello' /etc/passwd > $TEMP1
83e6d6c189SCody Peter Mellocmp -s /etc/passwd $TEMP1 || fail 'BAD: T.getline (cat arg | getline)'
84e6d6c189SCody Peter Mello
85e6d6c189SCody Peter Mello$AWK '
86e6d6c189SCody Peter MelloBEGIN {
87e6d6c189SCody Peter Mello	while (("cat " ARGV[1]) | getline x)
88e6d6c189SCody Peter Mello		print x
89e6d6c189SCody Peter Mello	exit
90e6d6c189SCody Peter Mello}
91e6d6c189SCody Peter Mello' /etc/passwd > $TEMP1
92e6d6c189SCody Peter Mellocmp -s /etc/passwd $TEMP1 || fail 'BAD: T.getline (cat arg | getline x)'
93e6d6c189SCody Peter Mello
94e6d6c189SCody Peter Mello$AWK ' BEGIN { print getline <"/glop/glop/glop" } ' > $TEMP1
95e6d6c189SCody Peter Melloecho '-1' > $TEMP2
96e6d6c189SCody Peter Mellocmp -s $TEMP1 $TEMP2 || fail 'BAD: T.getline (non-existent file)'
97e6d6c189SCody Peter Mello
98*3ee4fc2aSCody Peter Melloecho 'false false equal' > $TEMP1
99*3ee4fc2aSCody Peter Mello$AWK 'BEGIN {
100*3ee4fc2aSCody Peter Mello	"echo 0" | getline
101*3ee4fc2aSCody Peter Mello	if ($0) printf "true "
102*3ee4fc2aSCody Peter Mello	else printf "false "
103*3ee4fc2aSCody Peter Mello	if ($1) printf "true "
104*3ee4fc2aSCody Peter Mello	else printf "false "
105*3ee4fc2aSCody Peter Mello	if ($0==$1) printf "equal\n"
106*3ee4fc2aSCody Peter Mello	else printf "not equal\n"
107*3ee4fc2aSCody Peter Mello}' > $TEMP2
108*3ee4fc2aSCody Peter Mellocmp -s $TEMP1 $TEMP2 || fail 'BAD: T.getline bad $0 type in cmd|getline'
109*3ee4fc2aSCody Peter Mello
110*3ee4fc2aSCody Peter Melloecho 'L1
111*3ee4fc2aSCody Peter MelloL2' | $AWK 'BEGIN { $0="old stuff"; $1="new"; getline x; print}' > $TEMP1
112*3ee4fc2aSCody Peter Melloecho 'new stuff' > $TEMP2
113*3ee4fc2aSCody Peter Mellocmp -s $TEMP1 $TEMP2 || fail 'BAD: T.getline bad update $0'
114*3ee4fc2aSCody Peter Mello
115e6d6c189SCody Peter Melloexit $RESULT
116