def search(server): """yields a stream of ledger numbers that match the given condition.""" condition = lambda number: args.condition(server, number) ledgers = server.ledgers if args.binary: try: position = search.first if args.position == 'first' else search.last yield search.binary_search( ledgers[0], ledgers[-1], condition, position) except: log.fatal('no ledgers matching condition "%s".' % condition, file=sys.stderr) else: for x in search.linear_search(ledgers, condition): yield x
def test_binary_last(self): self.assertequals(binary_search(10, 20, self.condition, last), 14) self.assertequals(binary_search(0, 14, self.condition, last), 14) self.assertequals(binary_search(14, 14, self.condition, last), 14) self.assertequals(binary_search(14, 15, self.condition, last), 14) self.assertequals(binary_search(13, 15, self.condition, last), 14)
def test_binary_first(self): self.assertequals(binary_search(0, 14, self.condition, first), 10) self.assertequals(binary_search(10, 19, self.condition, first), 10) self.assertequals(binary_search(14, 14, self.condition, first), 14) self.assertequals(binary_search(14, 15, self.condition, first), 14) self.assertequals(binary_search(13, 15, self.condition, first), 13)