python-benedict/tests/core/test_invert.py

92 lines
1.9 KiB
Python

# -*- coding: utf-8 -*-
from benedict.core import invert as _invert
import unittest
class invert_test_case(unittest.TestCase):
def test_invert_with_unique_values(self):
i = {
'a': 1,
'b': 2,
'c': 3,
'd': 4,
'e': 5,
}
o = _invert(i)
r = {
1: ['a'],
2: ['b'],
3: ['c'],
4: ['d'],
5: ['e'],
}
self.assertEqual(o, r)
def test_invert_with_flat_unique_values(self):
i = {
'a': 1,
'b': 2,
'c': 3,
'd': 4,
'e': 5,
}
o = _invert(i, flat=True)
r = {
1: 'a',
2: 'b',
3: 'c',
4: 'd',
5: 'e',
}
self.assertEqual(o, r)
def test_invert_with_multiple_values(self):
i = {
'a': 1,
'b': 2,
'c': 3,
'd': 1,
'e': 2,
'f': 3,
}
o = _invert(i)
self.assertTrue('a' and 'd' in o[1])
self.assertTrue('b' and 'e' in o[2])
self.assertTrue('c' and 'f' in o[3])
def test_invert_with_list_values(self):
i = {
'a': ['x', 'y', 'z'],
'b': ['c', 'd', 'e'],
}
o = _invert(i)
r = {
'x': ['a'],
'y': ['a'],
'z': ['a'],
'c': ['b'],
'd': ['b'],
'e': ['b'],
}
self.assertEqual(o, r)
self.assertEqual(_invert(o), i)
def test_invert_with_tuple_values(self):
i = {
'a': ('x', 'y', 'z', ),
'b': ('c', 'd', 'e', ),
}
o = _invert(i)
r = {
'x': ['a', ],
'y': ['a', ],
'z': ['a', ],
'c': ['b', ],
'd': ['b', ],
'e': ['b', ],
}
self.assertEqual(o, r)