I'll chime in, as I'm the one who initially raised the idea : )

I'll start with a use-case: my initial motivation for having is_deeply
handle coderefs came up while building certain unit tests for a
rewrite of DBD::Mock. Several of the worker functions return complex
data structures -- which may contain coderefs -- and I'd like to
simply hand the whole lot off to is_deeply and have the work done for
me.

My inital strategy for implementing this was a two-tiered approach.
First, compare the references; if they're the same, return true, go no
futher. If they differ, however, say if anonymous subs were thrown
into the mix, then use B::Deparse to decompile both subs, comparing
their textual representations.

My initial quick-glance at B::Deparse's documentation mentions
something about perl optimising certain constants away, which could
well throw a spanner into the works. Storable uses B::Deparse when
serialising coderefs, though, so I'm certain there's a way around
this.

Collin Winter

On 6/25/05, Michael G Schwern <[EMAIL PROTECTED]> wrote:
> Currently, throwing is_deeply() a code ref causes it to barf.
> 
> perl -MTest::More -wle 'print is_deeply sub {}, sub {}'
> WHOA!  No type in _deep_check
> This should never happen!  Please contact the author immediately!
> # Looks like your test died before it could output anything.
> 
> 
> is_deeply() doesn't know what to do with code refs.  What should it do?
> 
> What it *shouldn't* do is what Test.pm does, namely execute the code ref and
> compare the values returned.  It would just compare the refernces.
> 
> This much is obvious, this should pass:
> 
>         is_deeply \&foo, \&foo;
> 
> The same code ref is being compared.  But here's the tricky part.
> 
>         is_deeply sub { 42 }, sub { 42 };
> 
> Does that pass?  ie. Are we just comparing the reference value or should
> is_deeply() decompile the subroutine and see if they contain the same code?
> (Technical considerations aside, for the moment).
> 
> Given that is_deeply() considers these to be equivalent:
> 
>         is_deeply [ 42 ], [ 42 ];
> 
> I think comparing the decompiled source code is consistent, but is it
> useful?  Anyone have use cases for this?
> 
> 
> --
> Michael G Schwern     [EMAIL PROTECTED]     http://www.pobox.com/~schwern
> Don't try the paranormal until you know what's normal.
>         -- "Lords and Ladies" by Terry Prachett
>

Reply via email to