1from PyObjCTools.TestSupport import * 2from CoreFoundation import * 3 4try: 5 long 6except NameError: 7 long = int 8 9 10def byte2bits(val): 11 result = [] 12 for i in range(7, -1, -1): 13 if val & (1 << i): 14 result.append(1) 15 else: 16 result.append(0) 17 return result 18 19class TestBitVector (TestCase): 20 def testGetTypeID(self): 21 v = CFBitVectorGetTypeID() 22 self.assertIsInstance(v, (int, long)) 23 24 def testCreation(self): 25 bitset = CFBitVectorCreate(None, [0x11, 0x22, 0x33, 0x44], 30) 26 self.assertIsInstance(bitset, CFBitVectorRef) 27 self.assertEqual(CFBitVectorGetCount(bitset) , 30) 28 set2 = CFBitVectorCreateCopy(None, bitset) 29 self.assertIsInstance(set2, CFBitVectorRef) 30 self.assertEqual(CFBitVectorGetCount(set2) , 30) 31 set3 = CFBitVectorCreateMutableCopy(None, 0, bitset) 32 self.assertIsInstance(set3, CFBitVectorRef) 33 self.assertEqual(CFBitVectorGetCount(set3) , 30) 34 self.assertIsNot(set3, set) 35 bitset = CFBitVectorCreateMutable(None, 0) 36 self.assertIsInstance(bitset, CFBitVectorRef) 37 self.assertEqual(CFBitVectorGetCount(bitset) , 0) 38 set2 = CFBitVectorCreateCopy(None, bitset) 39 self.assertIsInstance(set2, CFBitVectorRef) 40 self.assertEqual(CFBitVectorGetCount(set2) , 0) 41 set3 = CFBitVectorCreateMutableCopy(None, 0, bitset) 42 self.assertIsInstance(set3, CFBitVectorRef) 43 self.assertEqual(CFBitVectorGetCount(set3) , 0) 44 self.assertIsNot(set3, set) 45 46 def testInspection(self): 47 bitset = CFBitVectorCreate(None, [0x11, 0x22, 0x33, 0x44], 32) 48 49 self.assertEqual( CFBitVectorGetCount(bitset), 32 ) 50 self.assertEqual( CFBitVectorGetCountOfBit(bitset, (0, 30), 1), 10 ) 51 self.assertEqual( CFBitVectorGetCountOfBit(bitset, (0, 30), 0), 20 ) 52 53 self.assertTrue( CFBitVectorContainsBit(bitset, (0, 30), 1) ) 54 self.assertFalse( CFBitVectorContainsBit(bitset, (0, 3), 1) ) 55 56 bits = byte2bits(0x11) 57 for i in range(8): 58 b = CFBitVectorGetBitAtIndex(bitset, i) 59 self.assertEqual(b , bits[i] ) 60 bits = CFBitVectorGetBits(bitset, (0, 8), None) 61 self.assertEqual(bits, b'\x11') 62 63 idx = CFBitVectorGetFirstIndexOfBit(bitset, (0,8), 1) 64 self.assertEqual(idx, 3) 65 idx = CFBitVectorGetLastIndexOfBit(bitset, (0,8), 1) 66 self.assertEqual(idx, 7) 67 68 idx = CFBitVectorGetFirstIndexOfBit(bitset, (0,8), 0) 69 self.assertEqual(idx, 0) 70 idx = CFBitVectorGetLastIndexOfBit(bitset, (0,8), 0) 71 self.assertEqual(idx, 6) 72 73 def testMutation(self): 74 bitset = CFBitVectorCreate(None, [0x11, 0x22, 0x33, 0x44], 30) 75 bitset = CFBitVectorCreateMutableCopy(None, 0, bitset) 76 77 CFBitVectorSetCount(bitset, 20) 78 self.assertEqual(CFBitVectorGetCount(bitset) , 20 ) 79 bit = CFBitVectorGetBitAtIndex(bitset, 4) 80 CFBitVectorFlipBitAtIndex(bitset, 4) 81 bit2 = CFBitVectorGetBitAtIndex(bitset, 4) 82 self.assertNotEqual(bit , bit2) 83 bits = ord(CFBitVectorGetBits(bitset, (0, 8), None)) 84 CFBitVectorFlipBits(bitset, (0, 8)) 85 bits2 = ord(CFBitVectorGetBits(bitset, (0, 8), None)) 86 87 self.assertEqual(bits2, ~bits & 0xff) 88 89 CFBitVectorSetBitAtIndex(bitset, 4, 0) 90 self.assertEqual( CFBitVectorGetBitAtIndex(bitset, 4), 0) 91 CFBitVectorSetBitAtIndex(bitset, 4, 1) 92 self.assertEqual( CFBitVectorGetBitAtIndex(bitset, 4), 1) 93 94 CFBitVectorSetBits(bitset, (0, 5), 0) 95 for i in range(5): 96 self.assertEqual( CFBitVectorGetBitAtIndex(bitset, i), 0) 97 CFBitVectorSetBits(bitset, (0, 5), 1) 98 for i in range(5): 99 self.assertEqual( CFBitVectorGetBitAtIndex(bitset, i), 1) 100 101 CFBitVectorSetAllBits(bitset, 1) 102 bits = CFBitVectorGetBits(bitset, (0, 20), None) 103 self.assertEqual(bits, b'\xff\xff\xf0') 104 CFBitVectorSetAllBits(bitset, 0) 105 bits = CFBitVectorGetBits(bitset, (0, 20), None) 106 self.assertEqual(bits, b'\x00\x00\x00') 107 108if __name__ == "__main__": 109 main() 110