|
def test_count(self): |
|
self.checkequal(3, 'aaa', 'count', 'a') |
|
self.checkequal(0, 'aaa', 'count', 'b') |
|
self.checkequal(3, 'aaa', 'count', 'a') |
|
self.checkequal(0, 'aaa', 'count', 'b') |
|
self.checkequal(3, 'aaa', 'count', 'a') |
|
self.checkequal(0, 'aaa', 'count', 'b') |
|
self.checkequal(0, 'aaa', 'count', 'b') |
|
self.checkequal(2, 'aaa', 'count', 'a', 1) |
|
self.checkequal(0, 'aaa', 'count', 'a', 10) |
|
self.checkequal(1, 'aaa', 'count', 'a', -1) |
|
self.checkequal(3, 'aaa', 'count', 'a', -10) |
|
self.checkequal(1, 'aaa', 'count', 'a', 0, 1) |
|
self.checkequal(3, 'aaa', 'count', 'a', 0, 10) |
|
self.checkequal(2, 'aaa', 'count', 'a', 0, -1) |
|
self.checkequal(0, 'aaa', 'count', 'a', 0, -10) |
|
self.checkequal(3, 'aaa', 'count', '', 1) |
|
self.checkequal(1, 'aaa', 'count', '', 3) |
|
self.checkequal(0, 'aaa', 'count', '', 10) |
|
self.checkequal(2, 'aaa', 'count', '', -1) |
|
self.checkequal(4, 'aaa', 'count', '', -10) |
|
|
|
self.checkequal(1, '', 'count', '') |
|
self.checkequal(0, '', 'count', '', 1, 1) |
|
self.checkequal(0, '', 'count', '', sys.maxsize, 0) |
|
|
|
self.checkequal(0, '', 'count', 'xx') |
|
self.checkequal(0, '', 'count', 'xx', 1, 1) |
|
self.checkequal(0, '', 'count', 'xx', sys.maxsize, 0) |
|
|
|
self.checkraises(TypeError, 'hello', 'count') |
|
|
|
if self.contains_bytes: |
|
self.checkequal(0, 'hello', 'count', 42) |
|
else: |
|
self.checkraises(TypeError, 'hello', 'count', 42) |
|
|
|
# For a variety of combinations, |
|
# verify that str.count() matches an equivalent function |
|
# replacing all occurrences and then differencing the string lengths |
|
charset = ['', 'a', 'b'] |
|
digits = 7 |
|
base = len(charset) |
|
teststrings = set() |
|
for i in range(base ** digits): |
|
entry = [] |
|
for j in range(digits): |
|
i, m = divmod(i, base) |
|
entry.append(charset[m]) |
|
teststrings.add(''.join(entry)) |
|
teststrings = [self.fixtype(ts) for ts in teststrings] |
|
for i in teststrings: |
|
n = len(i) |
|
for j in teststrings: |
|
r1 = i.count(j) |
|
if j: |
|
r2, rem = divmod(n - len(i.replace(j, self.fixtype(''))), |
|
len(j)) |
|
else: |
|
r2, rem = len(i)+1, 0 |
|
if rem or r1 != r2: |
|
self.assertEqual(rem, 0, '%s != 0 for %s' % (rem, i)) |
|
self.assertEqual(r1, r2, '%s != %s for %s' % (r1, r2, i)) |