def test_insert_end(): rl = RangedList(10, "a") rl[1] = "b" assert rl.get_ranges() == [(0, 1, "a"), (1, 2, "b"), (2, 10, "a")] rl[4:6] = "c" assert rl.get_ranges() == [(0, 1, "a"), (1, 2, "b"), (2, 4, "a"), (4, 6, "c"), (6, 10, "a")]
def test_get_default(): left = RangedList(4, 3, "three") assert 3 == left.get_default() right = RangedList(4, 2, "two") add = left + right result = add.get_default() assert 5 == result
def test_insert_slice_start_over_lap_to(): rl = RangedList(10, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) rl[3:7] = "b" rl[1:5] = "c" assert rl == [0, "c", "c", "c", "c", "b", "b", 7, 8, 9] assert rl.get_ranges() == [(0, 1, 0), (1, 5, "c"), (5, 7, "b"), (7, 8, 7), (8, 9, 8), (9, 10, 9)]
def test_ranges_by_slice(): rl = RangedList(size=10, value="a", key="alpha") assert [(3, 8, "a")] == list(rl.iter_ranges_by_slice(3, 8)) rl[5] = "foo" rl[5] = "foo" assert [(3, 5, "a"), (5, 6, "foo"), (6, 8, "a")] == \ list(rl.iter_ranges_by_slice(3, 8))
def test_get_slice(): numerator = RangedList(5, 12.0, "numerator") divisor = RangedList(5, 4, "divisor") div = numerator / divisor divisor[1:3] = 6 numerator[2, 4] = 24 assert div[2:4] == [4, 3]
def test_get_ids(): numerator = RangedList(5, 12.0, "numerator") divisor = RangedList(5, 4, "divisor") div = numerator / divisor divisor[1:3] = 6 numerator[2, 4] = 24 assert div[1:5:2] == [2, 3]
def test_copy(): rd = RangeDictionary(3) a_list1 = RangedList(3, [1, 2, 3]) a_list2 = RangedList(3, 5) a_calc1 = a_list1 * 4 a_calc2 = a_list2 * 4 rd["list1"] = a_list1 rd["list2"] = a_list2 rd["calc1"] = a_calc1 rd["calc2"] = a_calc2 rd2 = rd.copy() a_list1_copy = rd2["list1"] assert a_list1_copy == [1, 2, 3] assert list(a_list1_copy.iter_ranges()) == \ [(0, 1, 1), (1, 2, 2), (2, 3, 3)] a_list2_copy = rd2["list2"] assert list(a_list2_copy.iter_ranges()) == [(0, 3, 5)] assert a_list2_copy == [5, 5, 5] calc1_copy = rd2["calc1"] assert calc1_copy == [4, 8, 12] assert list(calc1_copy.iter_ranges()) == \ [(0, 1, 4), (1, 2, 8), (2, 3, 12)] calc2_copy = rd2["calc2"] assert calc2_copy == [20, 20, 20] assert list(calc2_copy.iter_ranges()) == [(0, 3, 20)]
def test_range_merge(): rl = RangedList(size=5, value=1, key="alpha") assert [(0, 5, 1)] == rl.get_ranges() rl[2:4] = 2 assert [(0, 2, 1), (2, 4, 2), (4, 5, 1)] == rl.get_ranges() rl[2:4] = 1 assert [(0, 5, 1)] == rl.get_ranges()
def test_ranges_by_slice(): rl = RangedList(10, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) assert [(3, 4, 3), (4, 5, 4), (5, 6, 5), (6, 7, 6), (7, 8, 7)] == \ list(rl.iter_ranges_by_slice(3, 8)) rl[5] = "foo" assert [(3, 4, 3), (4, 5, 4), (5, 6, "foo"), (6, 7, 6), (7, 8, 7)] == \ list(rl.iter_ranges_by_slice(3, 8))
def test_simple(): rl = RangedList(5, [0, 1, 2, 3, 4]) ranges = rl.get_ranges() assert rl == [0, 1, 2, 3, 4] assert len(ranges) == 5 assert ranges == [(0, 1, 0), (1, 2, 1), (2, 3, 2), (3, 4, 3), (4, 5, 4)] assert rl[3] == 3
def test_insert_slice_to_previous(): rl = RangedList(10, "a") rl[3:7] = "b" assert rl.get_ranges() == [(0, 3, "a"), (3, 7, "b"), (7, 10, "a")] rl[2:5] = "a" assert list(rl) == ["a", "a", "a", "a", "a", "b", "b", "a", "a", "a"] assert rl.get_ranges() == [(0, 5, "a"), (5, 7, "b"), (7, 10, "a")]
def test_insert_slice_start_over_lap_both(): rl = RangedList(10, "a") rl[3:7] = "b" assert rl.get_ranges() == [(0, 3, "a"), (3, 7, "b"), (7, 10, "a")] rl[1:8] = "c" assert list(rl) == ["a", "c", "c", "c", "c", "c", "c", "c", "a", "a"] assert rl.get_ranges() == [(0, 1, "a"), (1, 8, "c"), (8, 10, "a")]
def test_ranges_by_slice(): numerator = RangedList(10, 12.0, "numerator") divisor = RangedList(10, 4, "divisor") div = numerator / divisor divisor[1:6] = 6 numerator[4:8] = 24 assert [(2, 4, 2.0), (4, 6, 4), (6, 7, 6)] == \ list(div.iter_ranges_by_slice(2, 7))
def test_insert_slice_up_to(): rl = RangedList(10, "a") rl[3:7] = "b" assert rl.get_ranges() == [(0, 3, "a"), (3, 7, "b"), (7, 10, "a")] rl[1:3] = "c" assert list(rl) == ["a", "c", "c", "b", "b", "b", "b", "a", "a", "a"] assert rl.get_ranges() == [(0, 1, "a"), (1, 3, "c"), (3, 7, "b"), (7, 10, "a")]
def test_warn(): rl = RangedList(value=range(5)) assert [0, 1, 2] == rl.selector_to_ids([True, True, True, False], warn=True) assert [0, 1, 2] == rl.selector_to_ids([True, True, True, False, False, False], warn=True) assert [0, 1, 2, 3, 4] == list(rl.selector_to_ids(None, warn=True))
def test_ranges(): numerator = RangedList(10, 12.0, "numerator") divisor = RangedList(10, 4, "divisor") div = numerator / divisor divisor[1:6] = 6 numerator[4:8] = 24 assert [(0, 1, 3.0), (1, 4, 2.0), (4, 6, 4), (6, 8, 6), (8, 10, 3.0)] == \ list(div.iter_ranges())
def test_complex(): numerator = RangedList(5, 12.0, "numerator") divisor = RangedList(5, 4, "divisor") div = numerator / divisor assert list(div) == [3, 3, 3, 3, 3] divisor[1:3] = 6 numerator[2, 4] = 24 assert div == [3, 2, 4, 3, 6]
def test_numpy_array(): left = RangedList(2, numpy.array([2, 4, 6]), "many", use_list_as_value=True) right = RangedList(2, 2, "many") ans = left / right assert all(ans.get_single_value_all() == numpy.array([1, 2, 3]))
def test_sub_number(): left = RangedList(10, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "many") right = RangedList(10, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "many") sub = left - 4 assert [-2, -1, 0, 1] == list(sub.iter_by_slice(2, 6)) sub = left - right assert [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] == sub with pytest.raises(Exception): left - "foo"
def test_add_number(): left = RangedList(10, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "many") right = RangedList(10, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "many") add = left + 4 assert [6, 7, 8, 9] == list(add.iter_by_slice(2, 6)) add = left + right assert [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] == add with pytest.raises(Exception): left + "foo"
def test_get_value(): numerator = RangedList(5, 12.0, "numerator") divisor = RangedList(5, 4, "divisor") div = numerator / divisor assert div.get_single_value_by_slice(1, 3) == 3 assert div.get_single_value_by_ids([1, 3]) == 3 divisor[1:3] = 6 numerator[2, 4] = 24 assert div[2] == 4
def test_muliple(): numerator = RangedList(5, 12.0, "numerator") divisor = RangedList(5, 4, "divisor") div = numerator / divisor assert div == [3, 3, 3, 3, 3] divisor[1] = 6 divisor[2] = 3 divisor[3] = 8 assert div == [3, 2, 4, 1.5, 3]
def test_mult_number(): left = RangedList(10, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "many") right = RangedList(10, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "many") mult = left * 4 assert [8, 12, 16, 20] == list(mult.iter_by_slice(2, 6)) mult = left * right assert [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] == mult with pytest.raises(Exception): left * "foo"
def test_both_equals(): left = RangedList(4, 3, "three") right = RangedList(4, 2, "two") add = left + right simple = RangedList(4, 5, "five") assert add == simple left[1] = 7 simple[1] = 9 assert add == simple
def test_simple(): rl = RangedList(10, "a") ranges = rl.get_ranges() assert list(rl) == ["a", "a", "a", "a", "a", "a", "a", "a", "a", "a"] assert len(ranges) == 1 assert ranges[0][0] == 0 assert ranges[0][1] == 10 assert ranges[0][2] == "a" assert rl[3] == "a"
def test_insert_slice_up_to(): rl = RangedList(10, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) rl[3:7] = "b" assert rl.get_ranges() == [(0, 1, 0), (1, 2, 1), (2, 3, 2), (3, 7, "b"), (7, 8, 7), (8, 9, 8), (9, 10, 9)] rl[1:3] = "c" assert rl == [0, "c", "c", "b", "b", "b", "b", 7, 8, 9] assert rl.get_ranges() == [(0, 1, 0), (1, 3, "c"), (3, 7, "b"), (7, 8, 7), (8, 9, 8), (9, 10, 9)]
def test_ranges_by_ids(): rl = RangedList(size=10, value="a", key="alpha") assert [(1, 4, "a"), (7, 8, "a"), (4, 5, "a")] == \ list(rl.iter_ranges_by_ids((1, 2, 3, 7, 4))) rl[6] = "foo" assert [(1, 4, "a"), (7, 8, "a"), (4, 5, "foo")] == \ list(rl.iter_ranges_by_ids((1, 2, 3, 7, 4))) rl[3] = "foo" assert [(1, 3, "a"), (3, 4, "foo"), (7, 8, "a"), (4, 5, "a")] == \ list(rl.iter_ranges_by_ids((1, 2, 3, 7, 4)))
def test_ranges_by_ids(): rl = RangedList(10, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) assert [(1, 2, 1), (2, 3, 2), (3, 4, 3), (7, 8, 7), (4, 5, 4)] == \ list(rl.iter_ranges_by_ids((1, 2, 3, 7, 4))) rl[6] = "foo" assert [(1, 2, 1), (2, 3, 2), (3, 4, 3), (7, 8, 7), (4, 5, 4)] == \ list(rl.iter_ranges_by_ids((1, 2, 3, 7, 4))) rl[3] = "foo" assert [(1, 2, 1), (2, 3, 2), (3, 4, "foo"), (7, 8, 7), (4, 5, 4)] == \ list(rl.iter_ranges_by_ids((1, 2, 3, 7, 4)))
def test_set_value_by_slice(): rl = RangedList(size=10, value="a", key="alpha") rl.set_value_by_slice(2, 7, "b") assert rl == ["a", "a", "b", "b", "b", "b", "b", "a", "a", "a"] rl.set_value_by_slice(3, 7, "c") assert rl == ["a", "a", "b", "c", "c", "c", "c", "a", "a", "a"] rl.set_value_by_slice(5, 8, "d") assert rl == ["a", "a", "b", "c", "c", "d", "d", "d", "a", "a"] rl.set_value_by_slice(4, 6, "c") assert rl == ["a", "a", "b", "c", "c", "c", "d", "d", "a", "a"]
def test_get_values_bad_lists(): rl = RangedList(value=range(10)) with pytest.raises(TypeError): rl.get_values([2, -1, 4]) with pytest.raises(TypeError): rl.get_values([2, 12, 4]) with pytest.raises(TypeError): rl.get_values([2, True]) with pytest.raises(TypeError): rl.get_values([2, "True"])