We rely on >= 0 for setting the batch size to use (which must be valid), so it makes sense to make negative limits equal 0. This is similar to how asyncio.sleep(negative) sleeps 0 seconds, despite the fact that time.sleep(negative) fails.