I'll try that then. For reference, I am using an AMD Athlon 64 X2 5200+
processor. What would be the proper way to make it endian safe?

Change the unsigned long tmp to unsigned int tmp?

-Tyler

On Fri, May 1, 2009 at 4:24 PM, René Dudfield <[email protected]> wrote:

> hi,
>
> there's some parts like this...
>
> static PyObject*
> _color_float (PyColor *color)
> {
>    unsigned long tmp = (color->r << 24) + (color->g << 16) + (color->b <<
> 8) +
>        color->a;
>    return PyFloat_FromDouble ((double) tmp);
> }
>
> this code isn't endian or 64bit safe... since it is using bit shifting
> for packing.  On different platforms, this produces different outputs.
>
> I think it has to convert into the same 32bit unsigned int, and then
> return that.
>
>
>
>
> On Sat, May 2, 2009 at 8:54 AM, Tyler Laing <[email protected]> wrote:
> > Taking a look at color.c, I believe the bug may actually rest in the
> > Py<type>_FromUnsignedLong/Py<type>_FromDouble/Py<type>_FromString
> functions
> > provided by the Python libs. There is no logical or numerical reason why,
> > from the numbers we have, we would get those values with those
> operations.
> > The tests beforehand affirm that the r, g, b, and a variables all the
> proper
> > values, it just happens to be the one step in the code. I'll examine
> > further.
> >
> > -Tyler
> >
> > On Fri, May 1, 2009 at 3:28 PM, René Dudfield <[email protected]> wrote:
> >>
> >> hi,
> >>
> >> Below are the failing unittests for Color on 64bit ubuntu.
> >>
> >>
> >>
> >>
> >> ======================================================================
> >> > FAIL: ColorTypeTest.test_float
> >> > ----------------------------------------------------------------------
> >> > Traceback (most recent call last):
> >> >   File "/usr/lib/python2.5/site-packages/pygame/tests/color_test.py",
> >> > line
> >> > 412, in test_float
> >> >     self.assertEquals (float (c), float (0xCC00CC00))
> >> > AssertionError: 1.844674407283719e+19 != 3422604288.0
> >> >
> >> > ======================================================================
> >> > FAIL: ColorTypeTest.test_hex
> >> > ----------------------------------------------------------------------
> >> > Traceback (most recent call last):
> >> >   File "/usr/lib/python2.5/site-packages/pygame/tests/color_test.py",
> >> > line
> >> > 442, in test_hex
> >> >     self.assertEquals (hex (c), hex (0xCC00CC00))
> >> > AssertionError: '0xffffffffcc00cc00L' != '0xcc00cc00'
> >> >
> >> > ======================================================================
> >> > FAIL: ColorTypeTest.test_int
> >> > ----------------------------------------------------------------------
> >> > Traceback (most recent call last):
> >> >   File "/usr/lib/python2.5/site-packages/pygame/tests/color_test.py",
> >> > line
> >> > 494, in test_int
> >> >     self.assertEquals (int (c), int (0xCC00CC00))
> >> > AssertionError: 18446744072837188608L != 3422604288
> >> >
> >> > ======================================================================
> >> > FAIL: ColorTypeTest.test_long
> >> > ----------------------------------------------------------------------
> >> > Traceback (most recent call last):
> >> >   File "/usr/lib/python2.5/site-packages/pygame/tests/color_test.py",
> >> > line
> >> > 511, in test_long
> >> >     self.assertEquals (long (c), long (0xCC00CC00))
> >> > AssertionError: 18446744072837188608L != 3422604288L
> >> >
> >> > ======================================================================
> >> > FAIL: ColorTypeTest.test_oct
> >> > ----------------------------------------------------------------------
> >> > Traceback (most recent call last):
> >> >   File "/usr/lib/python2.5/site-packages/pygame/tests/color_test.py",
> >> > line
> >> > 427, in test_oct
> >> >     self.assertEquals (oct (c), oct (0xCC00CC00))
> >> > AssertionError: '01777777777771400146000L' != '031400146000'
> >> >
> >> > ======================================================================
> >> > FAIL: ColorTypeTest.test_webstyle
> >> > ----------------------------------------------------------------------
> >> > Traceback (most recent call last):
> >> >   File "/usr/lib/python2.5/site-packages/pygame/tests/color_test.py",
> >> > line
> >> > 458, in test_webstyle
> >> >     self.assertEquals (hex (c), hex (0xCC00CC11))
> >> > AssertionError: '0xffffffffcc00cc11L' != '0xcc00cc11'
> >> >
> >> >
> >
> >
> >
> > --
> > Visit my blog at http://oddco.ca/zeroth/zblog
> >
>



-- 
Visit my blog at http://oddco.ca/zeroth/zblog

Reply via email to