Home | History | Annotate | Line # | Download | only in testdir
      1  1.1  christos #!/bin/sh
      2  1.1  christos 
      3  1.1  christos echo T.expr: tests of miscellaneous expressions
      4  1.1  christos 
      5  1.1  christos awk=${awk-../a.out}
      6  1.1  christos 
      7  1.1  christos $awk '
      8  1.1  christos BEGIN {
      9  1.1  christos 	FS = "\t"
     10  1.1  christos 	awk = "../a.out"
     11  1.1  christos }
     12  1.1  christos NF == 0 || $1 ~ /^#/ {
     13  1.1  christos 	next
     14  1.1  christos }
     15  1.1  christos $1 ~ /try/ {	# new test
     16  1.1  christos 	nt++
     17  1.1  christos 	sub(/try /, "")
     18  1.1  christos 	prog = $0
     19  1.1  christos 	printf("%3d  %s\n", nt, prog)
     20  1.1  christos 	prog = sprintf("%s -F\"\\t\" '"'"'%s'"'"'", awk, prog)
     21  1.1  christos 	# print "prog is", prog
     22  1.1  christos 	nt2 = 0
     23  1.1  christos 	while (getline > 0) {
     24  1.1  christos 		if (NF == 0)	# blank line terminates a sequence
     25  1.1  christos 			break
     26  1.1  christos 		input = $1
     27  1.1  christos 		for (i = 2; i < NF; i++)	# input data
     28  1.1  christos 			input = input "\t" $i
     29  1.1  christos 		test = sprintf("./echo '"'"'%s'"'"' | %s >foo1; ",
     30  1.1  christos 			input, prog)
     31  1.1  christos 		if ($NF == "\"\"")
     32  1.1  christos 			output = ">foo2;"
     33  1.1  christos 		else
     34  1.1  christos 			output = sprintf("./echo '"'"'%s'"'"' >foo2; ", $NF)
     35  1.1  christos 		gsub(/\\t/, "\t", output)
     36  1.1  christos 		gsub(/\\n/, "\n", output)
     37  1.1  christos 		run = sprintf("cmp foo1 foo2 || echo test %d.%d failed",
     38  1.1  christos 			nt, ++nt2)
     39  1.1  christos 		# print  "input is", input
     40  1.1  christos 		# print  "test is", test
     41  1.1  christos 		# print  "output is", output
     42  1.1  christos 		# print  "run is", run
     43  1.1  christos 		system(test output run)
     44  1.1  christos 	}
     45  1.1  christos 	tt += nt2
     46  1.1  christos }
     47  1.1  christos END { print tt, "tests" }
     48  1.1  christos ' <<\!!!!
     49  1.1  christos # General format:
     50  1.1  christos # try program as rest of line
     51  1.1  christos # $1	$2	$3	output1  (\t for tab, \n for newline,
     52  1.1  christos # $1	$2	$3	output2  ("" for null)
     53  1.1  christos # ... terminated by blank line
     54  1.1  christos 
     55  1.1  christos # try another program...
     56  1.1  christos 
     57  1.1  christos try { print ($1 == 1) ? "yes" : "no" }
     58  1.1  christos 1	yes
     59  1.1  christos 1.0	yes
     60  1.1  christos 1E0	yes
     61  1.1  christos 0.1E1	yes
     62  1.1  christos 10E-1	yes
     63  1.1  christos 01	yes
     64  1.1  christos 10	no
     65  1.1  christos 10E-2	no
     66  1.1  christos 
     67  1.1  christos try $1 > 0
     68  1.1  christos 1	1
     69  1.1  christos 2	2
     70  1.1  christos 0	""
     71  1.1  christos -1	""
     72  1.1  christos 1e0	1e0
     73  1.1  christos 0e1	""
     74  1.1  christos -2e64	""
     75  1.1  christos 3.1e4	3.1e4
     76  1.1  christos 
     77  1.1  christos try { print NF }
     78  1.1  christos 	0
     79  1.1  christos x	1
     80  1.1  christos x	y	2
     81  1.1  christos 	y	2
     82  1.1  christos x		2
     83  1.1  christos 
     84  1.1  christos try { print NF, $NF }
     85  1.1  christos 	0 
     86  1.1  christos x	1 x
     87  1.1  christos x	y	2 y
     88  1.1  christos x	yy	zzz	3 zzz
     89  1.1  christos 
     90  1.1  christos # this horror prints $($2+1)
     91  1.1  christos try { i=1; print ($++$++i) }
     92  1.1  christos 1	1
     93  1.1  christos 1	2	3	3
     94  1.1  christos abc	abc
     95  1.1  christos 
     96  1.1  christos # concatenate $1 and ++$2; print new $1 and concatenated value
     97  1.1  christos try { x = $1++++$2; print $1, x }
     98  1.1  christos 1	3	2 14
     99  1.1  christos 
    100  1.1  christos # do we get the precedence of ! right?
    101  1.1  christos try $1 !$2
    102  1.1  christos 0	0	0\t0
    103  1.1  christos 0	1	0\t1
    104  1.1  christos 1	0	1\t0
    105  1.1  christos 1	1	1\t1
    106  1.1  christos 
    107  1.1  christos # another ava special
    108  1.1  christos try { print ($1~/abc/ !$2) }
    109  1.1  christos 0	0	01
    110  1.1  christos 0	1	00
    111  1.1  christos abc	0	11
    112  1.1  christos xabcd	1	10
    113  1.1  christos 
    114  1.1  christos try { print !$1 + $2 }
    115  1.1  christos 1	3	3
    116  1.1  christos 0	3	4
    117  1.1  christos -1	3	3
    118  1.1  christos 
    119  1.1  christos # aside:  !$1 = $2 is now a syntax error
    120  1.1  christos 
    121  1.1  christos # the definition of "number" changes with isnumber.
    122  1.1  christos # 2e100 is ok according to strtod.
    123  1.1  christos # try 1 
    124  1.1  christos 
    125  1.1  christos try { print ($1 == $2) }
    126  1.1  christos 0	0	1
    127  1.1  christos 0	1	0
    128  1.1  christos 0	00	1
    129  1.1  christos 0	""	0
    130  1.1  christos +0	-0	1
    131  1.1  christos 1	1.0	1
    132  1.1  christos 1	1e0	1
    133  1.1  christos 2e10	2.00e10	1
    134  1.1  christos 2e10	2e+10	1
    135  1.1  christos 2e-10	2e-10	1
    136  1.1  christos 2e10	2e-10	0
    137  1.1  christos 2e10	20e9	1
    138  1.1  christos 2e100	2.000e100	1
    139  1.1  christos 2e1000	2.0e1000	0
    140  1.1  christos 
    141  1.1  christos # this one (3 & 4) may "fail" if a negative 0 is printed as -0,
    142  1.1  christos # but i think this might be a type-coercion problem.
    143  1.1  christos 
    144  1.1  christos try { print $1, +$1, -$1, - -$1 }
    145  1.1  christos 1	1 1 -1 1
    146  1.1  christos -1	-1 -1 1 -1
    147  1.1  christos 0	0 0 0 0
    148  1.1  christos x	x 0 0 0
    149  1.1  christos 
    150  1.1  christos try { printf("a%*sb\n", $1, $2) }
    151  1.1  christos 1	x	axb
    152  1.1  christos 2	x	a xb
    153  1.1  christos 3	x	a  xb
    154  1.1  christos 
    155  1.1  christos try { printf("a%-*sb\n", $1, $2) }
    156  1.1  christos 1	x	axb
    157  1.1  christos 2	x	ax b
    158  1.1  christos 3	x	ax  b
    159  1.1  christos 
    160  1.1  christos try { printf("a%*.*sb\n", $1, $2, "hello") }
    161  1.1  christos 1	1	ahb
    162  1.1  christos 2	1	a hb
    163  1.1  christos 3	1	a  hb
    164  1.1  christos 
    165  1.1  christos try { printf("a%-*.*sb\n", $1, $2, "hello") }
    166  1.1  christos 1	1	ahb
    167  1.1  christos 2	1	ah b
    168  1.1  christos 3	1	ah  b
    169  1.1  christos 
    170  1.1  christos try { printf("%d %ld %lld %zd %jd %hd %hhd\n", $1, $1, $1, $1, $1, $1, $1) }
    171  1.1  christos 1	1 1 1 1 1 1 1
    172  1.1  christos 10	10 10 10 10 10 10 10
    173  1.1  christos 10000	10000 10000 10000 10000 10000 10000 10000
    174  1.1  christos 
    175  1.1  christos try { printf("%x %lx %llx %zx %jx %hx %hhx\n", $1, $1, $1, $1, $1, $1, $1) }
    176  1.1  christos 1	1 1 1 1 1 1 1
    177  1.1  christos 10	a a a a a a a
    178  1.1  christos 10000	2710 2710 2710 2710 2710 2710 2710
    179  1.1  christos 
    180  1.1  christos try { if ($1 ~ $2) print 1; else print 0 }
    181  1.1  christos a	\141	1
    182  1.1  christos a	\142	0
    183  1.1  christos a	\x61	1
    184  1.1  christos a	\x061	0
    185  1.1  christos a	\x62	0
    186  1.1  christos 0	\060	1
    187  1.1  christos 0	\60	1
    188  1.1  christos 0	\0060	0
    189  1.1  christos Z	\x5a	1
    190  1.1  christos Z	\x5A	1
    191  1.1  christos 
    192  1.1  christos try { print $1 ~ $2 }
    193  1.1  christos a	\141	1
    194  1.1  christos a	\142	0
    195  1.1  christos a	\x61	1
    196  1.1  christos a	\x061	0
    197  1.1  christos a	\x62	0
    198  1.1  christos 0	\060	1
    199  1.1  christos 0	\60	1
    200  1.1  christos 0	\0060	0
    201  1.1  christos Z	\x5a	1
    202  1.1  christos Z	\x5A	1
    203  1.1  christos 
    204  1.1  christos try { print $1 || $2 }
    205  1.1  christos 		0
    206  1.1  christos 1		1
    207  1.1  christos 0	0	0
    208  1.1  christos 1	0	1
    209  1.1  christos 0	1	1
    210  1.1  christos 1	1	1
    211  1.1  christos a	b	1
    212  1.1  christos 
    213  1.1  christos try { print $1 && $2 }
    214  1.1  christos 		0
    215  1.1  christos 1		0
    216  1.1  christos 0	0	0
    217  1.1  christos 1	0	0
    218  1.1  christos 0	1	0
    219  1.1  christos 1	1	1
    220  1.1  christos a	b	1
    221  1.1  christos 
    222  1.1  christos try { $1 = $2; $1 = $1; print $1 }
    223  1.1  christos abc	def	def
    224  1.1  christos abc	def	ghi	def
    225  1.1  christos 
    226  1.1  christos # $f++ => ($f)++
    227  1.1  christos try { f = 1; $f++; print f, $f }
    228  1.1  christos 11	22	33	1 12
    229  1.1  christos 
    230  1.1  christos # $f[1]++ => ($f[1])++
    231  1.1  christos try { f[1]=1; f[2]=2; print $f[1], $f[1]++, $f[2], f[1], f[2] }
    232  1.1  christos 111	222	333	111 111 222 2 2
    233  1.1  christos 
    234  1.1  christos 
    235  1.1  christos !!!!
    236