예제 #1
0
 def test_pack_signed(self):
     self.assertEqual(_S.pack('i\x00\x00\x08', ((-1,),(2,),(-3,))), '\xff\x02\xfd')
     fmt = 'i\x00\x00\x02' * 4
     self.assertEqual(_S.pack(fmt, ((1,-1)*2,)), '\x77')
     v = _S.pack(fmt, ((1,-1)*4,), offset=4)
     self.assertEqual(ord(v[0]) & 15, 7)
     self.assertEqual(ord(v[1]) & (15<<4), 7<<4)
     self.assertRaises(ValueError, _S.pack, 'i\x00\x00\x08', (('a',),(2,)))
예제 #2
0
 def test_pack_float(self):
     fmt1 = 'f\x00\x00\x20'
     fmt2 = 'f\x00\x00\x40'
     self.assertEqual(_S.pack(fmt1, ((1.,),(2.,))), struct.pack('>ff', 1., 2.))
     self.assertEqual(_S.pack(fmt2, ((1.,),(2.,))), struct.pack('>dd', 1., 2.))
     self.assertEqual(_S.pack(fmt1, ((1,),(2,))), struct.pack('>ff', 1., 2.))
     self.assertEqual(_S.pack(fmt2, ((1,),(2,))), struct.pack('>dd', 1., 2.))
     self.assertRaises(ValueError, _S.pack, fmt2, (('a',),(2,)))
예제 #3
0
 def test_pack_char(self):
     fmt = 'c\x00\x00\x08'
     self.assertRaises(ValueError, _S.pack, fmt, (('',),('',)))
     self.assertEqual(_S.pack(fmt, (('a',),('b',))), 'ab')
     self.assertEqual(_S.pack(fmt, 'abcd'), 'abcd')
     self.assertEqual(_S.pack(fmt, '\x7f\x80\x7f\x80\x00', offset=7)[1:5], '\xff\x00\xff\x00')
     self.assertEqual(_S.pack(fmt, '\x3f\xc0\x3f\xc0\x00', offset=6)[1:5], '\xff\x00\xff\x00')
     self.assertEqual(_S.pack(fmt, '\x1f\xe0\x1f\xe0\x00', offset=5)[1:5], '\xff\x00\xff\x00')
     self.assertEqual(_S.pack(fmt, '\x0f\xf0\x0f\xf0\x00', offset=4)[1:5], '\xff\x00\xff\x00')
     self.assertEqual(_S.pack(fmt, '\x07\xf8\x07\xf8\x00', offset=3)[1:5], '\xff\x00\xff\x00')
     self.assertEqual(_S.pack(fmt, '\x03\xfc\x03\xfc\x00', offset=2)[1:5], '\xff\x00\xff\x00')
     self.assertEqual(_S.pack(fmt, '\x01\xfe\x01\xfe\x00', offset=1)[1:5], '\xff\x00\xff\x00')
예제 #4
0
 def test_pack_unsigned(self):
     self.assertEqual(_S.pack('u\x00\x00\x08', ((1,),(2,),(3,))), '\x01\x02\x03')
     fmt = 'u\x00\x00\x01' * 8
     self.assertEqual(_S.pack(fmt, ((1,0)*4,)), '\xaa')
     v = _S.pack(fmt, ((1,0)*4,), offset=4)
     self.assertEqual(ord(v[0]) & 15, ord('\x0a'))
     self.assertEqual(ord(v[1]) & (15<<4), ord('\xa0'))
     fmt = 'u\x00\x00\x02u\x00\x00\x04u\x00\x00\x0fu\x00\x00\x03'
     self.assertEqual(_S.pack(fmt, ((1,2,3,4),)), '\x48\x00\x1c')
     self.assertEqual(_S.pack(fmt, ((1.,2.,3.,4.),)), '\x48\x00\x1c')
     self.assertRaises(ValueError, _S.pack, 'u\x00\x00\x08', (('a',),(2,)))
     fmt = 'u\x00\x00\x28'
     self.assertEqual(_S.pack(fmt, ((2**32+2**8,),)), '\x01\x00\x00\x01\x00')
예제 #5
0
 def test_pack_mixed(self):
     fmt = 'c\x00\x00\x08u\x00\x00\x18'
     self.assertEqual(_S.pack(fmt, (('c',8),('u',24))), fmt)