develooper Front page | | Postings from July 2016

Re: Test2::Tools::Compare is vs. like

Thread Previous | Thread Next
Chad Granum
July 27, 2016 15:13
Re: Test2::Tools::Compare is vs. like
Message ID:
I thought I had documented the differences pretty well. If you look here and read
both the 'is()' and 'like()' sections it makes it clear.


> his is the strict checker. The strict checker requires a perfect match
> between $got and $expect. All hash fields must be specified, all array
> items must be present, etc. All non-scalar/hash/array/regex references must
> be identical (same memory address). Scalar, hash and array references will
> be traversed and compared. Regex references will be compared to see if they
> have the same pattern.


> This is the relaxed checker. This will ignore hash keys or array indexes
> that you do not actually specify in your $expect structure. In addition
> regex and sub references will be used as validators. If you provide a regex
> using qr/.../, the regex itself will be used to validate the corresponding
> value in the $got structure. The same is true for coderefs, the value is
> passed in as the first argument (and in $_) and the sub should return a
> boolean value. In this tool regexes will stringify the thing they are
> checking.

Specifically "This will ignore hash keys or array indexes that you do not
actually specify in your $expect structure." directly documents the

That said I have no opposition to making the docs more clear, and am open
to suggestions on how to reword or reorganize it.


On Wed, Jul 27, 2016 at 8:03 AM, Andy Lester <> wrote:

> I was going to mail this to Chad directly, but I think it’s worth airing
> publicly.
> As a newcomer to Test2, it was never clear to me until just now when to
> use is() or like() for deep structures.  Given this code:
>     my $errors = do_something();
>     is( @{$errors}, 0. ‘No errors back from do_something()’ ); # old way
> And the new way to check would be:
>     is( $errors, [], ‘No errors back from do_something()’ );
> It would be very easy to use this instead:
>     like( $errors, [], ‘No errors back from do_something()’ );
> And it looks like like() works just fine, but really it will pass even if
> $errors has something in it.
>     is( [], [] ); # Passes
>     like( [‘foo’], [] ); # passes but you wouldn’t expect it to.
> The docs say "This is the strict checker” and “This is the relaxed
> checker” for each of them, respectively, but I think it would be worth
> having something in the docs that explains the differences between the two.
> Anyone else have troubles with these two functions?  Or other gotchas
> where new features aren’t what people switching from Test::More might
> expect?
> Andy
> --
> Andy Lester =>

Thread Previous | Thread Next Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About