def test_set_consecutive_before_eq():
	"""Test setting consecutive ranges to the same value."""
	rm = RangeMap({1: 'a', 2: 'b', 3: 'c'})
	print_underlying(rm)
	rm.set('b', 1, 2)
	print_underlying(rm)
	assert rm == RangeMap({1: 'b', 3: 'c'})
示例#2
0
def test_contains():
	"""Test __contains__."""
	assert 1 not in RangeMap()
	assert 1 in RangeMap(default_value=1)
	assert 1 in RangeMap({1: 'a'})
	assert 2 in RangeMap({1: 'a'})
	assert 0 not in RangeMap({1: 'a'})
def test_set_beg():
	"""Test setting the beginning."""
	rm = RangeMap()
	rm.set('a', stop=4)
	with pytest.raises(KeyError):
		rm[4]
	assert rm[3] == 'a'
def test_version_differences():
	"""Test python 2 and 3 differences."""
	rm = RangeMap({1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'})
	rm[3:] = 'a'
	assert rm == RangeMap({1: 'a', 2: 'b', 3: 'a'})
	del rm[1:2]
	assert rm == RangeMap({2: 'b', 3: 'a'})
def test_set_beg():
	"""Test setting the beginning."""
	rm = RangeMap()
	rm.set('a', stop=4)
	with pytest.raises(KeyError):
		rm[4]
	assert rm[3] == 'a'
def test_set_consecutive_before_eq():
	"""Test setting consecutive ranges to the same value."""
	rm = RangeMap({1: 'a', 2: 'b', 3: 'c'})
	print_underlying(rm)
	rm.set('b', 1, 2)
	print_underlying(rm)
	assert rm == RangeMap({1: 'b', 3: 'c'})
def test_break_up_existing_open_end_interval():
	"""Test breaking up an existing open interval at the end."""
	rm = RangeMap({1: 'a', 2: 'b'})
	rm.set('d', start=2, stop=2.5)
	assert rm[1] == 'a'
	assert rm[2] == 'd'
	assert rm[2.5] == 'b'
	assert rm[3] == 'b'
def test_break_up_existing_internal_interval():
	"""Test breaking up an existing interval."""
	rm = RangeMap({1: 'a', 2: 'b'})
	rm.set('d', start=1, stop=1.5)
	assert rm[1] == 'd'
	assert rm[1.5] == 'a'
	assert rm[2] == 'b'
	assert rm[3] == 'b'
def test_break_up_existing_open_end_interval():
	"""Test breaking up an existing open interval at the end."""
	rm = RangeMap({1: 'a', 2: 'b'})
	rm.set('d', start=2, stop=2.5)
	assert rm[1] == 'a'
	assert rm[2] == 'd'
	assert rm[2.5] == 'b'
	assert rm[3] == 'b'
def test_break_up_existing_internal_interval():
	"""Test breaking up an existing interval."""
	rm = RangeMap({1: 'a', 2: 'b'})
	rm.set('d', start=1, stop=1.5)
	assert rm[1] == 'd'
	assert rm[1.5] == 'a'
	assert rm[2] == 'b'
	assert rm[3] == 'b'
def test_set_closed_interval_end():
	"""Test setting a closed range on the end."""
	rm = RangeMap({1: 'a', 2: 'b'})
	rm.set('c', start=3, stop=4)
	assert rm[1] == 'a'
	assert rm[2] == 'b'
	assert rm[3] == 'c'
	assert rm[4] == 'b'
def test_set_closed_interval_end():
	"""Test setting a closed range on the end."""
	rm = RangeMap({1: 'a', 2: 'b'})
	rm.set('c', start=3, stop=4)
	assert rm[1] == 'a'
	assert rm[2] == 'b'
	assert rm[3] == 'c'
	assert rm[4] == 'b'
def test_clear():
	rm = RangeMap.from_iterable((
		(1, 2, 'a'),
		(4, 5, 'd'),
		(5, None, 'e'),
		))
	rm.clear()
	assert rm == RangeMap()
def test_dates():
	"""Test using dates."""
	rm = RangeMap()
	rm.set('b', datetime.date(1936, 12, 11))
	rm.set('a', datetime.date(1952, 2, 6))
	assert rm[datetime.date(1945, 1, 1)] == 'b'
	assert rm[datetime.date(1965, 4, 6)] == 'a'
	with pytest.raises(KeyError):
		rm[datetime.date(1900, 1, 1)]
def test_overwrite_multiple_internal():
	"""Test overwriting multiple adjoining intervals."""
	rm = RangeMap({1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'})
	rm.set('z', start=2, stop=5)
	assert rm[1] == 'a'
	assert rm[2] == 'z'
	assert rm[3] == 'z'
	assert rm[4] == 'z'
	assert rm[5] == 'e'
def test_overwrite_multiple_internal():
	"""Test overwriting multiple adjoining intervals."""
	rm = RangeMap({1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'})
	rm.set('z', start=2, stop=5)
	assert rm[1] == 'a'
	assert rm[2] == 'z'
	assert rm[3] == 'z'
	assert rm[4] == 'z'
	assert rm[5] == 'e'
def test_len():
	rm = RangeMap.from_iterable((
		(1, 2, 'a'),
		(4, 5, 'd'),
		(5, None, 'e'),
		))
	assert len(rm) == 3
	assert len(RangeMap(default_value='a')) == 1
	assert len(RangeMap()) == 0
	assert len(RangeMap(default_value=None)) == 1
def test_overwrite_all():
	"""Test overwriting the entire mapping."""
	rm = RangeMap({1: 'a', 2: 'b'})
	rm.set('z', start=0)
	with pytest.raises(KeyError):
		rm[-1]
	assert rm[0] == 'z'
	assert rm[1] == 'z'
	assert rm[2] == 'z'
	assert rm[3] == 'z'
def test_str():
    """Test __str__."""
    assert str(RangeMap()) == 'RangeMap()'
    rm = RangeMap(default_value='a')
    print_underlying(rm)
    assert str(rm) == "RangeMap((None, None): a)"
    assert str(RangeMap({1: 'b'})) == "RangeMap((1, None): b)"
    assert (str(
        RangeMap({1: 'b'},
                 default_value='a')) == "RangeMap((None, 1): a, (1, None): b)")
def test_delitem_beginning():
	"""Test RangeMap.__delitem__ at the beginning."""
	rm = RangeMap({1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'})
	if not is_py2:
		with pytest.raises(TypeError):
			del rm[2]
		with pytest.raises(ValueError):
			del rm[2:4:2]
	rm.delete(1, 2)
	assert rm == RangeMap({2: 'b', 3: 'c', 4: 'd', 5: 'e'})
def test_overwrite_all():
	"""Test overwriting the entire mapping."""
	rm = RangeMap({1: 'a', 2: 'b'})
	rm.set('z', start=0)
	with pytest.raises(KeyError):
		rm[-1]
	assert rm[0] == 'z'
	assert rm[1] == 'z'
	assert rm[2] == 'z'
	assert rm[3] == 'z'
def test_default_value():
	"""Test setting just a default value."""
	rm = RangeMap(default_value=None)
	print(rm)
	assert rm[1] is None
	assert rm[-2] is None
	rm.set('a', start=1)
	print(rm)
	assert rm[0] is None
	assert rm[1] == 'a'
	assert rm[2] == 'a'
def test_closed():
	"""Test a closed RangeMap."""
	rm = RangeMap()
	rm.set('a', start=1, stop=2)
	print_underlying(rm)
	assert rm[1] == 'a'
	assert rm[1.9] == 'a'
	with pytest.raises(KeyError):
		rm[2]
	with pytest.raises(KeyError):
		rm[0]
def test_closed():
	"""Test a closed RangeMap."""
	rm = RangeMap()
	rm.set('a', start=1, stop=2)
	print_underlying(rm)
	assert rm[1] == 'a'
	assert rm[1.9] == 'a'
	with pytest.raises(KeyError):
		rm[2]
	with pytest.raises(KeyError):
		rm[0]
def test_set_existing_interval():
	"""Test setting an exact existing range."""
	rm = RangeMap({1: 'a', 2: 'b'})
	rm.set('c', start=1, stop=2)
	print_underlying(rm)
	assert rm[1] == 'c'
	assert rm[2] == 'b'
	assert rm[3] == 'b'
	assert rm == RangeMap({1: 'c', 2: 'b'})
	with pytest.raises(KeyError):
		rm[0]
def test_set_existing_interval():
	"""Test setting an exact existing range."""
	rm = RangeMap({1: 'a', 2: 'b'})
	rm.set('c', start=1, stop=2)
	print_underlying(rm)
	assert rm[1] == 'c'
	assert rm[2] == 'b'
	assert rm[3] == 'b'
	assert rm == RangeMap({1: 'c', 2: 'b'})
	with pytest.raises(KeyError):
		rm[0]
def test_default_value():
	"""Test setting just a default value."""
	rm = RangeMap(default_value=None)
	print(rm)
	assert rm[1] is None
	assert rm[-2] is None
	rm.set('a', start=1)
	print(rm)
	assert rm[0] is None
	assert rm[1] == 'a'
	assert rm[2] == 'a'
def test_end():
	assert RangeMap().end is None
	rm = RangeMap.from_iterable((
		(1, 2, 'a'),
		(4, 5, 'b'),
		))
	assert rm.end == 5
	rm = RangeMap.from_iterable((
		(1, 2, 'a'),
		(4, None, 'b'),
		))
	assert rm.end is None
def test_start():
	assert RangeMap().start is None
	rm = RangeMap.from_iterable((
		(1, 2, 'a'),
		(4, 5, 'b'),
		))
	assert rm.start == 1
	rm = RangeMap.from_iterable((
		(None, 2, 'a'),
		(4, 5, 'b'),
		))
	assert rm.start is None
def test_alter_beg():
	"""Test altering the beginning."""
	rm = RangeMap({1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'})
	rm.set('z', stop=3)
	assert rm[0] == 'z'
	assert rm[1] == 'z'
	assert rm[2] == 'z'
	assert rm[3] == 'c'
	assert rm[4] == 'd'
	assert rm[5] == 'e'
	rm.set('y', stop=3)
	assert rm == RangeMap({3: 'c', 4: 'd', 5: 'e'}, default_value='y')
def test_end():
	assert RangeMap().end is None
	rm = RangeMap.from_iterable((
		(1, 2, 'a'),
		(4, 5, 'b'),
		))
	assert rm.end == 5
	rm = RangeMap.from_iterable((
		(1, 2, 'a'),
		(4, None, 'b'),
		))
	assert rm.end is None
def test_start():
	assert RangeMap().start is None
	rm = RangeMap.from_iterable((
		(1, 2, 'a'),
		(4, 5, 'b'),
		))
	assert rm.start == 1
	rm = RangeMap.from_iterable((
		(None, 2, 'a'),
		(4, 5, 'b'),
		))
	assert rm.start is None
def test_simple_set():
	"""Test set."""
	rm = RangeMap()
	rm.set('a', start=1)
	print_underlying(rm)
	assert rm[1] == 'a'
	assert rm[2] == 'a'
	with pytest.raises(KeyError):
		rm[0]
	rm.set('b', start=2)
	assert rm[1] == 'a'
	assert rm[2] == 'b'
	assert rm[3] == 'b'
def test_iter():
	assert list(RangeMap()) == []
	assert list(RangeMap(default_value='a')) == [None]
	rm = RangeMap.from_iterable((
		(1, 2, 'a'),
		(4, 5, 'd'),
		(5, None, 'e'),
		))
	assert list(rm) == [1, 4, 5]
	rm = RangeMap.from_iterable((
		(1, 2, 'a'),
		(4, 5, 'd'),
		))
	assert list(rm) == [1, 4]
def test_iter():
	assert list(RangeMap()) == []
	assert list(RangeMap(default_value='a')) == [None]
	rm = RangeMap.from_iterable((
		(1, 2, 'a'),
		(4, 5, 'd'),
		(5, None, 'e'),
		))
	assert list(rm) == [1, 4, 5]
	rm = RangeMap.from_iterable((
		(1, 2, 'a'),
		(4, 5, 'd'),
		))
	assert list(rm) == [1, 4]
def test_items():
	rm = RangeMap.from_iterable((
		(1, 2, 'a'),
		(4, 5, 'd'),
		(5, None, 'e'),
		))
	assert rm.items() == set(((1, 'a'), (4, 'd'), (5, 'e')))
	rm = RangeMap.from_iterable((
		(1, 2, 'a'),
		(4, 5, 'd'),
		))
	assert rm.items() == set(((1, 'a'), (4, 'd')))
	assert RangeMap().items() == set()
	assert RangeMap(default_value='a').items() == set(((None, 'a'),))
	assert RangeMap(default_value=None).items() == set(((None, None), ))
def test_items():
	rm = RangeMap.from_iterable((
		(1, 2, 'a'),
		(4, 5, 'd'),
		(5, None, 'e'),
		))
	assert rm.items() == set(((1, 'a'), (4, 'd'), (5, 'e')))
	rm = RangeMap.from_iterable((
		(1, 2, 'a'),
		(4, 5, 'd'),
		))
	assert rm.items() == set(((1, 'a'), (4, 'd')))
	assert RangeMap().items() == set()
	assert RangeMap(default_value='a').items() == set(((None, 'a'),))
	assert RangeMap(default_value=None).items() == set(((None, None), ))
def test_version_differences():
	"""Test python 2 and 3 differences."""
	rm = RangeMap({1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'})
	if is_py2:
		with pytest.raises(SyntaxError):
			rm[3:] = 'a'
		with pytest.raises(SyntaxError):
			del rm[4:5]
		with pytest.raises(SyntaxError):
			assert rm[2:] == RangeMap({2: 'b', 3: 'a'})
	else:
		rm[3:] = 'a'
		assert rm == RangeMap({1: 'a', 2: 'b', 3: 'a'})
		del rm[1:2]
		assert rm == RangeMap({2: 'b', 3: 'a'})
def test_values():
	rm = RangeMap.from_iterable((
		(1, 2, 'a'),
		(4, 5, 'd'),
		(5, None, 'e'),
		))
	assert list(rm.values()) == ['a', 'd', 'e']
	rm = RangeMap.from_iterable((
		(1, 2, 'a'),
		(4, 5, 'd'),
		))
	assert list(rm.values()) == ['a', 'd']
	assert list(RangeMap().values()) == []
	assert list(RangeMap(default_value='a').values()) == ['a']
	assert list(RangeMap(default_value=None).values()) == [None]
def test_values():
	rm = RangeMap.from_iterable((
		(1, 2, 'a'),
		(4, 5, 'd'),
		(5, None, 'e'),
		))
	assert list(rm.values()) == ['a', 'd', 'e']
	rm = RangeMap.from_iterable((
		(1, 2, 'a'),
		(4, 5, 'd'),
		))
	assert list(rm.values()) == ['a', 'd']
	assert list(RangeMap().values()) == []
	assert list(RangeMap(default_value='a').values()) == ['a']
	assert list(RangeMap(default_value=None).values()) == [None]
def test_items_view_contains():
	rm = RangeMap.from_iterable((
		(1, 2, 'a'),
		(4, 5, 'd'),
		(5, None, 'e'),
		))
	assert (1, 'a') in rm.items()
	assert (2, 'a') not in rm.items()
def test_values_view_contains():
	rm = RangeMap.from_iterable((
		(1, 2, 'a'),
		(4, 5, 'd'),
		(5, None, 'e'),
		))
	assert 'a' in rm.values()
	assert 'b' not in rm.values()
def test_clear():
	rm = RangeMap.from_iterable((
		(1, 2, 'a'),
		(4, 5, 'd'),
		(5, None, 'e'),
		))
	rm.clear()
	assert rm == RangeMap()
def test_values_view_contains():
	rm = RangeMap.from_iterable((
		(1, 2, 'a'),
		(4, 5, 'd'),
		(5, None, 'e'),
		))
	assert 'a' in rm.values()
	assert 'b' not in rm.values()
def test_items_view_contains():
	rm = RangeMap.from_iterable((
		(1, 2, 'a'),
		(4, 5, 'd'),
		(5, None, 'e'),
		))
	assert (1, 'a') in rm.items()
	assert (2, 'a') not in rm.items()
def test_get():
	rm = RangeMap.from_iterable((
		(1, 2, 'a'),
		(4, 5, 'd'),
		(5, None, 'e'),
		))
	assert rm.get(1) == 'a'
	assert rm.get(1.5) == 'a'
	assert rm.get(2) is None
def test_key_view_contains():
	rm = RangeMap.from_iterable((
		(1, 2, 'a'),
		(4, 5, 'd'),
		(5, None, 'e'),
		))
	assert 1 in rm.keys()
	assert 2 not in rm.keys()
	assert 1.5 in rm.keys()
def test_get():
	rm = RangeMap.from_iterable((
		(1, 2, 'a'),
		(4, 5, 'd'),
		(5, None, 'e'),
		))
	assert rm.get(1) == 'a'
	assert rm.get(1.5) == 'a'
	assert rm.get(2) is None
def test_key_view_contains():
	rm = RangeMap.from_iterable((
		(1, 2, 'a'),
		(4, 5, 'd'),
		(5, None, 'e'),
		))
	assert 1 in rm.keys()
	assert 2 not in rm.keys()
	assert 1.5 in rm.keys()
def test_slice_errors():
	"""Test slicing errors."""
	rm = RangeMap({1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'})
	with pytest.raises(ValueError):
		rm[2:5:2]
	with pytest.raises(TypeError):
		rm[3] = 'z'
	with pytest.raises(ValueError):
		rm[3:5:2] = 'z'
def test_len():
	rm = RangeMap.from_iterable((
		(1, 2, 'a'),
		(4, 5, 'd'),
		(5, None, 'e'),
		))
	assert len(rm) == 3
	assert len(RangeMap(default_value='a')) == 1
	assert len(RangeMap()) == 0
	assert len(RangeMap(default_value=None)) == 1
def test_alter_beg():
	"""Test altering the beginning."""
	rm = RangeMap({1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'})
	rm.set('z', stop=3)
	assert rm[0] == 'z'
	assert rm[1] == 'z'
	assert rm[2] == 'z'
	assert rm[3] == 'c'
	assert rm[4] == 'd'
	assert rm[5] == 'e'
	rm.set('y', stop=3)
	assert rm == RangeMap({3: 'c', 4: 'd', 5: 'e'}, default_value='y')
def test_empty():
	"""Test RangeMap.empty."""
	rm = RangeMap({1: 'a', 2: 'b', 3: 'c', 4: 'd'})
	rm.empty(2, 3)
	rm.empty(2, 3)
	assert rm == RangeMap.from_iterable((
		(1, 2, 'a'),
		(3, 4, 'c'),
		(4, None, 'd'),
		))
	rm.empty(3.5, 4.5)
	assert rm == RangeMap.from_iterable((
		(1, 2, 'a'),
		(3, 3.5, 'c'),
		(4.5, None, 'd'),
		))
def test_dates():
	"""Test using dates."""
	rm = RangeMap()
	rm.set('b', datetime.date(1936, 12, 11))
	rm.set('a', datetime.date(1952, 2, 6))
	assert rm[datetime.date(1945, 1, 1)] == 'b'
	assert rm[datetime.date(1965, 4, 6)] == 'a'
	with pytest.raises(KeyError):
		rm[datetime.date(1900, 1, 1)]
def test_empty():
	"""Test RangeMap.empty."""
	rm = RangeMap({1: 'a', 2: 'b', 3: 'c', 4: 'd'})
	rm.empty(2, 3)
	rm.empty(2, 3)
	assert rm == RangeMap.from_iterable((
		(1, 2, 'a'),
		(3, 4, 'c'),
		(4, None, 'd'),
		))
	rm.empty(3.5, 4.5)
	assert rm == RangeMap.from_iterable((
		(1, 2, 'a'),
		(3, 3.5, 'c'),
		(4.5, None, 'd'),
		))
def test_set_consecutive_after_eq():
	"""Test setting consecutive ranges to the same value."""
	rm = RangeMap({1: 'a', 2: 'b', 3: 'c'})
	rm.set('a', 2, 3)
	assert rm == RangeMap({1: 'a', 3: 'c'})
def test_init():
	assert RangeMap(iterable=[]) == RangeMap()
	rm = RangeMap(((1, 2, 'a'), (2, None, 'b')))
	assert RangeMap.from_mapping({1: 'a', 2: 'b'}) == rm
	with pytest.raises(TypeError):
		RangeMap(foo='bar')
def test_set_consecutive_between_eq():
	"""Test setting consecutive ranges to the same value."""
	rm = RangeMap({1: 'a', 2: 'b', 3: 'c', 4: 'b'})
	rm.set('b', 3, 4)
	assert rm == RangeMap({1: 'a', 2: 'b'})
def test_from_mapping():
	"""Test creating a RangeMap from a mapping."""
	rm = RangeMap()
	rm.set('a', start=1)
	rm.set('b', start=2)
	assert rm == RangeMap({1: 'a', 2: 'b'})