1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
test.describe("Basic Tests")
tests = (
('abracadabra', [('a', 5), ('b', 2), ('r', 2), ('c', 1), ('d', 1)])
)
for t in tests:
inp, exp = t
test.assert_equals(ordered_count(inp), exp)
test.describe("Random Tests")
def random_tests():
from string import (
ascii_letters,
punctuation,
digits
)
from collections import (
OrderedDict,
Counter
)
from random import (
randint,
choice
)
class _OrderedCounter(Counter, OrderedDict):
pass
def reference(seq):
return list(_OrderedCounter(seq).items())
CHARS = "".join((" ", ascii_letters, punctuation, digits))
for _ in range(100):
test_case = "".join(choice(CHARS) for _ in range(randint(1, 1000)))
test.assert_equals(ordered_count(test_case), reference(test_case))
random_tests()
|