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
