else:
return -1
- def finalize(self, (share_count, weights, total_weight, total_donation_weight)):
+ def finalize(self, (share_count, weights, total_weight, total_donation_weight), (max_shares, desired_weight)):
+ assert share_count <= max_shares and total_weight <= desired_weight
+ assert share_count == max_shares or total_weight == desired_weight
return weights, total_weight, total_donation_weight
class SumSkipList(forest.TrackerSkipList):
def judge(self, (result, count), (desired_count,)):
return cmp(count, desired_count)
- def finalize(self, (result, count)):
+ def finalize(self, (result, count), (desired_count,)):
+ assert count == desired_count
return result
else:
return -1
- def finalize(self, (dist, hash)):
+ def finalize(self, (dist, hash), (n,)):
+ assert dist == n
return hash
def forget_item(self, item):
self.skips.pop(item, None)
- def __call__(self, start, *args, **kwargs):
+ def __call__(self, start, *args):
updates = {}
pos = start
sol = self.initial_solution(start, args)
if self.judge(sol, args) == 0:
- return self.finalize(sol)
+ return self.finalize(sol, args)
while True:
if pos not in self.skips:
self.skips[pos] = math.geometric(self.p), [(self.previous(pos), self.get_delta(pos))]
decision = self.judge(sol_if, args)
#print pos, sol, jump, delta, sol_if, decision
if decision == 0:
- return self.finalize(sol_if)
+ return self.finalize(sol_if, args)
elif decision < 0:
sol = sol_if
break