This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
import pytest
|
||||
from itertools import count
|
||||
import sys
|
||||
import os
|
||||
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
|
||||
from slic.utils.xrange import *
|
||||
|
||||
|
||||
def is_count_iterator(obj):
|
||||
return isinstance(obj, type(count()))
|
||||
|
||||
@pytest.mark.parametrize("args, kwargs, expected", [
|
||||
((10,), {}, list(range(10))), # xrange(10)
|
||||
((0, 10), {}, list(range(0, 10))), # xrange(0, 10)
|
||||
((0, 10, 2), {}, list(range(0, 10, 2))), # xrange(0, 10, 2)
|
||||
((10,), {"step": 2}, list(range(0, 10, 2))), # xrange(10, step=2)
|
||||
])
|
||||
def test_xrange_finite(args, kwargs, expected):
|
||||
assert list(xrange(*args, **kwargs)) == expected
|
||||
|
||||
@pytest.mark.parametrize("args, kwargs, expected_repr", [
|
||||
((), {}, repr(count(0))), # xrange()
|
||||
((), {"step": 2}, repr(count(0, 2))), # xrange(step=2)
|
||||
])
|
||||
def test_xrange_infinite(args, kwargs, expected_repr):
|
||||
# Only test first few elements to avoid infinite loop
|
||||
result = xrange(*args, **kwargs)
|
||||
assert is_count_iterator(result)
|
||||
for i, val in zip(range(20), result):
|
||||
assert val == i * kwargs.get("step", 1)
|
||||
|
||||
@pytest.mark.parametrize("args", [
|
||||
(1, 2, 3, 4), # too many positional arguments
|
||||
])
|
||||
def test_xrange_too_many_args(args):
|
||||
with pytest.raises(TypeError, match="xrange takes from 2 to 3 positional arguments"):
|
||||
xrange(*args)
|
||||
Reference in New Issue
Block a user