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_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_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_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_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_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_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_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_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_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_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_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_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'})