--- /dev/null
+#! /usr/bin/perl
+#
+# Reference implementation for dynamic array testing.
+
+@a = ();
+while (<>) {
+ chomp();
+ # print "$_\n";
+ @F = split();
+ if ($F[0] eq "push") {
+ push(@a, $F[1]);
+ } elsif ($F[0] eq "unshift") {
+ unshift(@a, $F[1]);
+ } elsif ($F[0] eq "pop") {
+ if (@a == 0) {
+ print "*UFLOW*\n";
+ } else {
+ my $n = int(pop(@a));
+ print "$n\n";
+ }
+ } elsif ($F[0] eq "shift") {
+ if (@a == 0) {
+ print "*UFLOW*\n";
+ } else {
+ my $n = int(shift(@a));
+ print "$n\n";
+ }
+ } elsif ($F[0] eq "insert") {
+ shift(@F);
+ unshift(@a, @F);
+ } elsif ($F[0] eq "append") {
+ shift(@F);
+ push(@a, @F);
+ } elsif ($F[0] eq "delete") {
+ if ($F[1] > @a) {
+ # @a = ();
+ print "*UFLOW*\n";
+ } else {
+ splice(@a, 0, $F[1]);
+ }
+ } elsif ($F[0] eq "reduce") {
+ if ($F[1] > @a) {
+ # @a = ();
+ print "*UFLOW*\n";
+ } else {
+ $#a -= $F[1];
+ }
+ } elsif ($F[0] eq "set") {
+ if ($F[1] > @a) {
+ for (my $i = @a; $i < $F[1]; $i++) { $a[$i] = -1; }
+ }
+ $a[$F[1]] = int($F[2]);
+ } elsif ($F[0] eq "get") {
+ if ($F[1] >= @a) {
+ print "*RANGE*\n";
+ } else {
+ print int($a[$F[1]]), "\n";
+ }
+ } elsif ($F[0] eq "show") {
+ if (@a) {
+ print join(" ", map int, @a), "\n";
+ } else {
+ print "*EMPTY*\n";
+ }
+ } else {
+ print "*BAD*\n";
+ }
+}