def test_commutative(self):
        m1 = {0: [randrange(5) for i in range(20)]}
        m2 = {0: [randrange(5) for i in range(20)]}

        m3 = add_maps_mod_2(m1, m2)
        m4 = add_maps_mod_2(m2, m1)

        self.assertSetEqual(set(m3[0]), set(m4[0]))
    def test_multiple_in_second(self):
        m1 = {0: [3, 3, 3], 1: [2, 2], 2: [4, 4, 4, 4]}
        m2 = {0: [3], 1: [2], 2: [4]}

        m3 = add_maps_mod_2(m2, m1)

        self.assertDictEqual(m3, {0: [], 1: [2], 2: [4]})
    def test_multiple_in_first(self):
        m1 = {0: [3, 3, 3], 1: [2, 2], 2: [4, 4, 4, 4]}
        m2 = {0: [3], 1: [2], 2: [4]}

        m3 = add_maps_mod_2(m1, m2)

        self.assertDictEqual(m3, {0: [], 1: [2], 2: [4]})
    def test_originals_intact(self):
        m1 = {0: [0, 1], 1: [0, 3], 2: [5]}
        m2 = {0: [0, 1], 1: [0, 3], 2: [5]}

        m3 = add_maps_mod_2(m1, m2)

        self.assertDictEqual(m1, {0: [0, 1], 1: [0, 3], 2: [5]})
        self.assertDictEqual(m2, {0: [0, 1], 1: [0, 3], 2: [5]})
    def test_identical_simple_map(self):
        m1 = {0: [0, 1], 1: [0, 3], 2: [5]}

        self.assertFalse(any(add_maps_mod_2(m1, m1).itervalues()))