test_double_substring   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 83
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 58
dl 0
loc 83
rs 10
c 0
b 0
f 0
wmc 6

2 Methods

Rating   Name   Duplication   Size   Complexity  
A Tests.test_Basics() 0 3 2
A Tests.test_Extra() 0 3 2

2 Functions

Rating   Name   Duplication   Size   Complexity  
A test_non_overlapping_range() 0 25 1
A test_find_repeated_chars() 0 16 1
1
import unittest
2
3
from double_substring import (
4
    double_substring,
5
    find_repeated_chars,
6
    non_overlapping_range,
7
)
8
9
10
def test_find_repeated_chars():
11
    assert find_repeated_chars('aaabbbcc') == {
12
        'a': [0, 1, 2],
13
        'b': [3, 4, 5],
14
        'c': [6, 7],
15
    }
16
17
    assert find_repeated_chars('ababcbac') == {
18
        'a': [0, 2, 6],
19
        'b': [1, 3, 5],
20
        'c': [4, 7],
21
    }
22
23
    assert find_repeated_chars('aaaa') == {'a': [0, 1, 2, 3]}
24
25
    assert find_repeated_chars('abc') == {}
26
27
28
def test_non_overlapping_range():
29
    assert non_overlapping_range([0, 1, 2], 'aaabbbcc') == [
30
        (0, 1, 1),
31
        (0, 2, 1),
32
        (0, 2, 2),
33
        (1, 2, 1),
34
    ]
35
36
    assert non_overlapping_range([0, 2, 6], 'ababcbac') == [
37
        (0, 2, 1),
38
        (0, 2, 2),
39
        (0, 6, 1),
40
        (0, 6, 2),
41
        (2, 6, 1),
42
        (2, 6, 2),
43
    ]
44
45
    assert non_overlapping_range([0, 1, 2, 3], 'aaaa') == [
46
        (0, 1, 1),
47
        (0, 2, 1),
48
        (0, 2, 2),
49
        (0, 3, 1),
50
        (1, 2, 1),
51
        (1, 3, 1),
52
        (2, 3, 1),
53
    ]
54
55
56
class Tests(unittest.TestCase):
57
    TESTS = {
58
        "Basics": [
59
            {"input": "aaaa", "answer": 2},
60
            {"input": "abc", "answer": 0},
61
            {"input": "aghtfghkofgh", "answer": 3},
62
        ],
63
        "Extra": [
64
            {"input": "", "answer": 0},
65
            {"input": "abababaab", "answer": 3},
66
            {"input": "arefhjaref!!", "answer": 4},
67
            {"input": "aa", "answer": 1},
68
            {"input": "aaaaa", "answer": 2},
69
        ],
70
    }
71
72
    def test_Basics(self):
73
        for i in self.TESTS['Basics']:
74
            assert double_substring(i['input']) == i['answer'], i['input']
75
76
    def test_Extra(self):
77
        for i in self.TESTS['Extra']:
78
            assert double_substring(i['input']) == i['answer'], i['input']
79
80
81
if __name__ == "__main__":  # pragma: no cover
82
    unittest.main()
83