import random
import unittest
from example import count_pairs


class HashTests(unittest.TestCase):
    def test_duplicates_and_self(self):
        self.assertEqual(count_pairs([2, 2, 2], 4), 3)
        self.assertEqual(count_pairs([4], 8), 0)
        self.assertEqual(count_pairs([], 0), 0)

    def test_random_against_quadratic(self):
        rng = random.Random(7)
        for _ in range(200):
            values = [rng.randrange(-4, 5) for _ in range(rng.randrange(15))]
            target = rng.randrange(-8, 9)
            expected = sum(values[i] + values[j] == target
                           for i in range(len(values))
                           for j in range(i + 1, len(values)))
            self.assertEqual(count_pairs(values, target), expected)


if __name__ == '__main__':
    unittest.main()
