[Python-Dev] Std test failures on WIndows: test_compare, test_minidom

Neil Schemenauer nas@arctrix.com
Tue, 2 Jan 2001 08:51:48 -0800


On Tue, Jan 02, 2001 at 06:19:14PM -0500, Tim Peters wrote:
> Neil, my platform doesn't even *have* a "make":  are you saying the test
> passes for you when you run regrtest.py?

Yes.  Isn't checking in code without running regrtest a capital
offence? :)

> Lang Ref 2.1.3 (Comparisons) says you can compare them, and
> guarantees they won't compare equal, but doesn't define it beyond that.

Okay, I'll use == rather than cmp().  When I was working on the coercion
patch I found cmp() useful.  I guess it shouldn't be in the standard
test suite, especially since Jython may implement things differently.

[Neil]
> or, do you think that the results from cmp() should be clamped
> between -1 and 1?

[Tim]
> Not that either <wink>; cmp() isn't documented that way.
> 
> They're "bizarre" simply because they're not what Python returns!

They do on my box:

    Python 2.0 (#19, Nov 21 2000, 18:13:04) 
    [GCC 2.95.2 20000220 (Debian GNU/Linux)] on linux2
    Type "copyright", "credits" or "license" for more information.
    >>> cmp(1, None)
    -78

I guess MS uses a different strcmp than GNU.  Do you mind trying the
attached C code?  I get "-78" as output.  I should have thought a little
more before checking in the patch.  -78 is quite obviously a
machine/library dependent thing.

[Tim again]
> One of us is missing something obvious here <wink>.

I don't know about that.  The implementation of coercion and comparison
is not simple.  I've been studying it for some time now and I obviously
still don't know what the hell is going on.

AFAICT, the problem is that instances without a comparison method can
compare larger or smaller than numbers depending on where in memory the
objects are stored.

  Neil


#include <stdio.h>
#include <string.h>

int main()
{
    printf("%d\n", strcmp("", "None"));
}