mje has asked for the wisdom of the Perl Monks concerning the following question:
I use Test::Deep quite a bit and like it but the following structure has defeated me as to coming up with a matching structure:
[ 11, 22, # optional [ [ 1 ], [ # -1 # only here if 2 above is there ] # ] ]
so I get:
[11,22,[[1],[-1]]]or
[11,[[1]]The closest I've got is:
use Test::More tests => 2; use Test::Deep; my $id_re = re('^\d+$'); my $vpt_re = re('^-?1$'); my $x = [ '11', '22', [ [ '-1', ], [ # '1', # only present if '22' above present ] # ] ]; my $y = [ '11', [ [ '-1', ], ] ]; my $comp = [ $id_re, $id_re, subbagof([$vpt_re], [$vpt_re]) ]; cmp_deeply($x, $comp, 'test1'); cmp_deeply($y, $comp, 'test2');
but it does not handle a) the optional $id_re at the top level and the subbagof allows none. I tried to put it all in a subbagof but the problem with subbags is it depends on what matches first.
Obviously I could test to see if it is an arrayref then use one of 2 patterns depending on whether the array contains 2 or 3 items but that seems like a cop out.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Problem defining a Test::Deep structure to match this arrayref
by JavaFan (Canon) on May 12, 2010 at 15:04 UTC | |
by mje (Curate) on May 12, 2010 at 15:19 UTC | |
|
Re: Problem defining a Test::Deep structure to match this arrayref
by pemungkah (Priest) on May 12, 2010 at 20:50 UTC |