Correction, you have to do this: unsigned long tmp = ((long)color->r << 24) + ((long)color->g << 16) + ((long)color->b << 8) +... to be specific.
-Tyler On Fri, May 1, 2009 at 6:21 PM, Tyler Laing <trinio...@gmail.com> wrote: > Rene, > > Okay, so I've got a fix. You have to prefix color->r with (long), and then > for hex and oct functions, you need to change INT_MAX to LONG_MAX for a 64 > bit platform. > > How do I make a patch for submission? > > -Tyler > > > On Fri, May 1, 2009 at 5:33 PM, Tyler Laing <trinio...@gmail.com> wrote: > >> Rene, >> >> You are right. I isolated the specific issue, and here's a sample .c file >> that shows the error on the 64 bit platform. When I get something that works >> on the the test file, I'll try it on the actual pygame code and see how the >> test performs. >> >> -Tyler >> >> >> On Fri, May 1, 2009 at 4:30 PM, Tyler Laing <trinio...@gmail.com> wrote: >> >>> 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 <ren...@gmail.com> 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 <trinio...@gmail.com> >>>> 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 <ren...@gmail.com> >>>> 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 >>> >> >> >> >> -- >> Visit my blog at http://oddco.ca/zeroth/zblog >> > > > > -- > Visit my blog at http://oddco.ca/zeroth/zblog > -- Visit my blog at http://oddco.ca/zeroth/zblog