test_bitstring.py 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #!/usr/bin/env python
  2. """
  3. Module-level unit tests.
  4. """
  5. import unittest
  6. import sys
  7. sys.path.insert(0, '..')
  8. import bitstring
  9. import copy
  10. class ModuleData(unittest.TestCase):
  11. def testVersion(self):
  12. self.assertEqual(bitstring.__version__, '3.1.3')
  13. def testAll(self):
  14. exported = ['ConstBitArray', 'ConstBitStream', 'BitStream', 'BitArray',
  15. 'Bits', 'BitString', 'pack', 'Error', 'ReadError',
  16. 'InterpretError', 'ByteAlignError', 'CreationError', 'bytealigned']
  17. self.assertEqual(set(bitstring.__all__), set(exported))
  18. def testReverseDict(self):
  19. d = bitstring.BYTE_REVERSAL_DICT
  20. for i in range(256):
  21. a = bitstring.Bits(uint=i, length=8)
  22. b = d[i]
  23. self.assertEqual(a.bin[::-1], bitstring.Bits(bytes=b).bin)
  24. def testAliases(self):
  25. self.assertTrue(bitstring.Bits is bitstring.ConstBitArray)
  26. self.assertTrue(bitstring.BitStream is bitstring.BitString)
  27. class MemoryUsage(unittest.TestCase):
  28. def testBaselineMemory(self):
  29. try:
  30. import pympler.asizeof.asizeof as size
  31. except ImportError:
  32. return
  33. # These values might be platform dependent, so don't fret too much.
  34. self.assertEqual(size(bitstring.ConstBitStream([0])), 64)
  35. self.assertEqual(size(bitstring.Bits([0])), 64)
  36. self.assertEqual(size(bitstring.BitStream([0])), 64)
  37. self.assertEqual(size(bitstring.BitArray([0])), 64)
  38. from bitstring.bitstore import ByteStore
  39. self.assertEqual(size(ByteStore(bytearray())), 100)
  40. class Copy(unittest.TestCase):
  41. def testConstBitArrayCopy(self):
  42. import copy
  43. cba = bitstring.Bits(100)
  44. cba_copy = copy.copy(cba)
  45. self.assertTrue(cba is cba_copy)
  46. def testBitArrayCopy(self):
  47. ba = bitstring.BitArray(100)
  48. ba_copy = copy.copy(ba)
  49. self.assertFalse(ba is ba_copy)
  50. self.assertFalse(ba._datastore is ba_copy._datastore)
  51. self.assertTrue(ba == ba_copy)
  52. def testConstBitStreamCopy(self):
  53. cbs = bitstring.ConstBitStream(100)
  54. cbs.pos = 50
  55. cbs_copy = copy.copy(cbs)
  56. self.assertEqual(cbs_copy.pos, 0)
  57. self.assertTrue(cbs._datastore is cbs_copy._datastore)
  58. self.assertTrue(cbs == cbs_copy)
  59. def testBitStreamCopy(self):
  60. bs = bitstring.BitStream(100)
  61. bs.pos = 50
  62. bs_copy = copy.copy(bs)
  63. self.assertEqual(bs_copy.pos, 0)
  64. self.assertFalse(bs._datastore is bs_copy._datastore)
  65. self.assertTrue(bs == bs_copy)
  66. class Interning(unittest.TestCase):
  67. def testBits(self):
  68. a = bitstring.Bits('0xf')
  69. b = bitstring.Bits('0xf')
  70. self.assertTrue(a is b)
  71. c = bitstring.Bits('0b1111')
  72. self.assertFalse(a is c)
  73. def testCBS(self):
  74. a = bitstring.ConstBitStream('0b11000')
  75. b = bitstring.ConstBitStream('0b11000')
  76. self.assertFalse(a is b)
  77. # self.assertTrue(a._datastore is b._datastore)