import random
import unittest
from example import merge_sort


class SortTests(unittest.TestCase):
    def test_stability(self):
        rows = [(2, 'a'), (1, 'x'), (2, 'b')]
        self.assertEqual(merge_sort(rows, key=lambda row: row[0]),
                         [(1, 'x'), (2, 'a'), (2, 'b')])

    def test_random_and_not_mutating(self):
        rng = random.Random(9)
        for n in range(80):
            values = [rng.randint(-20, 20) for _ in range(n)]
            original = values[:]
            self.assertEqual(merge_sort(values), sorted(values))
            self.assertEqual(values, original)


if __name__ == '__main__':
    unittest.main()
