Make tests public. Rewrite most tests. Add tests.
[pintos-anon] / src / tests / threads / alarm.pm
diff --git a/src/tests/threads/alarm.pm b/src/tests/threads/alarm.pm
new file mode 100644 (file)
index 0000000..84d6d12
--- /dev/null
@@ -0,0 +1,32 @@
+sub check_alarm {
+    my ($iterations) = @_;
+    our ($test);
+
+    @output = read_text_file ("$test.output");
+    common_checks (@output);
+
+    my (@products);
+    for (my ($i) = 0; $i < $iterations; $i++) {
+       for (my ($t) = 0; $t < 5; $t++) {
+           push (@products, ($i + 1) * ($t + 1) * 10);
+       }
+    }
+    @products = sort {$a <=> $b} @products;
+
+    local ($_);
+    foreach (@output) {
+       fail $_ if /out of order/i;
+
+       my ($p) = /product=(\d+)$/;
+       next if !defined $p;
+
+       my ($q) = shift (@products);
+       fail "Too many wakeups.\n" if !defined $q;
+       fail "Out of order wakeups ($p vs. $q).\n" if $p != $q; # FIXME
+    }
+    fail scalar (@products) . " fewer wakeups than expected.\n"
+      if @products != 0;
+    pass;
+}
+
+1;