def main(): # grind to look for errors GRINDS = 10000 MAX_POWER = 20 for i in xrange(GRINDS): power_d = random.randint(0,MAX_POWER-2) belt_a = [random.randint(1,1000) for j in xrange(power_d)] belt_b = [random.randint(1,1000) for j in xrange(MAX_POWER-2-power_d)] h = Handle(belt_a[:], belt_b[:], MAX_POWER) max_sum = sum(sorted(belt_a + belt_b, reverse=True)[:2]) poor_sum_msgs = [] poor_sum_r = [] try: h.run() if (h.sum() < max_sum): poor_sum_msgs.append(\ "%d < %d: %s, %s" % (h.sum(), max_sum, belt_a, belt_b)) poor_sum_r.append("Report %d" % len(poor_sum_msgs)) poor_sum_r.append("=====") poor_sum_r.extend(h.msgs) except: print '\n'.join(h.report()) raise print "POOR SUMS @MAX_POWER: (%d of %d)" % (len(poor_sum_msgs), GRINDS) for line in poor_sum_msgs[:100]: print line # for line in poor_sum_r[:200]: # print line unittest.main()