Completed
Branch master (87ccc1)
by Chris
10:18
created

tests.distance.test_distance_mra   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 94
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 46
dl 0
loc 94
rs 10
c 0
b 0
f 0
wmc 3
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_distance.mra.
20
21
This module contains unit tests for abydos.distance.mra
22
"""
23
24
from __future__ import division, unicode_literals
25
26
import unittest
27
28
from abydos.distance.mra import dist_mra, mra_compare, sim_mra
29
30
31
class MraTestCases(unittest.TestCase):
32
    """Test MRA functions.
33
34
    abydos.distance.mra_compare, .sim_mra & .dist_mra
35
    """
36
37
    def test_mra_compare(self):
38
        """Test abydos.distance.mra_compare."""
39
        self.assertEqual(mra_compare('', ''), 6)
40
        self.assertEqual(mra_compare('a', 'a'), 6)
41
        self.assertEqual(mra_compare('abcdefg', 'abcdefg'), 6)
42
        self.assertEqual(mra_compare('abcdefg', ''), 0)
43
        self.assertEqual(mra_compare('', 'abcdefg'), 0)
44
45
        # https://en.wikipedia.org/wiki/Match_rating_approach
46
        self.assertEqual(mra_compare('Byrne', 'Boern'), 5)
47
        self.assertEqual(mra_compare('Smith', 'Smyth'), 5)
48
        self.assertEqual(mra_compare('Catherine', 'Kathryn'), 4)
49
50
        self.assertEqual(mra_compare('ab', 'abcdefgh'), 0)
51
        self.assertEqual(mra_compare('ab', 'ac'), 5)
52
        self.assertEqual(mra_compare('abcdefik', 'abcdefgh'), 3)
53
        self.assertEqual(mra_compare('xyz', 'abc'), 0)
54
55
    def test_sim_mra(self):
56
        """Test abydos.distance.sim_mra."""
57
        self.assertEqual(sim_mra('', ''), 1)
58
        self.assertEqual(sim_mra('a', 'a'), 1)
59
        self.assertEqual(sim_mra('abcdefg', 'abcdefg'), 1)
60
        self.assertEqual(sim_mra('abcdefg', ''), 0)
61
        self.assertEqual(sim_mra('', 'abcdefg'), 0)
62
63
        # https://en.wikipedia.org/wiki/Match_rating_approach
64
        self.assertEqual(sim_mra('Byrne', 'Boern'), 5/6)
65
        self.assertEqual(sim_mra('Smith', 'Smyth'), 5/6)
66
        self.assertEqual(sim_mra('Catherine', 'Kathryn'), 4/6)
67
68
        self.assertEqual(sim_mra('ab', 'abcdefgh'), 0)
69
        self.assertEqual(sim_mra('ab', 'ac'), 5/6)
70
        self.assertEqual(sim_mra('abcdefik', 'abcdefgh'), 3/6)
71
        self.assertEqual(sim_mra('xyz', 'abc'), 0)
72
73
    def test_dist_mra(self):
74
        """Test abydos.distance.dist_mra."""
75
        self.assertEqual(dist_mra('', ''), 0)
76
        self.assertEqual(dist_mra('a', 'a'), 0)
77
        self.assertEqual(dist_mra('abcdefg', 'abcdefg'), 0)
78
        self.assertEqual(dist_mra('abcdefg', ''), 1)
79
        self.assertEqual(dist_mra('', 'abcdefg'), 1)
80
81
        # https://en.wikipedia.org/wiki/Match_rating_approach
82
        self.assertAlmostEqual(dist_mra('Byrne', 'Boern'), 1/6)
83
        self.assertAlmostEqual(dist_mra('Smith', 'Smyth'), 1/6)
84
        self.assertAlmostEqual(dist_mra('Catherine', 'Kathryn'), 2/6)
85
86
        self.assertEqual(dist_mra('ab', 'abcdefgh'), 1)
87
        self.assertAlmostEqual(dist_mra('ab', 'ac'), 1/6)
88
        self.assertAlmostEqual(dist_mra('abcdefik', 'abcdefgh'), 3/6)
89
        self.assertEqual(dist_mra('xyz', 'abc'), 1)
90
91
92
if __name__ == '__main__':
93
    unittest.main()
94