parent
c3fd7f0247
commit
3d2975f38e
|
@ -34,6 +34,7 @@ else:
|
|||
FOUR_BYTE_INT_MAX = 2147483647
|
||||
|
||||
_int4_format = struct.Struct("!i")
|
||||
_float_format = struct.Struct("!d")
|
||||
|
||||
# Protocol constants
|
||||
VERSION_NUMBER = 1
|
||||
|
@ -47,6 +48,7 @@ BUILDTUPLE = b('T')
|
|||
SETITEM = b('m')
|
||||
NEWDICT = b('d')
|
||||
INT = b('i')
|
||||
FLOAT = b('f')
|
||||
STOP = b('S')
|
||||
|
||||
class CrossVersionOptions(object):
|
||||
|
@ -108,6 +110,11 @@ class Serializer(object):
|
|||
self._write_int4(i)
|
||||
dispatch[int] = save_int
|
||||
|
||||
def save_float(self, flt):
|
||||
self.stream.write(FLOAT)
|
||||
self.stream.write(_float_format.pack(flt))
|
||||
dispatch[float] = save_float
|
||||
|
||||
def _write_int4(self, i, error="int must be less than %i" %
|
||||
(FOUR_BYTE_INT_MAX,)):
|
||||
if i > FOUR_BYTE_INT_MAX:
|
||||
|
@ -196,6 +203,11 @@ class Unserializer(object):
|
|||
self.stack.append(i)
|
||||
opcodes[INT] = load_int
|
||||
|
||||
def load_float(self):
|
||||
binary = self.stream.read(_float_format.size)
|
||||
self.stack.append(_float_format.unpack(binary)[0])
|
||||
opcodes[FLOAT] = load_float
|
||||
|
||||
def _read_int4(self):
|
||||
return _int4_format.unpack(self.stream.read(4))[0]
|
||||
|
||||
|
|
|
@ -94,6 +94,14 @@ class TestSerializer:
|
|||
serializer.Serializer(py.io.BytesIO()).save,
|
||||
123456678900)
|
||||
|
||||
def test_float(self, py2, py3):
|
||||
for dump in py2.dump, py3.dump:
|
||||
p = dump(3.25)
|
||||
for load in py2.load, py3.load:
|
||||
tp, v = load(p)
|
||||
assert tp == "float"
|
||||
assert v == "3.25"
|
||||
|
||||
def test_bytes(self, py2, py3):
|
||||
p = py3.dump("b'hi'")
|
||||
tp, v = py2.load(p)
|
||||
|
|
Loading…
Reference in New Issue