]> git.vpit.fr Git - perl/modules/autovivification.git/commitdiff
Only generate the non-ref test once
authorVincent Pit <vince@profvince.com>
Fri, 19 Jun 2009 15:59:20 +0000 (17:59 +0200)
committerVincent Pit <vince@profvince.com>
Fri, 19 Jun 2009 16:03:12 +0000 (18:03 +0200)
t/lib/autovivification/TestCases.pm

index 87dfd0965fc81da8b35b0f0b6a5f65823b64af5f..19ce7eadaf0e914de688d6eb86f09891b5d621b5 100644 (file)
@@ -60,38 +60,35 @@ sub testcase_ok {
   $opts = 'default';
   $use  = '';
  }
- my @testcases = (
+ my @base = ([ $var, $init, $code, $exp, $use ]);
+ if ($var =~ /\$/) {
+  my @nonref = @{$base[0]};
+  $nonref[0] =~ s/^\$/$sigil/;
+  for ($nonref[1], $nonref[2]) {
+   s/\Q$sigil$var\E/$nonref[0]/g;
+   s/\Q$var\E\->/$var/g;
+  }
+  my $simple      = $nonref[2] !~ /->/;
+  my $plain_deref = $nonref[2] =~ /\Q$nonref[0]\E/;
+  my $empty  = { '@' => '[ ]', '%' => '{ }' }->{$sigil};
+  if (($simple
+       and (   $nonref[3] =~ m!qr/\^Reference vivification forbidden.*?/!
+            or $nonref[3] =~ m!qr/\^Can't vivify reference.*?/!))
+  or ($plain_deref
+       and $nonref[3] =~ m!qr/\^Can't use an undefined value as a.*?/!)) {
+   $nonref[1] = '';
+   $nonref[2] = 1;
+   $nonref[3] = "'', 1, $empty";
+  }
+  $nonref[3] =~ s/,\s*undef\s*$/, $empty/;
+  push @base, \@nonref;
+ }
+ my @testcases = map {
+  my ($var, $init, $code, $exp, $use) = @$_;
   [ $var, $init,               $code, $exp, $use, $opts, 0 ],
   [ $var, "use strict; $init", $code, $exp, $use, $opts, 1 ],
   [ $var, "no strict;  $init", $code, $exp, $use, $opts, 1 ],
- );
- my @extra;
- for (@testcases) {
-  my $var = $_->[0];
-  if ($var =~ /\$/) {
-   my @new = @$_;
-   $new[0] =~ s/^\$/$sigil/;
-   for ($new[1], $new[2]) {
-    s/\Q$sigil$var\E/$new[0]/g;
-    s/\Q$var\E\->/$var/g;
-   }
-   my $simple      = $new[2] !~ /->/;
-   my $plain_deref = $new[2] =~ /\Q$new[0]\E/;
-   my $empty  = { '@' => '[ ]', '%' => '{ }' }->{$sigil};
-   if (($simple
-        and (   $new[3] =~ m!qr/\^Reference vivification forbidden.*?/!
-             or $new[3] =~ m!qr/\^Can't vivify reference.*?/!))
-    or ($plain_deref
-        and $new[3] =~ m!qr/\^Can't use an undefined value as a.*?/!)) {
-    $new[1] = '';
-    $new[2] = 1;
-    $new[3] = "'', 1, $empty";
-   }
-   $new[3] =~ s/,\s*undef\s*$/, $empty/;
-   push @extra, \@new;
-  }
- }
- push @testcases, @extra;
+ } @base;
  for (@testcases) {
   my ($testcase, $desc) = generate(@$_);
   my @N = (0 .. 9);