Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

Re^5: Recursively traverse two data structures and test for match

by diotalevi (Canon)
on May 23, 2005 at 15:18 UTC ( #459586=note: print w/replies, xml ) Need Help??


in reply to Re^4: Recursively traverse two data structures and test for match
in thread Recursively traverse two data structures and test for match

Sometimes it should, especially when testing the overloaded objects. It is the lack of any is_deeply test which is able to see through overloading that lead me to do something hokey and do cmp_eq( Data::Dump::Streamer::Dump($a), 'eq', Data::Dump::Streamer::Dump($b) ) tests instead.

If an overloaded object wanted to pretend to be normal, it can use an utterly normal test and it'll get called as usual. Its the stuff like Test::More which should be able to have x-ray eyes to see through overloading.

  • Comment on Re^5: Recursively traverse two data structures and test for match

Replies are listed 'Best First'.
Re^6: Recursively traverse two data structures and test for match
by jdporter (Canon) on May 23, 2005 at 15:45 UTC
    But I don't think that's a problem. You're doing an "out of band" test, you should have to jump through hoops. Whereas if, in the course of an application, I want to know, "are these two widgets equal?" I should depend on any overloaded equality ops to do the right thing, not to second-guess what the right thing should be.
      My t/whatever.t script using Test::More hardly counts as "in the normal course of an application." This is an environment where you really do want such things to happen, if that's what you intend. Testing environments are abnormal environments and this is a case where it matters that its treated as such.

        So you don't expect anyone to ever test their modules against overloaded input? I disagree that comparisons should default to being x-ray comparisons just because they are part of a test module. I'm more likely to test that the output from two invocations produce the same apparent output than that they result in identical internal structures. The former is an important aspect of a module, while the latter shouldn't really matter.

        Update: In a private message, diotalevi notes that he meant that the test should usually be normal but that there should be a way to do the x-ray test. My reponse is that to do the x-ray test you temporarilly unbless the overloaded items, but I'm shocked to see that Scalar::Util doesn't have unbless(). There is a non-core module, Acme::Damn, but that nearly doesn't solve the problem (being non-core and also XS and further Acme::). But I suspect that temporarilly blessing into a non-overloaded package would be a "fix", but I haven't tested such.

        - tye        

Re^6: Recursively traverse two data structures and test for match
by dragonchild (Archbishop) on May 23, 2005 at 15:24 UTC
    Maybe the appropriate action is to have a Test::More flag that specifies whether to use overloading or have xray vision.

    Maybe it should be $Test::More::XRAY_VISION? :-)


    • In general, if you think something isn't in Perl, try it out, because it usually is. :-)
    • "What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against?"

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://459586]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (5)
As of 2020-05-25 17:44 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    If programming languages were movie genres, Perl would be:















    Results (146 votes). Check out past polls.

    Notices?