Test PyUnicode_Find()
(self)
| 1322 | @support.cpython_only |
| 1323 | @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') |
| 1324 | def test_find(self): |
| 1325 | """Test PyUnicode_Find()""" |
| 1326 | from _testlimitedcapi import unicode_find as find |
| 1327 | |
| 1328 | for str in "\xa1", "\u8000\u8080", "\ud800\udc02", "\U0001f100\U0001f1f1": |
| 1329 | for i, ch in enumerate(str): |
| 1330 | self.assertEqual(find(str, ch, 0, len(str), 1), i) |
| 1331 | self.assertEqual(find(str, ch, 0, len(str), -1), i) |
| 1332 | |
| 1333 | str = "!>_<!" |
| 1334 | self.assertEqual(find(str, 'z', 0, len(str), 1), -1) |
| 1335 | self.assertEqual(find(str, 'z', 0, len(str), -1), -1) |
| 1336 | self.assertEqual(find(str, '', 0, len(str), 1), 0) |
| 1337 | self.assertEqual(find(str, '', 0, len(str), -1), len(str)) |
| 1338 | # start < end |
| 1339 | self.assertEqual(find(str, '!', 1, len(str)+1, 1), 4) |
| 1340 | self.assertEqual(find(str, '!', 1, PY_SSIZE_T_MAX, 1), 4) |
| 1341 | self.assertEqual(find(str, '!', 0, len(str)+1, -1), 4) |
| 1342 | self.assertEqual(find(str, '!', 0, PY_SSIZE_T_MAX, -1), 4) |
| 1343 | # start >= end |
| 1344 | self.assertEqual(find(str, '!', 0, 0, 1), -1) |
| 1345 | self.assertEqual(find(str, '!', 0, 0, -1), -1) |
| 1346 | self.assertEqual(find(str, '!', len(str), 0, 1), -1) |
| 1347 | self.assertEqual(find(str, '!', len(str), 0, -1), -1) |
| 1348 | # negative |
| 1349 | self.assertEqual(find(str, '!', -len(str), -1, 1), 0) |
| 1350 | self.assertEqual(find(str, '!', -len(str), -1, -1), 0) |
| 1351 | self.assertEqual(find(str, '!', PY_SSIZE_T_MIN, -1, 1), 0) |
| 1352 | self.assertEqual(find(str, '!', PY_SSIZE_T_MIN, -1, -1), 0) |
| 1353 | self.assertEqual(find(str, '!', PY_SSIZE_T_MIN, PY_SSIZE_T_MAX, 1), 0) |
| 1354 | self.assertEqual(find(str, '!', PY_SSIZE_T_MIN, PY_SSIZE_T_MAX, -1), 4) |
| 1355 | # bad arguments |
| 1356 | self.assertRaises(TypeError, find, str, b'!', 0, len(str), 1) |
| 1357 | self.assertRaises(TypeError, find, b"!>_<!", '!', 0, len(str), 1) |
| 1358 | self.assertRaises(TypeError, find, str, ord('!'), 0, len(str), 1) |
| 1359 | self.assertRaises(TypeError, find, [], '!', 0, len(str), 1) |
| 1360 | # CRASHES find(NULL, '!', 0, len(str), 1) |
| 1361 | # CRASHES find(str, NULL, 0, len(str), 1) |
| 1362 | |
| 1363 | @support.cpython_only |
| 1364 | @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') |
nothing calls this directly
no test coverage detected