'Speed checks should typically be very tolerant. Some machines are
faster than others, but the tests should still pass. These tests are
here to assure that certain effects that kill jedi performance are not
reintroduced to Jedi.'

def _check_speed(time_per_run, number=4, run_warm=True):

    def decorated(func):
        @functools.wraps(func)
        def wrapper(self):
            if run_warm:
                func(self)
            first = time.time()
            for i in range(number):
                func(self)
            single_time = ((time.time() - first) / number)
            message = ('speed    issue    %s,    %s' % (func, single_time))
            assert (single_time < time_per_run), message
        return wrapper
    return decorated
