#! /usr/bin/awk -f # # $Id: mpx-gen,v 1.1 1999/11/14 13:53:44 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 --- bc = "bc | sed 'y/ABCDEF/abcdef/; \ s/^[0-9a-f]\\([0-9a-f][0-9a-f]\\)*$/0&/; \ s/^/ /; \ $ 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; }