Migration from old pyutilz package name (which, in turn, came from
[pyutils.git] / tests / dict_utils_test.py
1 #!/usr/bin/env python3
2
3 # © Copyright 2021-2022, Scott Gasch
4
5 """dict_utils unittest."""
6
7 import unittest
8
9 from pyutils import dict_utils as du
10 from pyutils import unittest_utils  # Needed for --unittests_ignore_perf flag
11
12
13 class TestDictUtils(unittest.TestCase):
14     def test_init_or_inc(self):
15         d = {}
16         du.init_or_inc(d, 'a')
17         du.init_or_inc(d, 'b')
18         du.init_or_inc(d, 'a')
19         du.init_or_inc(d, 'b')
20         du.init_or_inc(d, 'c')
21         du.init_or_inc(d, 'c')
22         du.init_or_inc(d, 'd')
23         du.init_or_inc(d, 'e')
24         du.init_or_inc(d, 'a')
25         du.init_or_inc(d, 'b')
26         e = {'a': 3, 'b': 3, 'c': 2, 'd': 1, 'e': 1}
27         self.assertEqual(d, e)
28
29     def test_shard_coalesce(self):
30         d = {'a': 3, 'b': 3, 'c': 2, 'd': 1, 'e': 1}
31         shards = du.shard(d, 2)
32         merged = du.coalesce(shards)
33         self.assertEqual(d, merged)
34
35     def test_item_with_max_value(self):
36         d = {'a': 4, 'b': 3, 'c': 2, 'd': 1, 'e': 1}
37         self.assertEqual('a', du.item_with_max_value(d)[0])
38         self.assertEqual(4, du.item_with_max_value(d)[1])
39         self.assertEqual('a', du.key_with_max_value(d))
40         self.assertEqual(4, du.max_value(d))
41
42     def test_item_with_min_value(self):
43         d = {'a': 4, 'b': 3, 'c': 2, 'd': 1, 'e': 0}
44         self.assertEqual('e', du.item_with_min_value(d)[0])
45         self.assertEqual(0, du.item_with_min_value(d)[1])
46         self.assertEqual('e', du.key_with_min_value(d))
47         self.assertEqual(0, du.min_value(d))
48
49     def test_min_max_key(self):
50         d = {'a': 4, 'b': 3, 'c': 2, 'd': 1, 'e': 0}
51         self.assertEqual('a', du.min_key(d))
52         self.assertEqual('e', du.max_key(d))
53
54
55 if __name__ == '__main__':
56     unittest.main()