+++ /dev/null
-#! /usr/bin/awk -f
-#
-# $Id: mpx-gen,v 1.2 1999/12/10 23:26:51 mdw Exp $
-#
-# Generate test vectors for MPX testing
-
-# --- Generate an `l'-byte hex number ---
-
-function r(l, i, s, x)
-{
- if (!l) l = len;
- s = "";
- for (i = 0; i < l; i++) {
- x = int(rand() * 256);
- s = s sprintf("%02X", x);
- }
- return (s);
-}
-
-# --- Main code ---
-
-BEGIN {
-
- # --- Initialization ---
-
- i = 1;
- if (i in ARGV) len = ARGV[i++]; else len = 32;
- if (i in ARGV) op = ARGV[i++]; else op = "+";
- if (i in ARGV) rep = ARGV[i++]; else rep = 1;
-
- # --- Output filters ---
- #
- # This is complicated. `bc' emits numbers split over multiple lines with
- # backslashes. It also doesn't pad to an even number of digits, which the
- # test rig is expecting, or use lower-case, which looks nicer.
- #
- # The first bit matches a line ending with a backslash. If it finds one,
- # it appends the next line, removes the backslash/newline pair, and loops
- # around to the top.
- #
- # The next substitution translates the whole kaboodle into lower-case.
- #
- # The next one looks for an off number of hex digits and prepends a zero if
- # it finds one.
- #
- # The one after that just indents by two spaces. The final one sticks a
- # semicolon on the end.
-
- bc = "bc | sed '\
-:top\n\
-/\\\\$/ {\n\
- N\n\
- s/\\\\\\\n\
-//;\n\
- b top;\n\
-}\n\
-y/ABCDEF/abcdef/\n\
-s/^[0-9a-f]\\([0-9a-f][0-9a-f]\\)*$/0&/\n\
-s/^/ /\n\
-$ s/$/;/'";
- out = "sed 'y/ABCDEF/abcdef/; s/^/ /'"
-
- # --- Main code ---
-
- srand();
-
- while (rep--) {
- x = r();
-
- print "obase = 16" | bc;
- print "ibase = 16" | bc;
-
- # --- Shifting operations ---
-
- if (op == "<<" || op == ">>") {
- y = int(rand() * len * 4) + int(rand() * len * 4);
- rop = (op == "<<" ? "*" : "/");
- z = sprintf("%X", y);
- print x, y | out;
- print x, rop, "(2 ^ " z ")" | bc;
- }
-
- # --- Division ---
-
- else if (op == "/") {
- ylen = int(rand() * len) + 1;
- y = r(ylen);
- print x | out;
- print y | out;
- print x, "/", y | bc;
- print x, "%", y | bc;
- }
-
- # --- Squaring ---
-
- else if (op == "2") {
- print x | out;
- print x, "*", x | bc;
- }
-
- # --- Other operations ---
-
- else {
- y = r();
- if (op == "-" && x < y) {
- t = x; x = y; y = t;
- }
- print x | out;
- print y | out;
- print x, op, y | bc;
- }
-
- close(out);
- close(bc);
- if (rep)
- print;
- }
-
- exit 0;
-}