On Sat, Jul 02, 2005 at 07:34:47PM +0100, Fergal Daly wrote: > On 7/2/05, Andrew Pimlott <[EMAIL PROTECTED]> wrote: > > Citing "computer science" as the basis of your position is just too > > much. The "computer science" answer to the comparison of references is > > that they are equal if and only if they are the same reference. > > Actually what Yves wants is known a testing if 2 structures are > bisimulable in computer science.
Can you give me a hint as to the difference in a language like Perl? > > That this is just one example, and if you try to worm out by saying > > "such-and-such operation is not allowed", I'll find you another. > > I'm not sure you will. As long as this is_deeply looks inside the > objects of tied and overloaded refsthen the only operations that needs > to be banned are those which look at the address of a reference > (except to compare it to the address of another reference). If you > exclude those operations (which are fairly useless outside of > debugging) then I don't think anything else goes wrong. What about my $x = []; my $a = [$x, []]; my $b = [[], $x] is_deeply($a, $b); # passes $a->[0][0] = 1; $b->[0][0] = 1; is_deeply($a, $b); # fails > > I also think that > > any such comparison should allow objects to override the comparison. > > You need to be very careful there. Allowing objects on the "expected" > side to control the comparison is ok but If you allow the data that > you are testing to control it then your test is effectively > meaningless. I was thinking that the comparison function would be a class method that would be called after verifying that two references point to objects in the same class. I think that should be safe enough. Andrew