'loop_until can be given fewer steps than it needs for the predicate to
return True. In that case, we raise ``LoopExceeded``.'

@capture_logging(None)
def test_fewer_steps_than_repeats(self, logger):

    results = ([False] * 5)
    steps = ([0.1] * 2)
    def predicate():
        return results.pop(0)
    clock = Clock()
    d = loop_until(clock, predicate, steps=steps)
    clock.advance(0.1)
    self.assertNoResult(d)
    clock.advance(0.1)
    self.assertEqual(str(self.failureResultOf(d).value), str(LoopExceeded(predicate, False)))
