chiark / gitweb /
Basic arena management.
[mLib] / da-ref
1 #! /usr/bin/perl
2 #
3 # Reference implementation for dynamic array testing.
4
5 @a = ();
6 while (<>) {
7   chomp();
8   # print "$_\n";
9   @F = split();
10   if ($F[0] eq "push") {
11     push(@a, $F[1]);
12   } elsif ($F[0] eq "unshift") {
13     unshift(@a, $F[1]);
14   } elsif ($F[0] eq "pop") {
15     if (@a == 0) {
16       print "*UFLOW*\n";
17     } else {
18       my $n = int(pop(@a));
19       print "$n\n";
20     }
21   } elsif ($F[0] eq "shift") {
22     if (@a == 0) {
23       print "*UFLOW*\n";
24     } else {
25       my $n = int(shift(@a));
26       print "$n\n";
27     }
28   } elsif ($F[0] eq "insert") {
29     shift(@F);
30     unshift(@a, @F);
31   } elsif ($F[0] eq "append") {
32     shift(@F);
33     push(@a, @F);
34   } elsif ($F[0] eq "delete") {
35     if ($F[1] > @a) {
36       # @a = ();
37       print "*UFLOW*\n";
38     } else {
39       splice(@a, 0, $F[1]);
40     }
41   } elsif ($F[0] eq "reduce") {
42     if ($F[1] > @a) {
43       # @a = ();
44       print "*UFLOW*\n";
45     } else {
46       $#a -= $F[1];
47     }
48   } elsif ($F[0] eq "set") {
49     if ($F[1] > @a) {
50       for (my $i = @a; $i < $F[1]; $i++) { $a[$i] = -1; }
51     }
52     $a[$F[1]] = int($F[2]);
53   } elsif ($F[0] eq "get") {
54     if ($F[1] >= @a) {
55       print "*RANGE*\n";
56     } else {
57       print int($a[$F[1]]), "\n";
58     }
59   } elsif ($F[0] eq "show") {
60     if (@a) {
61       print join(" ", map int, @a), "\n";
62     } else {
63       print "*EMPTY*\n";
64     }
65   } else {
66     print "*BAD*\n";
67   }
68 }