Test Failed
Push — master ( d1b33f...9f504a )
by Chris
15:58
created

QgramTestCases.test_qgram_intersections()   A

Complexity

Conditions 1

Size

Total Lines 17
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 15
nop 1
dl 0
loc 17
rs 9.65
c 0
b 0
f 0
1
# -*- coding: utf-8 -*-
2
3
# Copyright 2014-2018 by Christopher C. Little.
4
# This file is part of Abydos.
5
#
6
# Abydos is free software: you can redistribute it and/or modify
7
# it under the terms of the GNU General Public License as published by
8
# the Free Software Foundation, either version 3 of the License, or
9
# (at your option) any later version.
10
#
11
# Abydos is distributed in the hope that it will be useful,
12
# but WITHOUT ANY WARRANTY; without even the implied warranty of
13
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
# GNU General Public License for more details.
15
#
16
# You should have received a copy of the GNU General Public License
17
# along with Abydos. If not, see <http://www.gnu.org/licenses/>.
18
19
"""abydos.tests.test_qgram.
20
21
This module contains unit tests for abydos.qgram
22
"""
23
24
from __future__ import unicode_literals
25
26
import unittest
27
28
from abydos.qgram import QGrams
29
30
31
class QgramTestCases(unittest.TestCase):
32
    """Test abydos.qgram."""
33
34
    def test_qgrams(self):
35
        """Test abydos.qgram.QGrams."""
36
        self.assertEqual(sorted(QGrams('').elements()), [])
37
        self.assertEqual(sorted(QGrams('a', 2).elements()), [])
38
        self.assertEqual(sorted(QGrams('NELSON', 0).elements()), [])
39
        self.assertEqual(sorted(QGrams('NELSON', -1).elements()), [])
40
41
        self.assertEqual(sorted(QGrams('NELSON', 3).elements()),
42
                         sorted(['$$N', '$NE', 'NEL', 'ELS', 'LSO', 'SON',
43
                                 'ON#', 'N##']))
44
        self.assertEqual(sorted(QGrams('NELSON', 7).elements()), sorted([]))
45
46
        # http://www.sound-ex.com/alternative_qgram.htm
47
        self.assertEqual(sorted(QGrams('NELSON').elements()),
48
                         sorted(['$N', 'NE', 'EL', 'LS', 'SO', 'ON', 'N#']))
49
        self.assertEqual(sorted(QGrams('NEILSEN').elements()),
50
                         sorted(['$N', 'NE', 'EI', 'IL', 'LS', 'SE', 'EN',
51
                                 'N#']))
52
        self.assertEqual(sorted(QGrams('NELSON', start_stop='').elements()),
53
                         sorted(['NE', 'EL', 'LS', 'SO', 'ON']))
54
        self.assertEqual(sorted(QGrams('NEILSEN', start_stop='').elements()),
55
                         sorted(['NE', 'EI', 'IL', 'LS', 'SE', 'EN']))
56
57
        # qval=(1,2)
58
        self.assertEqual(sorted(QGrams('NELSON', qval=(1, 2)).elements()),
59
                         sorted(['$N', 'E', 'EL', 'L', 'LS', 'N', 'N', 'N#',
60
                                 'NE', 'O', 'ON', 'S', 'SO']))
61
        self.assertEqual(sorted(QGrams('NELSON', qval=(2, 1)).elements()),
62
                         sorted(['$N', 'E', 'EL', 'L', 'LS', 'N', 'N', 'N#',
63
                                 'NE', 'O', 'ON', 'S', 'SO']))
64
        self.assertEqual(sorted(QGrams('NELSON', qval=range(3)).elements()),
65
                         sorted(['$N', 'E', 'EL', 'L', 'LS', 'N', 'N', 'N#',
66
                                 'NE', 'O', 'ON', 'S', 'SO']))
67
        self.assertEqual(QGrams('NELSON', qval=(1,2)).count(), 13)
68
69
        # skip=(1,2)
70
        self.assertEqual(sorted(QGrams('NELSON', skip=(2,1,0)).elements()),
71
                         sorted(['$E', '$L', '$N', 'EL', 'EO', 'ES', 'LN',
72
                                 'LO', 'LS', 'N', 'N', 'N#', 'NE', 'NL', 'NS',
73
                                 'O', 'O#', 'ON', 'S#', 'SN', 'SO']))
74
        self.assertEqual(sorted(QGrams('NELSON', skip=(2,1,0)).elements()),
75
                         sorted(['$E', '$L', '$N', 'EL', 'EO', 'ES', 'LN',
76
                                 'LO', 'LS', 'N', 'N', 'N#', 'NE', 'NL', 'NS',
77
                                 'O', 'O#', 'ON', 'S#', 'SN', 'SO']))
78
        self.assertEqual(sorted(QGrams('NELSON', skip=range(3)).elements()),
79
                         sorted(['$E', '$L', '$N', 'EL', 'EO', 'ES', 'LN',
80
                                 'LO', 'LS', 'N', 'N', 'N#', 'NE', 'NL', 'NS',
81
                                 'O', 'O#', 'ON', 'S#', 'SN', 'SO']))
82
        self.assertEqual(QGrams('NELSON', skip=(0, 1, 2)).count(), 21)
83
84
    def test_qgram_intersections(self):
85
        """Test abydos.qgram.QGrams intersections."""
86
        self.assertEqual(sorted(QGrams('NELSON') & QGrams('')), [])
87
        self.assertEqual(sorted(QGrams('') & QGrams('NEILSEN')), [])
88
        self.assertEqual(sorted(QGrams('NELSON') & QGrams('NEILSEN')),
89
                         sorted(['$N', 'NE', 'LS', 'N#']))
90
        self.assertEqual(sorted(QGrams('NELSON') & QGrams('NOSLEN')),
91
                         sorted(['$N', 'N#']))
92
        self.assertEqual(sorted(QGrams('NAIL') & QGrams('LIAN')), [])
93
94
        self.assertEqual(sorted(QGrams('NELSON', start_stop='') &
95
                                QGrams('NEILSEN', start_stop='')),
96
                         sorted(['NE', 'LS']))
97
        self.assertEqual(sorted(QGrams('NELSON', start_stop='') &
98
                                QGrams('NOSLEN', start_stop='')), [])
99
        self.assertEqual(sorted(QGrams('NAIL', start_stop='') &
100
                                QGrams('LIAN', start_stop='')), [])
101
102
    def test_qgram_counts(self):
103
        """Test abydos.qgram.QGrams counts."""
104
        self.assertEqual(QGrams('').count(), 0)
105
        self.assertEqual(len(QGrams('').ordered_list), 0)
106
107
        self.assertEqual(QGrams('NEILSEN').count(), 8)
108
        self.assertEqual(QGrams('NELSON').count(), 7)
109
        self.assertEqual(QGrams('NEILSEN', start_stop='').count(), 6)
110
        self.assertEqual(QGrams('NELSON', start_stop='').count(), 5)
111
112
        self.assertEqual(len(QGrams('NEILSEN').ordered_list), 8)
113
        self.assertEqual(len(QGrams('NELSON').ordered_list), 7)
114
        self.assertEqual(len(QGrams('NEILSEN', start_stop='').ordered_list), 6)
115
        self.assertEqual(len(QGrams('NELSON', start_stop='').ordered_list), 5)
116
117
118
if __name__ == '__main__':
119
    unittest.main()
120