aat

git mirror of https://ccx.te2000.cz/bzr/aat
git clone https://ccx.te2000.cz/git/aat
Log | Files | Refs | README

query.test (9883B)


      1 ./querytest tests/query1
      2 <<<
      3 BEGIN {
      4 }
      5 >>>
      6 BEGIN {
      7 }
      8 >>>2
      9 >>>= 0
     10 
     11 ./querytest tests/query2
     12 <<<
     13 	foo(<bar>)
     14 >>>
     15 	foo(get("bar"))
     16 >>>2
     17 >>>= 0
     18 
     19 ./querytest tests/query3
     20 <<<
     21 	x[<y<z>>] = <a'b()'>
     22 >>>
     23 	x[get("y"get("z"))] = get("a"(b()))
     24 >>>2
     25 >>>= 0
     26 
     27 ./querytest tests/query4
     28 <<<
     29 	y = ""
     30 >>>
     31 	y = ""
     32 >>>2
     33 >>>= 0
     34 
     35 ./querytest tests/query5
     36 <<<
     37 	y = (y) (<c:>)
     38 >>>
     39 	y = (y) ((find("c")?found:""))
     40 >>>2
     41 >>>= 0
     42 
     43 ./querytest tests/query6
     44 <<<
     45 	y = (y) (<d:'0'>)
     46 >>>
     47 	y = (y) ((find("d")?found:(0)))
     48 >>>2
     49 >>>= 0
     50 
     51 ./querytest tests/query7
     52 <<<
     53 	y = (y) (<e:<f>>)
     54 >>>
     55 	y = (y) ((find("e")?found:get("f")))
     56 >>>2
     57 >>>= 0
     58 
     59 ./querytest tests/query8
     60 <<<
     61 	y = (y) (<g:<h:<i>>>)
     62 >>>
     63 	y = (y) ((find("g")?found:(find("h")?found:get("i"))))
     64 >>>2
     65 >>>= 0
     66 
     67 ./querytest tests/query9
     68 <<<
     69 	y = (y) (<g:<h:<i:'<j> - (<k:'0'>)'>>>)
     70 >>>
     71 	y = (y) ((find("g")?found:(find("h")?found:(find("i")?found:(get("j") - ((find("k")?found:(0))))))))
     72 >>>2
     73 >>>= 0
     74 
     75 ./querytest tests/query10
     76 <<<
     77 	y = (y) (<g:<h:<i:'(<j>) - (<k:'0'>)'>>>)
     78 >>>
     79 	y = (y) ((find("g")?found:(find("h")?found:(find("i")?found:((get("j")) - ((find("k")?found:(0))))))))
     80 >>>2
     81 >>>= 0
     82 
     83 ./querytest tests/query11
     84 <<<
     85 	y = (y) (<a|C:'"r\n"'>)
     86 >>>
     87 	y = (y) ((find("a")?C(found):("r\n")))
     88 >>>2
     89 >>>= 0
     90 
     91 ./querytest tests/query12
     92 <<<
     93 	y = (y) (<a|C:"r\n">)
     94 >>>
     95 	y = (y) ((find("a")?C(found):"r\n"))
     96 >>>2
     97 >>>= 0
     98 
     99 ./querytest tests/query13
    100 <<<
    101 	y = (y) (<a|C>)
    102 >>>
    103 	y = (y) (C(get("a")))
    104 >>>2
    105 >>>= 0
    106 
    107 ./querytest tests/query14
    108 <<<
    109 #!/bin/awk -f
    110 >>>
    111 #!/bin/awk -f
    112 >>>2
    113 >>>= 0
    114 
    115 ./querytest tests/query15
    116 <<<
    117 #!/bin/awk -f
    118 BEGIN {
    119 	print "Hello!"
    120 }
    121 >>>
    122 #!/bin/awk -f
    123 BEGIN {
    124 	print "Hello!"
    125 }
    126 >>>2
    127 >>>= 0
    128 
    129 ./querytest tests/query16
    130 <<<
    131 #!/bin/awk -f
    132 BEGIN {
    133 	FS="\t"
    134 	SUBSEP="."
    135 	state = 0
    136 	# 0 read normal variables
    137 	# 1 seen start of field list, read titles
    138 	# 2 reading list values
    139 	# ident_re = /[a-zA-Z_][a-zA-Z0-9_]*/
    140 	ident_re = "[a-zA-Z_][a-zA-Z0-9_]*"
    141 }
    142 >>>
    143 #!/bin/awk -f
    144 BEGIN {
    145 	FS="\t"
    146 	SUBSEP="."
    147 	state = 0
    148 	# 0 read normal variables
    149 	# 1 seen start of field list, read titles
    150 	# 2 reading list values
    151 	# ident_re = /[a-zA-Z_][a-zA-Z0-9_]*/
    152 	ident_re = "[a-zA-Z_][a-zA-Z0-9_]*"
    153 }
    154 >>>2
    155 >>>= 0
    156 
    157 ./querytest tests/query17
    158 <<<
    159 $0 == "]" && state == 2 {
    160 	# end of field list
    161 	state = 0
    162 	next
    163 }
    164 
    165 state == 2 {
    166 	V[varname,++V[varname,"rows"]] = $0
    167 	next
    168 }
    169 
    170 state == 1 {
    171 	if((varname, "fields") in V) {
    172 		if(V[varname,"fields"] != $0) {
    173 			print "data.awk: differing field definition for '"varname"'" >"/dev/stderr"
    174 			print "previous: '"V[varname,"fields"]"'" >"/dev/stderr"
    175 			print "current:  '"$0"'" >"/dev/stderr"
    176 			exit 1
    177 		}
    178 	}
    179 	V[varname,"fields"] = $0
    180 	state = 2
    181 	next
    182 }
    183 >>>
    184 $0 == "]" && state == 2 {
    185 	# end of field list
    186 	state = 0
    187 	next
    188 }
    189 
    190 state == 2 {
    191 	V[varname,++V[varname,"rows"]] = $0
    192 	next
    193 }
    194 
    195 state == 1 {
    196 	if((varname, "fields") in V) {
    197 		if(V[varname,"fields"] != $0) {
    198 			print "data.awk: differing field definition for '"varname"'" >"/dev/stderr"
    199 			print "previous: '"V[varname,"fields"]"'" >"/dev/stderr"
    200 			print "current:  '"$0"'" >"/dev/stderr"
    201 			exit 1
    202 		}
    203 	}
    204 	V[varname,"fields"] = $0
    205 	state = 2
    206 	next
    207 }
    208 >>>2
    209 >>>=0
    210 
    211 ./querytest tests/query18
    212 <<<
    213 /^del[ \t].*[a-zA-Z_][a-zA-Z0-9_.]$/ {
    214 	del_pattern = substr($0, 5)
    215 	for(varname in V) {
    216 		if (match(varname, del_pattern)) {
    217 			delete V[varname]
    218 		}
    219 	}
    220 }
    221 
    222 /^[a-zA-Z_][a-zA-Z0-9_.]*=\[$/ {
    223 	# start of field list
    224 	state = 1
    225 	m = match($0, ident_re)
    226 	varname = substr($0, m, RLENGTH)
    227 	next
    228 }
    229 
    230 /^[a-zA-Z_][a-zA-Z0-9_.]*=/ {
    231 	m = match($0, ident_re)
    232 	varname = substr($0, m, RLENGTH)
    233 	V[varname] = substr($0, m+1+RLENGTH)
    234 	if(DEBUG) printf "got scalar: %s ⇒ %s (%d)\n", varname, V[varname], m >"/dev/stderr"
    235 	next
    236 }
    237 
    238 /^\t/ {
    239 	V[varname] = V[varname] "\n" substr($0, 1)
    240 	next
    241 }
    242 
    243 /^#/ { next }
    244 /^$/ { next }
    245 >>>
    246 /^del[ \t].*[a-zA-Z_][a-zA-Z0-9_.]$/ {
    247 	del_pattern = substr($0, 5)
    248 	for(varname in V) {
    249 		if (match(varname, del_pattern)) {
    250 			delete V[varname]
    251 		}
    252 	}
    253 }
    254 
    255 /^[a-zA-Z_][a-zA-Z0-9_.]*=\[$/ {
    256 	# start of field list
    257 	state = 1
    258 	m = match($0, ident_re)
    259 	varname = substr($0, m, RLENGTH)
    260 	next
    261 }
    262 
    263 /^[a-zA-Z_][a-zA-Z0-9_.]*=/ {
    264 	m = match($0, ident_re)
    265 	varname = substr($0, m, RLENGTH)
    266 	V[varname] = substr($0, m+1+RLENGTH)
    267 	if(DEBUG) printf "got scalar: %s ⇒ %s (%d)\n", varname, V[varname], m >"/dev/stderr"
    268 	next
    269 }
    270 
    271 /^\t/ {
    272 	V[varname] = V[varname] "\n" substr($0, 1)
    273 	next
    274 }
    275 
    276 /^#/ { next }
    277 /^$/ { next }
    278 >>>2
    279 >>>=0
    280 
    281 ./querytest tests/query19
    282 <<<
    283 {
    284 	# TODO posix compliance
    285 	print "data.awk: unparseable line: '"$0"'" >"/dev/stderr"
    286 	exit 1
    287 }
    288 
    289 function loop_start(varname, prefix,    depth) {
    290 	depth = ++loop_stack["depth"]
    291 	loop_stack[depth,"row"] = 0
    292 	loop_stack[depth,"var"] = varname
    293 	loop_stack[depth,"pre"] = prefix
    294 	return depth
    295 }
    296 
    297 function loop_iter(depth) {
    298 	loop_stack[depth,"row"]++
    299 	return (loop_stack[depth,"var"], loop_stack[depth,"row"]) in V
    300 }
    301 
    302 function loop_end() {
    303 	delete loop_stack[loop_stack["depth"], "row"]
    304 	delete loop_stack[loop_stack["depth"], "var"]
    305 	delete loop_stack[loop_stack["depth"], "pre"]
    306 	loop_stack["depth"]--
    307 }
    308 
    309 function find(varname,   i, n, names, values, loopvar, looprow, prefix) {
    310 	for(i=loop_stack["depth"]; i>0; i--) {
    311 		prefix = loop_stack[i, "pre"]
    312 		if(prefix)
    313 			if(substr(varname, 1, length(prefix)) != prefix)
    314 				continue
    315 		loopvar = loop_stack[i, "var"]
    316 		looprow = loop_stack[i, "row"]
    317 		if(varname == prefix"_index")
    318 			return looprow
    319 		if(varname == prefix"_index0")
    320 			return looprow - 1
    321 		if(varname == prefix"_revindex")
    322 			return V[loopvar, "rows"] - looprow + 1
    323 		if(varname == prefix"_revindex0")
    324 			return V[loopvar, "rows"] - looprow
    325 		if(varname == prefix"_first")
    326 			return looprow == 1
    327 		if(varname == prefix"_last")
    328 			return looprow == V[loopvar, "rows"]
    329 		if(varname == prefix"_length")
    330 			return V[loopvar, "rows"]
    331 		split(V[loopvar, "fields"], names)
    332 		for(n in names) {
    333 			if(varname == (prefix names[n])) {
    334 				split(V[loopvar, looprow], values)
    335 				return values[n]
    336 			}
    337 		}
    338 	}
    339 	if(!(varname in V)) {
    340 		if(DEBUG) {
    341 			print "variable not found: " varname >"/dev/stderr"
    342 		}
    343 		return 0
    344 	}
    345 	found = V[varname]
    346 	return 1
    347 }
    348 
    349 function get(varname) {
    350 	if(!find(varname)) {
    351 		print "error: undefined variable '"varname"'" >"/dev/stderr"
    352 		exit 1
    353 	}
    354 	if(DEBUG) {
    355 		print "get →" varname "← ⇒ →"found"←" >"/dev/stderr"
    356 	}
    357 	return found
    358 }
    359 
    360 function or_(a, b) {
    361 	return a ? a : b
    362 }
    363 
    364 END {
    365 	if(DEBUG) {
    366 		print "--- loaded keys ---" >"/dev/stderr"
    367 		for(key in V)
    368 			printf("%s\t→%s←\t", key, V[key]) >"/dev/stderr"
    369 			printf(">> %d →%s←\n", find(key), found) >"/dev/stderr"
    370 		print "-------------------" >"/dev/stderr"
    371 	}
    372 }
    373 >>>
    374 {
    375 	# TODO posix compliance
    376 	print "data.awk: unparseable line: '"$0"'" >"/dev/stderr"
    377 	exit 1
    378 }
    379 
    380 function loop_start(varname, prefix,    depth) {
    381 	depth = ++loop_stack["depth"]
    382 	loop_stack[depth,"row"] = 0
    383 	loop_stack[depth,"var"] = varname
    384 	loop_stack[depth,"pre"] = prefix
    385 	return depth
    386 }
    387 
    388 function loop_iter(depth) {
    389 	loop_stack[depth,"row"]++
    390 	return (loop_stack[depth,"var"], loop_stack[depth,"row"]) in V
    391 }
    392 
    393 function loop_end() {
    394 	delete loop_stack[loop_stack["depth"], "row"]
    395 	delete loop_stack[loop_stack["depth"], "var"]
    396 	delete loop_stack[loop_stack["depth"], "pre"]
    397 	loop_stack["depth"]--
    398 }
    399 
    400 function find(varname,   i, n, names, values, loopvar, looprow, prefix) {
    401 	for(i=loop_stack["depth"]; i>0; i--) {
    402 		prefix = loop_stack[i, "pre"]
    403 		if(prefix)
    404 			if(substr(varname, 1, length(prefix)) != prefix)
    405 				continue
    406 		loopvar = loop_stack[i, "var"]
    407 		looprow = loop_stack[i, "row"]
    408 		if(varname == prefix"_index")
    409 			return looprow
    410 		if(varname == prefix"_index0")
    411 			return looprow - 1
    412 		if(varname == prefix"_revindex")
    413 			return V[loopvar, "rows"] - looprow + 1
    414 		if(varname == prefix"_revindex0")
    415 			return V[loopvar, "rows"] - looprow
    416 		if(varname == prefix"_first")
    417 			return looprow == 1
    418 		if(varname == prefix"_last")
    419 			return looprow == V[loopvar, "rows"]
    420 		if(varname == prefix"_length")
    421 			return V[loopvar, "rows"]
    422 		split(V[loopvar, "fields"], names)
    423 		for(n in names) {
    424 			if(varname == (prefix names[n])) {
    425 				split(V[loopvar, looprow], values)
    426 				return values[n]
    427 			}
    428 		}
    429 	}
    430 	if(!(varname in V)) {
    431 		if(DEBUG) {
    432 			print "variable not found: " varname >"/dev/stderr"
    433 		}
    434 		return 0
    435 	}
    436 	found = V[varname]
    437 	return 1
    438 }
    439 
    440 function get(varname) {
    441 	if(!find(varname)) {
    442 		print "error: undefined variable '"varname"'" >"/dev/stderr"
    443 		exit 1
    444 	}
    445 	if(DEBUG) {
    446 		print "get →" varname "← ⇒ →"found"←" >"/dev/stderr"
    447 	}
    448 	return found
    449 }
    450 
    451 function or_(a, b) {
    452 	return a ? a : b
    453 }
    454 
    455 END {
    456 	if(DEBUG) {
    457 		print "--- loaded keys ---" >"/dev/stderr"
    458 		for(key in V)
    459 			printf("%s\t→%s←\t", key, V[key]) >"/dev/stderr"
    460 			printf(">> %d →%s←\n", find(key), found) >"/dev/stderr"
    461 		print "-------------------" >"/dev/stderr"
    462 	}
    463 }
    464 >>>2
    465 >>>= 0
    466 
    467 ./querytest tests/query20
    468 <<<
    469 # start @awk /home/ccx/.local/bzr/aat/data.awk {{{
    470 #!/bin/awk -f
    471 BEGIN {
    472 }
    473 # }}} end @awk /home/ccx/.local/bzr/aat/data.awk
    474 # START: bar/inherit/example/data.aat
    475 END{
    476 printf "%s", "hostname=" (<hostname:"localhost">) "\n"
    477 }
    478 # END: bar/inherit/example/data.aat
    479 >>>
    480 # start @awk /home/ccx/.local/bzr/aat/data.awk {{{
    481 #!/bin/awk -f
    482 BEGIN {
    483 }
    484 # }}} end @awk /home/ccx/.local/bzr/aat/data.awk
    485 # START: bar/inherit/example/data.aat
    486 END{
    487 printf "%s", "hostname=" ((find("hostname")?found:"localhost")) "\n"
    488 }
    489 # END: bar/inherit/example/data.aat
    490 >>>2
    491 >>>= 0
    492 
    493 ./querytest tests/query21
    494 <<<
    495 	if(DEBUG) printf "got scalar: %s ⇒ %s (%d)\n", varname, V[varname], m >"/dev/stderr"
    496 >>>
    497 	if(DEBUG) printf "got scalar: %s ⇒ %s (%d)\n", varname, V[varname], m >"/dev/stderr"
    498 >>>2
    499 >>>= 0
    500 
    501 ./querytest tests/query22
    502 <<<
    503 printf "%s", (ifdir) "/" (int_args[n]) "	" (<int.'int_args[n]'|C:"r">) "\n"
    504 >>>
    505 printf "%s", (ifdir) "/" (int_args[n]) "	" ((find("int."(int_args[n]))?C(found):"r")) "\n"
    506 >>>2
    507 >>>= 0
    508 
    509 ./querytest tests/query23
    510 <<<
    511 printf "%s", (vsdir) "/shellͺ   " (<vs.shell|C:"r">) "\n"
    512 >>>
    513 printf "%s", (vsdir) "/shellͺ   " ((find("vs.shell")?C(found):"r")) "\n"
    514 >>>2
    515 >>>= 0