def test_solution1(self): votes = [("C1", "D1"), ("C1", "D1"), ("C1", "D2"), ("D2", "C1")] self.assertEqual(3, cvd.solution1(votes)) self.assertEqual(cvd.brute_force(votes), cvd.solution1(votes)) votes = [("C1", "D1"), ("C1", "D1"), ("C1", "D2"), ("D2", "C1"), ("D2", "C3")] self.assertEqual(3, cvd.solution1(votes)) self.assertEqual(cvd.brute_force(votes), cvd.solution1(votes)) votes = [ ("C1", "D1"), ("C1", "D1"), ("C1", "D1"), ("C1", "D1"), ("C1", "D1"), ("C1", "D1"), ("C1", "D2"), ("D2", "C1"), ("D2", "C3"), ("D3", "C3"), ] self.assertEqual(cvd.brute_force(votes), cvd.solution1(votes))
def test_solution_larger_scale(self): # generate a lot of votes, using gaussian distributions # run it X times with different sets every time X = 10 # number of votes. 15 factorial is sorta big, takes my wimpy mac a second or two N = 15 for _ in range(X): prefixes = ["C", "D"] votes = [] for i in range(N): lover = random.randint(0, 1) prefix1 = prefixes[lover] prefix2 = prefixes[int(not lover)] gauss1 = 1 + int(random.gauss(10, 3)) gauss2 = 1 + int(random.gauss(20, 5)) vote = ("%s%d" % (prefix1, gauss1), "%s%d" % (prefix2, gauss2)) votes.append(vote) sol = cvd.solution1(votes) bf = cvd.brute_force(votes) self.assertEqual(bf, sol)
def test_brute_force(self): votes = [("C1", "D1"), ("D1", "C1")] self.assertEqual(1, cvd.brute_force(votes)) votes = [("C1", "D1"), ("C1", "D1"), ("C1", "D2"), ("D2", "C1")] self.assertEqual(3, cvd.brute_force(votes))