aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/fpat1.awk11
-rw-r--r--test/fpat1.in2
-rw-r--r--test/fpat1.ok16
-rw-r--r--test/indirectcall.awk130
-rw-r--r--test/indirectcall.in3
-rw-r--r--test/indirectcall.ok18
-rw-r--r--test/patsplit.awk26
-rw-r--r--test/patsplit.ok56
-rw-r--r--test/splitarg4.awk138
-rw-r--r--test/splitarg4.in11
-rw-r--r--test/splitarg4.ok92
11 files changed, 503 insertions, 0 deletions
diff --git a/test/fpat1.awk b/test/fpat1.awk
new file mode 100644
index 00000000..b091625a
--- /dev/null
+++ b/test/fpat1.awk
@@ -0,0 +1,11 @@
+BEGIN {
+# if (t == 0)
+# FPAT = "([^,]+)|(\"[^\"]+\")"
+# else
+ FPAT = "([^,]*)|(\"[^\"]+\")"
+}
+{
+ print "NF =", NF
+ for (i = 1; i <= NF; i++)
+ printf("$%d = <%s>\n", i, $i)
+}
diff --git a/test/fpat1.in b/test/fpat1.in
new file mode 100644
index 00000000..03f2a3f3
--- /dev/null
+++ b/test/fpat1.in
@@ -0,0 +1,2 @@
+Robbins,Arnold,"1234 A Pretty Place, NE",Sometown,NY,12345-6789,USA
+Smith,,"1234 A Pretty Place, NE",Sometown,NY,12345-6789,USA
diff --git a/test/fpat1.ok b/test/fpat1.ok
new file mode 100644
index 00000000..e478aa53
--- /dev/null
+++ b/test/fpat1.ok
@@ -0,0 +1,16 @@
+NF = 7
+$1 = <Robbins>
+$2 = <Arnold>
+$3 = <"1234 A Pretty Place, NE">
+$4 = <Sometown>
+$5 = <NY>
+$6 = <12345-6789>
+$7 = <USA>
+NF = 7
+$1 = <Smith>
+$2 = <>
+$3 = <"1234 A Pretty Place, NE">
+$4 = <Sometown>
+$5 = <NY>
+$6 = <12345-6789>
+$7 = <USA>
diff --git a/test/indirectcall.awk b/test/indirectcall.awk
new file mode 100644
index 00000000..5cfdd235
--- /dev/null
+++ b/test/indirectcall.awk
@@ -0,0 +1,130 @@
+# funcptrdemo.awk --- Demonstrate function pointers
+#
+# Arnold Robbins, arnold@skeeve.com, Public Domain
+# January 2009
+
+# average --- return the average of the values in fields $first - $last
+
+function average(first, last, sum, i)
+{
+ sum = 0;
+ for (i = first; i <= last; i++)
+ sum += $i
+
+ return sum / (last - first + 1)
+}
+
+# sum --- return the average of the values in fields $first - $last
+
+function sum(first, last, ret, i)
+{
+ ret = 0;
+ for (i = first; i <= last; i++)
+ ret += $i
+
+ return ret
+}
+
+# For each record, print the class name and the requested statistics
+
+{
+ class_name = $1
+ gsub(/_/, " ", class_name) # Replace _ with spaces
+
+ # find start
+ for (i = 1; i <= NF; i++) {
+ if ($i == "data:") {
+ start = i + 1
+ break
+ }
+ }
+
+ printf("%s:\n", class_name)
+ for (i = 2; $i != "data:"; i++) {
+ the_function = $i
+ printf("\t%s: <%s>\n", $i, @the_function(start, NF) "")
+ }
+ print ""
+}
+
+# do_sort --- sort the data in ascending order and print it
+
+function do_sort(first, last, compare, data, i, retval)
+{
+ delete data
+ for (i = 1; first <= last; first++) {
+ data[i] = $first
+ i++
+ }
+
+ quicksort(data, 1, i-1, compare)
+
+ retval = data[1]
+ for (i = 2; i in data; i++)
+ retval = retval " " data[i]
+
+ return retval
+}
+
+# sort --- sort the data in ascending order and print it
+
+function sort(first, last)
+{
+ return do_sort(first, last, "num_lt")
+}
+
+# rsort --- sort the data in descending order and print it
+
+function rsort(first, last)
+{
+ return do_sort(first, last, "num_ge")
+}
+
+# num_lt --- do a numeric less than comparison
+
+function num_lt(left, right)
+{
+ return ((left + 0) < (right + 0))
+}
+
+# num_ge --- do a numeric greater than or equal to comparison
+
+function num_ge(left, right)
+{
+ return ((left + 0) >= (right + 0))
+}
+
+# quicksort.awk --- Quicksort algorithm, with user-supplied
+# comparison function
+#
+# Arnold Robbins, arnold@skeeve.com, Public Domain
+# January 2009
+
+# quicksort --- C.A.R. Hoare's quick sort algorithm. See Wikipedia
+# or almost any algorithms or computer science text
+#
+# Adapted from K&R-II, page 110
+
+function quicksort(data, left, right, less_than, i, last)
+{
+ if (left >= right) # do nothing if array contains fewer
+ return # than two elements
+
+ quicksort_swap(data, left, int((left + right) / 2))
+ last = left
+ for (i = left + 1; i <= right; i++)
+ if (@less_than(data[i], data[left]))
+ quicksort_swap(data, ++last, i)
+ quicksort_swap(data, left, last)
+ quicksort(data, left, last - 1, less_than)
+ quicksort(data, last + 1, right, less_than)
+}
+
+# quicksort_swap --- helper function for quicksort, should really be inline
+
+function quicksort_swap(data, i, j, temp)
+{
+ temp = data[i]
+ data[i] = data[j]
+ data[j] = temp
+}
diff --git a/test/indirectcall.in b/test/indirectcall.in
new file mode 100644
index 00000000..f5de0e29
--- /dev/null
+++ b/test/indirectcall.in
@@ -0,0 +1,3 @@
+Biology_101 sum average sort rsort data: 87.0 92.4 78.5 94.9
+Chemistry_305 sum average sort rsort data: 75.2 98.3 94.7 88.2
+English_401 sum average sort rsort data: 100.0 95.6 87.1 93.4
diff --git a/test/indirectcall.ok b/test/indirectcall.ok
new file mode 100644
index 00000000..d3f281ca
--- /dev/null
+++ b/test/indirectcall.ok
@@ -0,0 +1,18 @@
+Biology 101:
+ sum: <352.8>
+ average: <88.2>
+ sort: <78.5 87.0 92.4 94.9>
+ rsort: <94.9 92.4 87.0 78.5>
+
+Chemistry 305:
+ sum: <356.4>
+ average: <89.1>
+ sort: <75.2 88.2 94.7 98.3>
+ rsort: <98.3 94.7 88.2 75.2>
+
+English 401:
+ sum: <376.1>
+ average: <94.025>
+ sort: <87.1 93.4 95.6 100.0>
+ rsort: <100.0 95.6 93.4 87.1>
+
diff --git a/test/patsplit.awk b/test/patsplit.awk
new file mode 100644
index 00000000..af2813aa
--- /dev/null
+++ b/test/patsplit.awk
@@ -0,0 +1,26 @@
+BEGIN {
+ FALSE = 0
+ TRUE = 1
+
+ fpat[1] = "([^,]*)|(\"[^\"]+\")"
+ fpat[2] = fpat[1]
+ fpat[3] = fpat[1]
+ fpat[4] = "aa+"
+ fpat[5] = fpat[4]
+
+ data[1] = "Robbins,,Arnold,"
+ data[2] = "Smith,,\"1234 A Pretty Place, NE\",Sometown,NY,12345-6789,USA"
+ data[3] = "Robbins,Arnold,\"1234 A Pretty Place, NE\",Sometown,NY,12345-6789,USA"
+ data[4] = "bbbaaacccdddaaaaaqqqq"
+ data[5] = "bbbaaacccdddaaaaaqqqqa" # should get trailing qqqa
+
+ for (j = 1; j in data; j++) {
+ printf("Splitting: <%s>\n", data[j])
+ n = patsplit(data[j], fields, fpat[j], seps)
+ print "n =", n
+ for (i = 1; i <= n; i++)
+ printf("fields[%d] = <%s>\n", i, fields[i])
+ for (i = 0; i in seps; i++)
+ printf("seps[%s] = <%s>\n", i, seps[i])
+ }
+}
diff --git a/test/patsplit.ok b/test/patsplit.ok
new file mode 100644
index 00000000..cda8319e
--- /dev/null
+++ b/test/patsplit.ok
@@ -0,0 +1,56 @@
+Splitting: <Robbins,,Arnold,>
+n = 4
+fields[1] = <Robbins>
+fields[2] = <>
+fields[3] = <Arnold>
+fields[4] = <>
+seps[0] = <>
+seps[1] = <,>
+seps[2] = <,>
+seps[3] = <,>
+Splitting: <Smith,,"1234 A Pretty Place, NE",Sometown,NY,12345-6789,USA>
+n = 7
+fields[1] = <Smith>
+fields[2] = <>
+fields[3] = <"1234 A Pretty Place, NE">
+fields[4] = <Sometown>
+fields[5] = <NY>
+fields[6] = <12345-6789>
+fields[7] = <USA>
+seps[0] = <>
+seps[1] = <,>
+seps[2] = <,>
+seps[3] = <,>
+seps[4] = <,>
+seps[5] = <,>
+seps[6] = <,>
+Splitting: <Robbins,Arnold,"1234 A Pretty Place, NE",Sometown,NY,12345-6789,USA>
+n = 7
+fields[1] = <Robbins>
+fields[2] = <Arnold>
+fields[3] = <"1234 A Pretty Place, NE">
+fields[4] = <Sometown>
+fields[5] = <NY>
+fields[6] = <12345-6789>
+fields[7] = <USA>
+seps[0] = <>
+seps[1] = <,>
+seps[2] = <,>
+seps[3] = <,>
+seps[4] = <,>
+seps[5] = <,>
+seps[6] = <,>
+Splitting: <bbbaaacccdddaaaaaqqqq>
+n = 2
+fields[1] = <aaa>
+fields[2] = <aaaaa>
+seps[0] = <bbb>
+seps[1] = <cccddd>
+seps[2] = <qqqq>
+Splitting: <bbbaaacccdddaaaaaqqqqa>
+n = 2
+fields[1] = <aaa>
+fields[2] = <aaaaa>
+seps[0] = <bbb>
+seps[1] = <cccddd>
+seps[2] = <qqqqa>
diff --git a/test/splitarg4.awk b/test/splitarg4.awk
new file mode 100644
index 00000000..4187460b
--- /dev/null
+++ b/test/splitarg4.awk
@@ -0,0 +1,138 @@
+BEGIN {
+ split("c: ::ab+", fs_arr, ":")
+}
+{
+ for (i = 1; i in fs_arr; ++i) {
+ split($0, a, fs_arr[i], seps)
+ print zipcat(a, seps)
+ dump_array(seps)
+ }
+}
+END {
+ seps[1] = "123"; seps[5] = 10
+ for (i = 1; i in fs_arr; ++i) {
+ split("", a, fs_arr[i], seps)
+ dump_array(seps)
+ }
+}
+function dump_array(a, i, mini, maxi)
+{
+ mini = minidx(a) + 0
+ maxi = maxidx(a) + 0
+ printf "{"
+ for (i = mini; i <= maxi; ++i)
+ if (i in a) {
+ if (i > mini)
+ printf ", "
+ printf "%d => \"%s\"", i, a[i]
+ }
+ printf "}\n"
+}
+function zipcat(a, b, c)
+{
+ zip(a, b, c)
+ return cat(c)
+}
+
+function cat(a, mini, maxi, i, s)
+{
+ mini = minidx(a) + 0
+ maxi = maxidx(a) + 0
+ for (i = mini; i <= maxi; ++i)
+ if (i in a)
+ s = s a[i]
+ return s
+}
+
+function zip(a, b, c, mini, maxi, i)
+{
+ del(c)
+ mini = minidx2(a, b) + 0
+ maxi = maxidx2(a, b) + 0
+ for (i = mini; i <= maxi; ++i) {
+ if (i in a)
+ c[i] = a[i]
+ if (i in b)
+ c[i] = c[i] b[i]
+ }
+}
+
+function maxidx2(a, b)
+{
+ if (emptyarr(a))
+ return maxidx(b)
+ else if (emptyarr(b))
+ return maxidx(a)
+ else
+ return max(maxidx(a), maxidx(b))
+}
+
+function minidx2(a, b)
+{
+ if (emptyarr(a))
+ return minidx(b)
+ else if (emptyarr(b))
+ return minidx(a)
+ else
+ return min(minidx(a), minidx(b))
+}
+
+function maxidx(a, i, m)
+{
+ if (emptyarr(a))
+ m = ""
+ else {
+ m = choose(a) + 0
+ for (i in a) {
+ i += 0
+ if (i > m)
+ m = i
+ }
+ }
+ return m
+}
+
+function minidx(a, i, m)
+{
+ if (emptyarr(a))
+ m = ""
+ else {
+ m = choose(a) + 0
+ for (i in a) {
+ i += 0
+ if (i < m)
+ m = i
+ }
+ }
+ return m
+}
+
+function choose(a, m)
+{
+ for (m in a)
+ return m
+ return ""
+}
+
+function emptyarr(a, k)
+{
+ for (k in a)
+ return 0
+ return 1
+}
+
+# portable delete
+function del(a)
+{
+ split("", a)
+}
+
+function max(x, y)
+{
+ return x > y ? x : y
+}
+
+function min(x, y)
+{
+ return x < y ? x : y
+}
diff --git a/test/splitarg4.in b/test/splitarg4.in
new file mode 100644
index 00000000..3033acd7
--- /dev/null
+++ b/test/splitarg4.in
@@ -0,0 +1,11 @@
+caccbdc
+acbcd
+
+ a b def
+a b dwf
+ a b dwf
+a b dwf
+abc
+a
+aabaabbabbbaabbb
+ab
diff --git a/test/splitarg4.ok b/test/splitarg4.ok
new file mode 100644
index 00000000..761f284e
--- /dev/null
+++ b/test/splitarg4.ok
@@ -0,0 +1,92 @@
+caccbdc
+{1 => "c", 2 => "c", 3 => "c", 4 => "c"}
+caccbdc
+{}
+caccbdc
+{1 => "", 2 => "", 3 => "", 4 => "", 5 => "", 6 => ""}
+caccbdc
+{}
+acbcd
+{1 => "c", 2 => "c"}
+acbcd
+{}
+acbcd
+{1 => "", 2 => "", 3 => "", 4 => ""}
+acbcd
+{}
+
+{}
+
+{}
+
+{}
+
+{}
+ a b def
+{}
+ a b def
+{0 => " ", 1 => " ", 2 => " ", 3 => " "}
+ a b def
+{1 => "", 2 => "", 3 => "", 4 => "", 5 => "", 6 => "", 7 => "", 8 => "", 9 => ""}
+ a b def
+{}
+a b dwf
+{}
+a b dwf
+{1 => " ", 2 => " "}
+a b dwf
+{1 => "", 2 => "", 3 => "", 4 => "", 5 => "", 6 => ""}
+a b dwf
+{}
+ a b dwf
+{}
+ a b dwf
+{0 => " ", 1 => " ", 2 => " "}
+ a b dwf
+{1 => "", 2 => "", 3 => "", 4 => "", 5 => "", 6 => "", 7 => ""}
+ a b dwf
+{}
+a b dwf
+{}
+a b dwf
+{1 => " ", 2 => " "}
+a b dwf
+{1 => "", 2 => "", 3 => "", 4 => "", 5 => "", 6 => ""}
+a b dwf
+{}
+abc
+{1 => "c"}
+abc
+{}
+abc
+{1 => "", 2 => ""}
+abc
+{1 => "ab"}
+a
+{}
+a
+{}
+a
+{}
+a
+{}
+aabaabbabbbaabbb
+{}
+aabaabbabbbaabbb
+{}
+aabaabbabbbaabbb
+{1 => "", 2 => "", 3 => "", 4 => "", 5 => "", 6 => "", 7 => "", 8 => "", 9 => "", 10 => "", 11 => "", 12 => "", 13 => "", 14 => "", 15 => ""}
+aabaabbabbbaabbb
+{1 => "ab", 2 => "abb", 3 => "abbb", 4 => "abbb"}
+ab
+{}
+ab
+{}
+ab
+{1 => ""}
+ab
+{1 => "ab"}
+{}
+{}
+{}
+{}