Random generator for MP testcases.
authormdw <mdw>
Sat, 13 Nov 1999 01:53:08 +0000 (01:53 +0000)
committermdw <mdw>
Sat, 13 Nov 1999 01:53:08 +0000 (01:53 +0000)
tests/mpx-gen.pl [new file with mode: 0755]

diff --git a/tests/mpx-gen.pl b/tests/mpx-gen.pl
new file mode 100755 (executable)
index 0000000..6e53730
--- /dev/null
@@ -0,0 +1,40 @@
+#! /usr/bin/perl
+
+$len = shift || 32;
+$op = shift || "+";
+
+sub r {
+  my $l = shift || $len;
+  my $i;
+  my $s;
+  for ($i = 0; $i < $l; $i++) {
+    my $x = rand(256);
+    $s .= sprintf("%02x", $x);
+  }
+  return $s;
+}
+
+$| = 1;
+open(BC, "|bc | tr A-Z a-z") or die;
+print BC "obase=16\nibase=16\n";
+$x = r();
+if ($op eq "<<" || $op eq ">>") {
+  $y = int(rand($len * 4)) + int(rand($len * 4));
+  $op = ($op eq "<<" ? "*" : "/");
+  $z = sprintf("%x", $y);
+  print "$x $y\n";
+  print BC "\U$x $op (2^$z)\n";
+} elsif ($op eq "/") {
+  $ylen = int(rand($len)) + 1;
+  $y = r($ylen);
+  print "$x\n$y\n";
+  print BC "\U$x / $y\n$x % $y\n";
+} elsif ($op eq "2") {
+  print "$x\n";
+  print BC "\U$x * $x\n";
+} else {
+  $y = r();
+  print "$x\n$y\n";
+  print BC "\U$x $op $y\n";
+}
+close(BC);