Mercurial > hg
diff tests/test-dicthelpers.py @ 18820:a45e44d76c81
mercurial: implement diff and join for dicts
Given two dicts, diff returns a dict containing all the keys that are present
in one dict but not the other, or whose values are different between the
dicts. The values are pairs of the values from the dicts, with missing values
being represented as an optional argument, defaulting to None.
Given two dicts, join performs what is known as an outer join in relational
database land: it returns a dict containing all the keys across both dicts.
The values are pairs as above, except they aren't compared to see if they're
the same.
author | Siddharth Agarwal <sid0@fb.com> |
---|---|
date | Mon, 25 Mar 2013 17:40:39 -0700 |
parents | |
children | ed46c2b98b0d |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-dicthelpers.py Mon Mar 25 17:40:39 2013 -0700 @@ -0,0 +1,53 @@ +from mercurial.dicthelpers import diff, join +import unittest +import silenttestrunner + +class testdicthelpers(unittest.TestCase): + def test_dicthelpers(self): + # empty dicts + self.assertEqual(diff({}, {}), {}) + self.assertEqual(join({}, {}), {}) + + d1 = {} + d1['a'] = 'foo' + d1['b'] = 'bar' + d1['c'] = 'baz' + + # same identity + self.assertEqual(diff(d1, d1), {}) + self.assertEqual(join(d1, d1), {'a': ('foo', 'foo'), + 'b': ('bar', 'bar'), + 'c': ('baz', 'baz')}) + + # vs empty + self.assertEqual(diff(d1, {}), {'a': ('foo', None), + 'b': ('bar', None), + 'c': ('baz', None)}) + self.assertEqual(diff(d1, {}), {'a': ('foo', None), + 'b': ('bar', None), + 'c': ('baz', None)}) + + d2 = {} + d2['a'] = 'foo2' + d2['b'] = 'bar' + d2['d'] = 'quux' + + self.assertEqual(diff(d1, d2), {'a': ('foo', 'foo2'), + 'c': ('baz', None), + 'd': (None, 'quux')}) + self.assertEqual(join(d1, d2), {'a': ('foo', 'foo2'), + 'b': ('bar', 'bar'), + 'c': ('baz', None), + 'd': (None, 'quux')}) + + # with default argument + self.assertEqual(diff(d1, d2, 123), {'a': ('foo', 'foo2'), + 'c': ('baz', 123), + 'd': (123, 'quux')}) + self.assertEqual(join(d1, d2, 456), {'a': ('foo', 'foo2'), + 'b': ('bar', 'bar'), + 'c': ('baz', 456), + 'd': (456, 'quux')}) + +if __name__ == '__main__': + silenttestrunner.main(__name__)