diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/fpat1.awk | 11 | ||||
-rw-r--r-- | test/fpat1.in | 2 | ||||
-rw-r--r-- | test/fpat1.ok | 16 | ||||
-rw-r--r-- | test/indirectcall.awk | 130 | ||||
-rw-r--r-- | test/indirectcall.in | 3 | ||||
-rw-r--r-- | test/indirectcall.ok | 18 | ||||
-rw-r--r-- | test/patsplit.awk | 26 | ||||
-rw-r--r-- | test/patsplit.ok | 56 | ||||
-rw-r--r-- | test/splitarg4.awk | 138 | ||||
-rw-r--r-- | test/splitarg4.in | 11 | ||||
-rw-r--r-- | test/splitarg4.ok | 92 |
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"} +{} +{} +{} +{} |