Blame test/typedregex1.awk

Packit 575503
# This file describes the semantics for hard regex constants
Packit 575503
# As much as possible it's executable code so that it can be used
Packit 575503
# (or split into) test cases for development and regression testing.
Packit 575503
Packit 575503
function simple_tests(	fbre, numresult, strresult)
Packit 575503
{
Packit 575503
	# usable as case value
Packit 575503
	switch ("foobaaar") {
Packit 575503
	case @/fo+ba+r/:
Packit 575503
		print "switch-case: ok"
Packit 575503
		break
Packit 575503
	default:
Packit 575503
		print "switch-case: fail"
Packit 575503
		break
Packit 575503
	}
Packit 575503
Packit 575503
	# usable with ~ and !~
Packit 575503
	if ("foobaaar" ~ @/fo+ba+r/)
Packit 575503
		print "match ~: ok"
Packit 575503
	else
Packit 575503
		print "match ~: fail"
Packit 575503
Packit 575503
	if ("quasimoto" !~ @/fo+ba+r/)
Packit 575503
		print "match !~: ok"
Packit 575503
	else
Packit 575503
		print "match !~: fail"
Packit 575503
Packit 575503
	# assign to variable, use in match
Packit 575503
	fbre = @/fo+ba+r/
Packit 575503
	if ("foobaaar" ~ fbre)
Packit 575503
		print "variable match ~: ok"
Packit 575503
	else
Packit 575503
		print "variable match ~: fail"
Packit 575503
Packit 575503
	if ("quasimoto" !~ fbre)
Packit 575503
		print "variable match !~: ok"
Packit 575503
	else
Packit 575503
		print "variable match !~: fail"
Packit 575503
Packit 575503
	# Use as numeric value, should be zero
Packit 575503
	numresult = fbre + 42
Packit 575503
	if (numresult == 42)
Packit 575503
		print "variable as numeric value: ok"
Packit 575503
	else
Packit 575503
		print "variable as numeric value: fail"
Packit 575503
Packit 575503
	# Use as string value, should be string value of regexp text
Packit 575503
	strresult = "<" fbre ">"
Packit 575503
	if (strresult == "<fo+ba+r>")
Packit 575503
		print "variable as string value: ok"
Packit 575503
	else
Packit 575503
		print "variable as string value: fail", strresult
Packit 575503
Packit 575503
	# typeof should work
Packit 575503
	if (typeof(@/fo+ba+r/) == "regexp")
Packit 575503
		print "typeof constant: ok"
Packit 575503
	else
Packit 575503
		print "typeof constant: fail"
Packit 575503
Packit 575503
	if (typeof(fbre) == "regexp")
Packit 575503
		print "typeof variable: ok"
Packit 575503
	else
Packit 575503
		print "typeof variable: fail"
Packit 575503
Packit 575503
	# conversion to number, works. should it be fatal?
Packit 575503
	fbre++
Packit 575503
	if (fbre == 1)
Packit 575503
		print "conversion to number: ok"
Packit 575503
	else
Packit 575503
		print "conversion to number: fail"
Packit 575503
Packit 575503
	if (typeof(fbre) == "number")
Packit 575503
		print "typeof variable after conversion: ok"
Packit 575503
	else
Packit 575503
		print "typeof variable after conversion: fail"
Packit 575503
}
Packit 575503
Packit 575503
function match_tests(	fbre, fun)
Packit 575503
{
Packit 575503
	if (match("foobaaar", @/fo+ba+r/))
Packit 575503
		print "match(constant): ok"
Packit 575503
	else
Packit 575503
		print "match(constant): fail"
Packit 575503
Packit 575503
	fbre = @/fo+ba+r/
Packit 575503
	if (match("foobaaar", fbre))
Packit 575503
		print "match(variable): ok"
Packit 575503
	else
Packit 575503
		print "match(variable): fail"
Packit 575503
Packit 575503
	fun = "match"
Packit 575503
	if (@fun("foobaaar", @/fo+ba+r/))
Packit 575503
		print "match(constant) indirect: ok"
Packit 575503
	else
Packit 575503
		print "match(constant) indirect: fail"
Packit 575503
Packit 575503
	if (@fun("foobaaar", fbre))
Packit 575503
		print "match(variable) indirect: ok"
Packit 575503
	else
Packit 575503
		print "match(variable) indirect: fail"
Packit 575503
}
Packit 575503
Packit 575503
function sub_tests(	fbre, count, target, fun)
Packit 575503
{
Packit 575503
	target = "abc foobaar def foobar ghi"
Packit 575503
	count = sub(@/fo+ba+r/, "XX", target)
Packit 575503
	if (count == 1 && target == "abc XX def foobar ghi")
Packit 575503
		print "sub(constant): ok"
Packit 575503
	else
Packit 575503
		print "sub(constant): fail"
Packit 575503
Packit 575503
	fbre = @/fo+ba+r/
Packit 575503
	target = "abc foobaar def foobar ghi"
Packit 575503
	count = sub(fbre, "XX", target)
Packit 575503
	if (count == 1 && target == "abc XX def foobar ghi")
Packit 575503
		print "sub(variable): ok"
Packit 575503
	else
Packit 575503
		print "sub(variable): fail"
Packit 575503
Packit 575503
	fun = "sub"
Packit 575503
	$0 = "abc foobaar def foobar ghi"
Packit 575503
	count = @fun(@/fo+ba+r/, "XX")
Packit 575503
	if (count == 1 && $0 == "abc XX def foobar ghi")
Packit 575503
		print "sub(constant) indirect: ok"
Packit 575503
	else
Packit 575503
		print "sub(constant) indirect: fail"
Packit 575503
Packit 575503
	$0 = "abc foobaar def foobar ghi"
Packit 575503
	count = @fun(fbre, "XX")
Packit 575503
	if (count == 1 && $0 == "abc XX def foobar ghi")
Packit 575503
		print "sub(variable) indirect: ok"
Packit 575503
	else
Packit 575503
		print "sub(variable) indirect: fail"
Packit 575503
}
Packit 575503
Packit 575503
function gsub_tests(	fbre, count, target, fun)
Packit 575503
{
Packit 575503
	target = "abc foobaar def foobar ghi"
Packit 575503
	count = gsub(@/fo+ba+r/, "XX", target)
Packit 575503
	if (count == 2 && target == "abc XX def XX ghi")
Packit 575503
		print "gsub(constant): ok"
Packit 575503
	else
Packit 575503
		print "gsub(constant): fail"
Packit 575503
Packit 575503
	fbre = @/fo+ba+r/
Packit 575503
	target = "abc foobaar def foobar ghi"
Packit 575503
	count = gsub(fbre, "XX", target)
Packit 575503
	if (count == 2 && target == "abc XX def XX ghi")
Packit 575503
		print "gsub(variable): ok"
Packit 575503
	else
Packit 575503
		print "gsub(variable): fail"
Packit 575503
Packit 575503
	fun = "gsub"
Packit 575503
	$0 = "abc foobaar def foobar ghi"
Packit 575503
	count = @fun(@/fo+ba+r/, "XX")
Packit 575503
	if (count == 2 && $0 == "abc XX def XX ghi")
Packit 575503
		print "gsub(constant) indirect: ok"
Packit 575503
	else
Packit 575503
		print "gsub(constant) indirect: fail"
Packit 575503
Packit 575503
	$0 = "abc foobaar def foobar ghi"
Packit 575503
	count = @fun(fbre, "XX")
Packit 575503
	if (count == 2 && $0 == "abc XX def XX ghi")
Packit 575503
		print "gsub(variable) indirect: ok"
Packit 575503
	else
Packit 575503
		print "gsub(variable) indirect: fail"
Packit 575503
}
Packit 575503
Packit 575503
function gensub_tests(	fbre, result, target, fun)
Packit 575503
{
Packit 575503
	target = "abc foobaar def foobar ghi"
Packit 575503
	result = gensub(@/fo+ba+r/, "XX", "g", target)
Packit 575503
	if (result == "abc XX def XX ghi")
Packit 575503
		print "gensub(constant): ok"
Packit 575503
	else
Packit 575503
		print "gensub(constant): fail"
Packit 575503
Packit 575503
	fbre = @/fo+ba+r/
Packit 575503
	target = "abc foobaar def foobar ghi"
Packit 575503
	result = gensub(fbre, "XX", "g", target)
Packit 575503
	if (result == "abc XX def XX ghi")
Packit 575503
		print "gensub(variable): ok"
Packit 575503
	else
Packit 575503
		print "gensub(variable): fail"
Packit 575503
Packit 575503
	fun = "gensub"
Packit 575503
	$0 = "abc foobaar def foobar ghi"
Packit 575503
	result = @fun(@/fo+ba+r/, "XX", "g")
Packit 575503
	if (result == "abc XX def XX ghi")
Packit 575503
		print "gensub(constant) indirect: ok"
Packit 575503
	else
Packit 575503
		print "gensub(constant) indirect: fail"
Packit 575503
Packit 575503
	$0 = "abc foobaar def foobar ghi"
Packit 575503
	result = @fun(fbre, "XX", "g")
Packit 575503
	if (result == "abc XX def XX ghi")
Packit 575503
		print "gensub(variable) indirect: ok"
Packit 575503
	else
Packit 575503
		print "gensub(variable) indirect: fail"
Packit 575503
Packit 575503
	result = @fun(@/fo+ba+r/, "XX", "g", target)
Packit 575503
	if (result == "abc XX def XX ghi")
Packit 575503
		print "gensub(constant) indirect 2: ok"
Packit 575503
	else
Packit 575503
		print "gensub(constant) indirect 2: fail"
Packit 575503
Packit 575503
	result = @fun(fbre, "XX", "g", target)
Packit 575503
	if (result == "abc XX def XX ghi")
Packit 575503
		print "gensub(variable) indirect 2: ok"
Packit 575503
	else
Packit 575503
		print "gensub(variable) indirect 2: fail"
Packit 575503
}
Packit 575503
Packit 575503
function split_tests(	fbre, data, seps, fun, b1)
Packit 575503
{
Packit 575503
	delete data
Packit 575503
	delete seps
Packit 575503
	b1 = split("a:b:c:d", data, @/:/, seps)
Packit 575503
	if (b1 == 4 && data[1] == "a" && seps[1] == ":")
Packit 575503
		print "split(constant): ok"
Packit 575503
	else
Packit 575503
		print "split(constant): fail"
Packit 575503
Packit 575503
	delete data
Packit 575503
	delete seps
Packit 575503
	fbre = @/:/
Packit 575503
	b1 = split("a:b:c:d", data, fbre, seps)
Packit 575503
	if (b1 == 4 && data[1] == "a" && seps[1] == ":")
Packit 575503
		print "split(variable): ok"
Packit 575503
	else
Packit 575503
		print "split(variable): fail"
Packit 575503
Packit 575503
	fun = "split"
Packit 575503
	delete data
Packit 575503
	delete seps
Packit 575503
	b1 = @fun("a:b:c:d", data, @/:/, seps)
Packit 575503
	if (b1 == 4 && data[1] == "a" && seps[1] == ":")
Packit 575503
		print "split(constant) indirect: ok"
Packit 575503
	else
Packit 575503
		print "split(constant) indirect: fail"
Packit 575503
Packit 575503
	delete data
Packit 575503
	delete seps
Packit 575503
	b1 = @fun("a:b:c:d", data, fbre, seps)
Packit 575503
	if (b1 == 4 && data[1] == "a" && seps[1] == ":")
Packit 575503
		print "split(variable) indirect: ok"
Packit 575503
	else
Packit 575503
		print "split(variable) indirect: fail"
Packit 575503
}
Packit 575503
Packit 575503
function patsplit_tests(	fbre, data, seps, fun, b1)
Packit 575503
{
Packit 575503
	delete data
Packit 575503
	delete seps
Packit 575503
	b1 = patsplit("a:b:c:d", data, @/[a-z]+/, seps)
Packit 575503
	if (b1 == 4 && data[1] == "a" && seps[1] == ":")
Packit 575503
		print "patsplit(constant): ok"
Packit 575503
	else
Packit 575503
		print "patsplit(constant): fail"
Packit 575503
Packit 575503
	delete data
Packit 575503
	delete seps
Packit 575503
	fbre = @/[a-z]+/
Packit 575503
	b1 = patsplit("a:b:c:d", data, fbre, seps)
Packit 575503
	if (b1 == 4 && data[1] == "a" && seps[1] == ":")
Packit 575503
		print "patsplit(variable): ok"
Packit 575503
	else
Packit 575503
		print "patsplit(variable): fail"
Packit 575503
Packit 575503
	fun = "patsplit"
Packit 575503
	delete data
Packit 575503
	delete seps
Packit 575503
	b1 = @fun("a:b:c:d", data, @/[a-z]+/, seps)
Packit 575503
	if (b1 == 4 && data[1] == "a" && seps[1] == ":")
Packit 575503
		print "patsplit(constant) indirect: ok"
Packit 575503
	else
Packit 575503
		print "patsplit(constant) indirect: fail"
Packit 575503
Packit 575503
	delete data
Packit 575503
	delete seps
Packit 575503
	b1 = @fun("a:b:c:d", data, fbre, seps)
Packit 575503
	if (b1 == 4 && data[1] == "a" && seps[1] == ":")
Packit 575503
		print "patsplit(variable) indirect: ok"
Packit 575503
	else
Packit 575503
		print "patsplit(variable) indirect: fail"
Packit 575503
}
Packit 575503
Packit 575503
BEGIN {
Packit 575503
	simple_tests()
Packit 575503
	match_tests()
Packit 575503
	sub_tests()
Packit 575503
	gsub_tests()
Packit 575503
	gensub_tests()
Packit 575503
	split_tests()
Packit 575503
	patsplit_tests()
Packit 575503
}