--- /dev/null
+#! /usr/bin/perl
+#
+# Generate a random test file for symbol table testing.
+#
+# Syntax reference:
+#
+# set k v -- assign (textual) key k the (integer) value i
+# get k -- display value at key k
+# del k -- remove key k
+# count -- show number of items
+# show -- dump out the entire table, in alphabetical key order
+
+sub random ($) {
+ my $lim = shift;
+ return int(rand($lim));
+}
+
+$words = "/usr/dict/words";
+-r $words or $words = "/usr/share/dict/words";
+open(DICT, $words) or die("open($words): $!");
+@w = grep /./, <DICT>;
+chomp(@w);
+close(DICT);
+
+%a = ();
+
+$lines = shift || 100;
+$serial = 1;
+while ($lines) {
+ $what = random(4);
+ if ($what == 0) {
+ my $k = $w[random(@w)];
+ my $i = $serial++;
+ print "set $k $i\n";
+ $a{$k} = $i;
+ } elsif ($what == 1) {
+ my $k = $w[random(@w)];
+ if (!exists($a{$w}) && random(8) != 0) { next; }
+ print "get $k\n";
+ } elsif ($what == 2) {
+ my $k = $w[random(@w)];
+ if (!exists($a{$w}) && random(8) != 0) { next; }
+ print "del $k\n";
+ delete($w{$k});
+ } elsif (random(5) == 0) {
+ print "count\n";
+ } else { next; }
+ $lines--;
+}
+
+print "show\n";