def write_double_workaround(self, d): """ Override the L{DataTypeMixIn.write_double} method to fix problems with doubles by using the third-party C{fpconst} library. @raise TypeError: Unexpected type for float C{d}. """ if type(d) is not float: raise TypeError('expected a float (got:%r)' % (type(d),)) if python.isNaN(d): if self._is_big_endian(): self.write('\xff\xf8\x00\x00\x00\x00\x00\x00') else: self.write('\x00\x00\x00\x00\x00\x00\xf8\xff') elif python.isNegInf(d): if self._is_big_endian(): self.write('\xff\xf0\x00\x00\x00\x00\x00\x00') else: self.write('\x00\x00\x00\x00\x00\x00\xf0\xff') elif python.isPosInf(d): if self._is_big_endian(): self.write('\x7f\xf0\x00\x00\x00\x00\x00\x00') else: self.write('\x00\x00\x00\x00\x00\x00\xf0\x7f') else: write_double_workaround.old_func(self, d)
def test_infinites(self): x = self.decode('\x05\xff\xf8\x00\x00\x00\x00\x00\x00') self.assertTrue(python.isNaN(x)) x = self.decode('\x05\xff\xf0\x00\x00\x00\x00\x00\x00') self.assertTrue(python.isNegInf(x)) x = self.decode('\x05\x7f\xf0\x00\x00\x00\x00\x00\x00') self.assertTrue(python.isPosInf(x))
def test_infinites(self): self.buf.truncate() self.buf.write('\x00\xff\xf8\x00\x00\x00\x00\x00\x00') self.buf.seek(0) x = self.decoder.readElement() self.assertTrue(python.isNaN(x)) self.buf.truncate() self.buf.write('\x00\xff\xf0\x00\x00\x00\x00\x00\x00') self.buf.seek(0) x = self.decoder.readElement() self.assertTrue(python.isNegInf(x)) self.buf.truncate() self.buf.write('\x00\x7f\xf0\x00\x00\x00\x00\x00\x00') self.buf.seek(0) x = self.decoder.readElement() self.assertTrue(python.isPosInf(x))