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_linear_empty(self): self.assertequals(list(linear_search(range(1, 4), self.condition)), [])
def test_linear_partial(self): self.assertequals(list(linear_search(range(8, 14), self.condition)), [10, 11, 12, 13]) self.assertequals(list(linear_search(range(11, 14), self.condition)), [11, 12, 13]) self.assertequals(list(linear_search(range(12, 18), self.condition)), [12, 13, 14])
def test_linear_full(self): self.assertequals(list(linear_search(range(21), self.condition)), [10, 11, 12, 13, 14])