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.assertEquals(v, 42) 13 14 ok, v = CFNumberGetValue(number, kCFNumberSInt16Type, None); 15 self.assert_(ok) 16 self.assert_(isinstance(v, (int, long))) 17 self.assertEquals(v, 42) 18 19 ok, v = CFNumberGetValue(number, kCFNumberSInt32Type, None); 20 self.assert_(ok) 21 self.assert_(isinstance(v, (int, long))) 22 self.assertEquals(v, 42) 23 24 ok, v = CFNumberGetValue(number, kCFNumberSInt64Type, None); 25 self.assert_(ok) 26 self.assert_(isinstance(v, (int, long))) 27 self.assertEquals(v, 42) 28 29 ok, v = CFNumberGetValue(number, kCFNumberCharType, None); 30 self.assert_(ok) 31 self.assert_(isinstance(v, (int, long))) 32 self.assertEquals(v, 42) 33 34 ok, v = CFNumberGetValue(number, kCFNumberShortType, None); 35 self.assert_(ok) 36 self.assert_(isinstance(v, (int, long))) 37 self.assertEquals(v, 42) 38 39 ok, v = CFNumberGetValue(number, kCFNumberIntType, None); 40 self.assert_(ok) 41 self.assert_(isinstance(v, (int, long))) 42 self.assertEquals(v, 42) 43 44 ok, v = CFNumberGetValue(number, kCFNumberLongType, None); 45 self.assert_(ok) 46 self.assert_(isinstance(v, (int, long))) 47 self.assertEquals(v, 42) 48 49 ok, v = CFNumberGetValue(number, kCFNumberLongLongType, None); 50 self.assert_(ok) 51 self.assert_(isinstance(v, (int, long))) 52 self.assertEquals(v, 42) 53 54 ok, v = CFNumberGetValue(number, kCFNumberCFIndexType, None); 55 self.assert_(ok) 56 self.assert_(isinstance(v, (int, long))) 57 self.assertEquals(v, 42) 58 59 ok, v = CFNumberGetValue(number, kCFNumberFloat32Type, None) 60 self.assert_(ok) 61 self.assert_(isinstance(v, float)) 62 self.assertEquals(v, 42.0) 63 64 ok, v = CFNumberGetValue(number, kCFNumberFloat64Type, None) 65 self.assert_(ok) 66 self.assert_(isinstance(v, float)) 67 self.assertEquals(v, 42.0) 68 69 ok, v = CFNumberGetValue(number, kCFNumberFloatType, None) 70 self.assert_(ok) 71 self.assert_(isinstance(v, float)) 72 self.assertEquals(v, 42.0) 73 74 ok, v = CFNumberGetValue(number, kCFNumberDoubleType, None) 75 self.assert_(ok) 76 self.assert_(isinstance(v, float)) 77 self.assertEquals(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.failUnless(isinstance(CFBooleanGetTypeID(), (int, long))) 87 88 self.failUnless(CFBooleanGetValue(kCFBooleanTrue) is True) 89 self.failUnless(CFBooleanGetValue(kCFBooleanFalse) is False) 90 self.failUnless(CFBooleanGetValue(True)) 91 self.failIf(CFBooleanGetValue(False)) 92 93 def no_testNumber(self): 94 self.failUnless(isinstance(CFNumberGetTypeID(), (int, long))) 95 96 # Add cases for all number types 97 num = CFNumberCreate(None, kCFNumberSInt8Type, 1) 98 self.failUnless(isinstance(num, CFNumberRef)) 99 self.failIf(CFNumberIsFloatType(num)) 100 self.failUnless(num == 1) 101 102 num = CFNumberCreate(None, kCFNumberSInt8Type, 1) 103 self.failUnless(isinstance(num, CFNumberRef)) 104 self.failIf(CFNumberIsFloatType(num)) 105 self.failUnless(num == 1) 106 107 num = CFNumberCreate(None, kCFNumberSInt16Type, 1) 108 self.failUnless(isinstance(num, CFNumberRef)) 109 self.failIf(CFNumberIsFloatType(num)) 110 self.failUnless(num == 1) 111 112 num = CFNumberCreate(None, kCFNumberSInt32Type, 1) 113 self.failUnless(isinstance(num, CFNumberRef)) 114 self.failIf(CFNumberIsFloatType(num)) 115 self.failUnless(num == 1) 116 117 num = CFNumberCreate(None, kCFNumberSInt64Type, 1) 118 self.failUnless(isinstance(num, CFNumberRef)) 119 self.failIf(CFNumberIsFloatType(num)) 120 self.failUnless(num == 1) 121 122 num = CFNumberCreate(None, kCFNumberFloat32Type, 1) 123 self.failUnless(isinstance(num, CFNumberRef)) 124 self.failUnless(CFNumberIsFloatType(num)) 125 self.failUnless(num == 1) 126 127 num = CFNumberCreate(None, kCFNumberFloat64Type, 1) 128 self.failUnless(isinstance(num, CFNumberRef)) 129 self.failUnless(CFNumberIsFloatType(num)) 130 self.failUnless(num == 1) 131 132 num = CFNumberCreate(None, kCFNumberCharType, 1) 133 self.failUnless(isinstance(num, CFNumberRef)) 134 self.failIf(CFNumberIsFloatType(num)) 135 self.failUnless(num == 1) 136 137 num = CFNumberCreate(None, kCFNumberShortType, 1) 138 self.failUnless(isinstance(num, CFNumberRef)) 139 self.failIf(CFNumberIsFloatType(num)) 140 self.failUnless(num == 1) 141 142 num = CFNumberCreate(None, kCFNumberIntType, 1) 143 self.failUnless(isinstance(num, CFNumberRef)) 144 self.failIf(CFNumberIsFloatType(num)) 145 self.failUnless(num == 1) 146 147 num = CFNumberCreate(None, kCFNumberLongType, 1) 148 self.failUnless(isinstance(num, CFNumberRef)) 149 self.failIf(CFNumberIsFloatType(num)) 150 self.failUnless(num == 1) 151 152 num = CFNumberCreate(None, kCFNumberLongLongType, 1) 153 self.failUnless(isinstance(num, CFNumberRef)) 154 self.failIf(CFNumberIsFloatType(num)) 155 self.failUnless(num == 1) 156 157 num = CFNumberCreate(None, kCFNumberFloatType, 1) 158 self.failUnless(isinstance(num, CFNumberRef)) 159 self.failUnless(CFNumberIsFloatType(num)) 160 self.failUnless(num == 1) 161 162 num = CFNumberCreate(None, kCFNumberDoubleType, 1) 163 self.failUnless(isinstance(num, CFNumberRef)) 164 self.failUnless(CFNumberIsFloatType(num)) 165 self.failUnless(num == 1) 166 167 num = CFNumberCreate(None, kCFNumberCFIndexType, 1) 168 self.failUnless(isinstance(num, CFNumberRef)) 169 self.failIf(CFNumberIsFloatType(num)) 170 self.failUnless(num == 1) 171 172 num = CFNumberCreate(None, kCFNumberNSIntegerType, 1) 173 self.failUnless(isinstance(num, CFNumberRef)) 174 self.failIf(CFNumberIsFloatType(num)) 175 self.failUnless(num == 1) 176 177 num = CFNumberCreate(None, kCFNumberCGFloatType, 1) 178 self.failUnless(isinstance(num, CFNumberRef)) 179 self.failUnless(CFNumberIsFloatType(num)) 180 self.failUnless(num == 1) 181 182 183 184 def testNumberTypes(self): 185 v = CFNumberGetType(44) 186 self.failUnless(v == kCFNumberLongType) 187 188 v = CFNumberGetType(2.5) 189 self.failUnless(v == kCFNumberDoubleType) 190 191 v = CFNumberGetByteSize(44) 192 if sys.maxint > 2 ** 32: 193 self.failUnless(v == 8) 194 else: 195 self.failUnless(v == 4) 196 197 v = CFNumberGetByteSize(44.0) 198 self.failUnless(v == 8) 199 200 self.failIf(CFNumberIsFloatType(44)) 201 self.failUnless(CFNumberIsFloatType(1.0)) 202 203 r = CFNumberCompare(44, 45, 0) 204 self.failUnless(r < 0) 205 206 207 def testConstants(self): 208 self.failUnless(kCFBooleanTrue is True) 209 self.failUnless(kCFBooleanFalse is False) 210 211 self.failUnless(kCFNumberSInt8Type == 1) 212 self.failUnless(kCFNumberSInt16Type == 2) 213 self.failUnless(kCFNumberSInt32Type == 3) 214 self.failUnless(kCFNumberSInt64Type == 4) 215 self.failUnless(kCFNumberFloat32Type == 5) 216 self.failUnless(kCFNumberFloat64Type == 6) 217 self.failUnless(kCFNumberCharType == 7) 218 self.failUnless(kCFNumberShortType == 8) 219 self.failUnless(kCFNumberIntType == 9) 220 self.failUnless(kCFNumberLongType == 10) 221 self.failUnless(kCFNumberLongLongType == 11) 222 self.failUnless(kCFNumberFloatType == 12) 223 self.failUnless(kCFNumberDoubleType == 13) 224 self.failUnless(kCFNumberCFIndexType == 14) 225 self.failUnless(kCFNumberNSIntegerType == 15) 226 self.failUnless(kCFNumberCGFloatType == 16) 227 self.failUnless(kCFNumberMaxType == 16) 228 229 self.failUnless(isinstance(kCFNumberPositiveInfinity, float)) 230 self.failUnless(isinstance(kCFNumberNegativeInfinity, float)) 231 self.failUnless(isinstance(kCFNumberNaN, float)) 232 233 234if __name__ == "__main__": 235 main() 236