http://www.perlmonks.org?node_id=459608


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

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        

  • Comment on Re^8: Recursively traverse two data structures and test for match (testing / overload)

Replies are listed 'Best First'.
Re^9: Recursively traverse two data structures and test for match (testing / overload)
by diotalevi (Canon) on May 23, 2005 at 17:43 UTC

    Blessing into a non-overloaded package is the official way to get around such difficulties. 'Does::Not::Exist' is a popular one.

    My problem was that with a deeply nested data structure, I'd have to walk the entire thing first, find all the objects blessed into the overloaded class, and rebless them prior to asking Test::More to compare the structures. I have the opinion that its all that structure walking that prompted me to use is_deeply() in the first place but to have it fail to work because I couldn't convince it to ignore overloading was a disappointment.