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