Completed
Push — master ( f7faf9...ef8477 )
by Chris
12:37
created

FingerprintTestCases.test_fingerprint()   A

Complexity

Conditions 2

Size

Total Lines 5
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 4
nop 1
dl 0
loc 5
rs 10
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_fingerprint.
20
21
This module contains unit tests for abydos.fingerprint
22
"""
23
24
from __future__ import unicode_literals
25
26
import unittest
27
28
import abydos.phonetic as phonetic
29
from abydos.fingerprint import fingerprint, omission_key, \
30
    phonetic_fingerprint, qgram_fingerprint, skeleton_key
31
32
from six.moves import range
33
34
35
NIALL = ('Niall', 'Neal', 'Neil', 'Njall', 'Njáll', 'Nigel', 'Neel', 'Nele',
36
         'Nigelli', 'Nel', 'Kneale', 'Uí Néill', 'O\'Neill', 'MacNeil',
37
         'MacNele', 'Niall Noígíallach')
38
39
40
class FingerprintTestCases(unittest.TestCase):
41
    """Test fingerprint functions.
42
43
    abydos.clustering.fingerprint, abydos.clustering.qgram_fingerprint, &
44
    abydos.clustering.phonetic_fingerprint
45
    """
46
47
    _testset = ('À noite, vovô Kowalsky vê o ímã cair no pé do pingüim \
48
queixoso e vovó põe açúcar no chá de tâmaras do jabuti feliz.', )
49
    _anssetw = ('a acucar cair cha de do e feliz ima jabuti kowalsky no noite \
50
o pe pinguim poe queixoso tamaras ve vovo', )
51
    _anssetq2 = ('abacadaialamanarasbucachcudedoeaedeieleoetevfeguhaifiminirit\
52
ixizjakokylilsmamqngnoocoeoiojokoposovowpepipoqurarnsdsksotatetiucueuiutvevowa\
53
xoyv', )
54
    _anssetq1 = ('abcdefghijklmnopqrstuvwxyz', )
55
56
    def test_fingerprint(self):
57
        """Test abydos.clustering.fingerprint."""
58
        self.assertEqual(fingerprint(''), '')
59
        for i in range(len(self._testset)):
60
            self.assertEqual(fingerprint(self._testset[i]), self._anssetw[i])
61
62
    def test_qgram_fingerprint(self):
63
        """Test abydos.clustering.qgram_fingerprint."""
64
        self.assertEqual(qgram_fingerprint(''), '')
65
        for i in range(len(self._testset)):
66
            self.assertEqual(qgram_fingerprint(self._testset[i], 1),
67
                             self._anssetq1[i])
68
            self.assertEqual(qgram_fingerprint(self._testset[i], 2),
69
                             self._anssetq2[i])
70
            self.assertEqual(qgram_fingerprint(self._testset[i]),
71
                             self._anssetq2[i])
72
73
        qgram_fp_niall = ('aliallni', 'aleane', 'eiilne', 'aljallnj',
74
                          'aljallnj', 'elgeigni', 'eeelne', 'ellene',
75
                          'elgeiglillni', 'elne', 'aleaknlene', 'eiilinllneui',
76
                          'eiilllneon', 'accneiilmane', 'accnellemane',
77
                          'acalchgiiaiglalllnninooi')
78
        for i in range(len(NIALL)):
79
            self.assertEqual(qgram_fingerprint(NIALL[i]), qgram_fp_niall[i])
80
81
    def test_phonetic_fingerprint(self):
82
        """Test abydos.clustering.phonetic_fingerprint."""
83
        self.assertEqual(phonetic_fingerprint(''), '')
84
85
        self.assertEqual(phonetic_fingerprint(' '.join(NIALL)),
86
                         'a anl mknl njl nklk nl')
87
        self.assertEqual(phonetic_fingerprint(' '.join(NIALL),
88
                                              phonetic.phonet),
89
                         'knile makneil maknele neil nel nele nial nigeli ' +
90
                         'nigl nil noigialach oneil ui')
91
        self.assertEqual(phonetic_fingerprint(' '.join(NIALL),
92
                                              phonetic.soundex),
93
                         'k540 m254 n240 n242 n400 o540 u000')
94
95
96
class SPEEDCOPTestCases(unittest.TestCase):
97
    """Test SPEEDCOP functions.
98
99
    abydos.clustering.skeleton_key & abydos.clustering.omission_key
100
    """
101
102
    def test_skeleton_key(self):
103
        """Test abydos.clustering.skeleton_key."""
104
        self.assertEqual(skeleton_key(''), '')
105
106
        # http://dl.acm.org/citation.cfm?id=358048
107
        self.assertEqual(skeleton_key('chemogenic'), 'CHMGNEOI')
108
        self.assertEqual(skeleton_key('chemomagnetic'), 'CHMGNTEOAI')
109
        self.assertEqual(skeleton_key('chemcal'), 'CHMLEA')
110
        self.assertEqual(skeleton_key('chemcial'), 'CHMLEIA')
111
        self.assertEqual(skeleton_key('chemical'), 'CHMLEIA')
112
        self.assertEqual(skeleton_key('chemicial'), 'CHMLEIA')
113
        self.assertEqual(skeleton_key('chimical'), 'CHMLIA')
114
        self.assertEqual(skeleton_key('chemiluminescence'), 'CHMLNSEIU')
115
        self.assertEqual(skeleton_key('chemiluminescent'), 'CHMLNSTEIU')
116
        self.assertEqual(skeleton_key('chemicals'), 'CHMLSEIA')
117
        self.assertEqual(skeleton_key('chemically'), 'CHMLYEIA')
118
119
    def test_omission_key(self):
120
        """Test abydos.clustering.omission_key."""
121
        self.assertEqual(omission_key(''), '')
122
123
        # http://dl.acm.org/citation.cfm?id=358048
124
        self.assertEqual(omission_key('microelectronics'), 'MCLNTSRIOE')
125
        self.assertEqual(omission_key('circumstantial'), 'MCLNTSRIUA')
126
        self.assertEqual(omission_key('luminescent'), 'MCLNTSUIE')
127
        self.assertEqual(omission_key('multinucleate'), 'MCLNTUIEA')
128
        self.assertEqual(omission_key('multinucleon'), 'MCLNTUIEO')
129
        self.assertEqual(omission_key('cumulene'), 'MCLNUE')
130
        self.assertEqual(omission_key('luminance'), 'MCLNUIAE')
131
        self.assertEqual(omission_key('coelomic'), 'MCLOEI')
132
        self.assertEqual(omission_key('molecule'), 'MCLOEU')
133
        self.assertEqual(omission_key('cameral'), 'MCLRAE')
134
        self.assertEqual(omission_key('caramel'), 'MCLRAE')
135
        self.assertEqual(omission_key('maceral'), 'MCLRAE')
136
        self.assertEqual(omission_key('lacrimal'), 'MCLRAI')
137
138
139
if __name__ == '__main__':
140
    unittest.main()
141