1from PyObjCTools.TestSupport import * 2import sys 3from CoreFoundation import * 4 5class TestCFNumber (TestCase): 6 def testCFNumberGetValue(self): 7 number = 42 8 9 ok, v = CFNumberGetValue(number, kCFNumberSInt8Type, None); 10 self.assert_(ok) 11 self.assert_(isinstance(v, (int, long))) 12 self.assertEqual(v, 42) 13 14 ok, v = CFNumberGetValue(number, kCFNumberSInt16Type, None); 15 self.assert_(ok) 16 self.assert_(isinstance(v, (int, long))) 17 self.assertEqual(v, 42) 18 19 ok, v = CFNumberGetValue(number, kCFNumberSInt32Type, None); 20 self.assert_(ok) 21 self.assert_(isinstance(v, (int, long))) 22 self.assertEqual(v, 42) 23 24 ok, v = CFNumberGetValue(number, kCFNumberSInt64Type, None); 25 self.assert_(ok) 26 self.assert_(isinstance(v, (int, long))) 27 self.assertEqual(v, 42) 28 29 ok, v = CFNumberGetValue(number, kCFNumberCharType, None); 30 self.assert_(ok) 31 self.assert_(isinstance(v, (int, long))) 32 self.assertEqual(v, 42) 33 34 ok, v = CFNumberGetValue(number, kCFNumberShortType, None); 35 self.assert_(ok) 36 self.assert_(isinstance(v, (int, long))) 37 self.assertEqual(v, 42) 38 39 ok, v = CFNumberGetValue(number, kCFNumberIntType, None); 40 self.assert_(ok) 41 self.assert_(isinstance(v, (int, long))) 42 self.assertEqual(v, 42) 43 44 ok, v = CFNumberGetValue(number, kCFNumberLongType, None); 45 self.assert_(ok) 46 self.assert_(isinstance(v, (int, long))) 47 self.assertEqual(v, 42) 48 49 ok, v = CFNumberGetValue(number, kCFNumberLongLongType, None); 50 self.assert_(ok) 51 self.assert_(isinstance(v, (int, long))) 52 self.assertEqual(v, 42) 53 54 ok, v = CFNumberGetValue(number, kCFNumberCFIndexType, None); 55 self.assert_(ok) 56 self.assert_(isinstance(v, (int, long))) 57 self.assertEqual(v, 42) 58 59 ok, v = CFNumberGetValue(number, kCFNumberFloat32Type, None) 60 self.assert_(ok) 61 self.assert_(isinstance(v, float)) 62 self.assertEqual(v, 42.0) 63 64 ok, v = CFNumberGetValue(number, kCFNumberFloat64Type, None) 65 self.assert_(ok) 66 self.assert_(isinstance(v, float)) 67 self.assertEqual(v, 42.0) 68 69 ok, v = CFNumberGetValue(number, kCFNumberFloatType, None) 70 self.assert_(ok) 71 self.assert_(isinstance(v, float)) 72 self.assertEqual(v, 42.0) 73 74 ok, v = CFNumberGetValue(number, kCFNumberDoubleType, None) 75 self.assert_(ok) 76 self.assert_(isinstance(v, float)) 77 self.assertEqual(v, 42.0) 78 79 ## Don't test this, the wrapper shouldn't range-check 80 ## arguments and CFNumberGetValue will crash when the 81 ## number type is invalid 82 #ok, v = CFNumberGetValue(number, kCFNumberMaxType+2) 83 #self.assert_(not ok) 84 85 def testBoolean(self): 86 self.assertIsInstance(CFBooleanGetTypeID(), (int, long)) 87 self.assertIs(CFBooleanGetValue(kCFBooleanTrue), True) 88 self.assertIs(CFBooleanGetValue(kCFBooleanFalse), False) 89 self.assertTrue(CFBooleanGetValue(True)) 90 self.assertFalse(CFBooleanGetValue(False)) 91 92 def no_testNumber(self): 93 self.assertIsInstance(CFNumberGetTypeID(), (int, long)) 94 # Add cases for all number types 95 num = CFNumberCreate(None, kCFNumberSInt8Type, 1) 96 self.assertIsInstance(num, CFNumberRef) 97 self.assertFalse(CFNumberIsFloatType(num)) 98 self.assertEqual(num , 1) 99 num = CFNumberCreate(None, kCFNumberSInt8Type, 1) 100 self.assertIsInstance(num, CFNumberRef) 101 self.assertFalse(CFNumberIsFloatType(num)) 102 self.assertEqual(num , 1) 103 num = CFNumberCreate(None, kCFNumberSInt16Type, 1) 104 self.assertIsInstance(num, CFNumberRef) 105 self.assertFalse(CFNumberIsFloatType(num)) 106 self.assertEqual(num , 1) 107 num = CFNumberCreate(None, kCFNumberSInt32Type, 1) 108 self.assertIsInstance(num, CFNumberRef) 109 self.assertFalse(CFNumberIsFloatType(num)) 110 self.assertEqual(num , 1) 111 num = CFNumberCreate(None, kCFNumberSInt64Type, 1) 112 self.assertIsInstance(num, CFNumberRef) 113 self.assertFalse(CFNumberIsFloatType(num)) 114 self.assertEqual(num , 1) 115 num = CFNumberCreate(None, kCFNumberFloat32Type, 1) 116 self.assertIsInstance(num, CFNumberRef) 117 self.assertTrue(CFNumberIsFloatType(num)) 118 self.assertEqual(num , 1) 119 num = CFNumberCreate(None, kCFNumberFloat64Type, 1) 120 self.assertIsInstance(num, CFNumberRef) 121 self.assertTrue(CFNumberIsFloatType(num)) 122 self.assertEqual(num , 1) 123 num = CFNumberCreate(None, kCFNumberCharType, 1) 124 self.assertIsInstance(num, CFNumberRef) 125 self.assertFalse(CFNumberIsFloatType(num)) 126 self.assertEqual(num , 1) 127 num = CFNumberCreate(None, kCFNumberShortType, 1) 128 self.assertIsInstance(num, CFNumberRef) 129 self.assertFalse(CFNumberIsFloatType(num)) 130 self.assertEqual(num , 1) 131 num = CFNumberCreate(None, kCFNumberIntType, 1) 132 self.assertIsInstance(num, CFNumberRef) 133 self.assertFalse(CFNumberIsFloatType(num)) 134 self.assertEqual(num , 1) 135 num = CFNumberCreate(None, kCFNumberLongType, 1) 136 self.assertIsInstance(num, CFNumberRef) 137 self.assertFalse(CFNumberIsFloatType(num)) 138 self.assertEqual(num , 1) 139 num = CFNumberCreate(None, kCFNumberLongLongType, 1) 140 self.assertIsInstance(num, CFNumberRef) 141 self.assertFalse(CFNumberIsFloatType(num)) 142 self.assertEqual(num , 1) 143 num = CFNumberCreate(None, kCFNumberFloatType, 1) 144 self.assertIsInstance(num, CFNumberRef) 145 self.assertTrue(CFNumberIsFloatType(num)) 146 self.assertEqual(num , 1) 147 num = CFNumberCreate(None, kCFNumberDoubleType, 1) 148 self.assertIsInstance(num, CFNumberRef) 149 self.assertTrue(CFNumberIsFloatType(num)) 150 self.assertEqual(num , 1) 151 num = CFNumberCreate(None, kCFNumberCFIndexType, 1) 152 self.assertIsInstance(num, CFNumberRef) 153 self.assertFalse(CFNumberIsFloatType(num)) 154 self.assertEqual(num , 1) 155 num = CFNumberCreate(None, kCFNumberNSIntegerType, 1) 156 self.assertIsInstance(num, CFNumberRef) 157 self.assertFalse(CFNumberIsFloatType(num)) 158 self.assertEqual(num , 1) 159 num = CFNumberCreate(None, kCFNumberCGFloatType, 1) 160 self.assertIsInstance(num, CFNumberRef) 161 self.assertTrue(CFNumberIsFloatType(num)) 162 self.assertEqual(num , 1) 163 164 def testNumberTypes(self): 165 v = CFNumberGetType(44) 166 self.assertIsIn(v, (kCFNumberLongLongType, kCFNumberLongType)) 167 v = CFNumberGetType(2.5) 168 self.assertEqual(v , kCFNumberDoubleType) 169 v = CFNumberGetByteSize(44) 170 171 if sys.maxint >= 2**32: 172 self.assertEqual(v , 8) 173 else: 174 self.assertEqual(v , 4) 175 v = CFNumberGetByteSize(44.0) 176 self.assertEqual(v , 8) 177 self.assertFalse(CFNumberIsFloatType(44)) 178 self.assertTrue(CFNumberIsFloatType(1.0)) 179 180 r = CFNumberCompare(44, 45, 0) 181 self.assertLessThan(r , 0) 182 def testConstants(self): 183 self.assertIs(kCFBooleanTrue, True) 184 self.assertIs(kCFBooleanFalse, False) 185 self.assertEqual(kCFNumberSInt8Type , 1) 186 self.assertEqual(kCFNumberSInt16Type , 2) 187 self.assertEqual(kCFNumberSInt32Type , 3) 188 self.assertEqual(kCFNumberSInt64Type , 4) 189 self.assertEqual(kCFNumberFloat32Type , 5) 190 self.assertEqual(kCFNumberFloat64Type , 6) 191 self.assertEqual(kCFNumberCharType , 7) 192 self.assertEqual(kCFNumberShortType , 8) 193 self.assertEqual(kCFNumberIntType , 9) 194 self.assertEqual(kCFNumberLongType , 10) 195 self.assertEqual(kCFNumberLongLongType , 11) 196 self.assertEqual(kCFNumberFloatType , 12) 197 self.assertEqual(kCFNumberDoubleType , 13) 198 self.assertEqual(kCFNumberCFIndexType , 14) 199 self.assertEqual(kCFNumberNSIntegerType , 15) 200 self.assertEqual(kCFNumberCGFloatType , 16) 201 self.assertEqual(kCFNumberMaxType , 16) 202 self.assertIsInstance(kCFNumberPositiveInfinity, float) 203 self.assertIsInstance(kCFNumberNegativeInfinity, float) 204 self.assertIsInstance(kCFNumberNaN, float) 205if __name__ == "__main__": 206 main() 207