示例#1
0
def test_find_position_equal_endpoints() -> None:
    a = BlockRange(1, datetime.fromtimestamp(1), datetime.fromtimestamp(2))
    b = BlockRange(2, datetime.fromtimestamp(2), datetime.fromtimestamp(3))
    c = BlockRange(3, datetime.fromtimestamp(3), datetime.fromtimestamp(4))
    assert find_position([b, c], a) == 0
    assert find_position([a, c], b) == 1
    assert find_position([a, b], c) == 2
示例#2
0
def test_try_insert_fail() -> None:
    a = BlockRange(1, datetime.fromtimestamp(1), datetime.fromtimestamp(2))
    b = BlockRange(2, datetime.fromtimestamp(3), datetime.fromtimestamp(4))
    ab1 = BlockRange(3, datetime.fromtimestamp(1), datetime.fromtimestamp(4))
    ab2 = BlockRange(3, datetime.fromtimestamp(1), datetime.fromtimestamp(3))
    ab3 = BlockRange(3, datetime.fromtimestamp(2), datetime.fromtimestamp(4))
    levels = [a, b]
    assert not try_insert(levels, ab1)
    assert not try_insert(levels, ab2)
    assert not try_insert(levels, ab3)
示例#3
0
def test_compute_overlap_ordered() -> None:
    a = BlockRange(1, datetime.fromtimestamp(1), datetime.fromtimestamp(2))
    b = BlockRange(2, datetime.fromtimestamp(3), datetime.fromtimestamp(4))
    c = BlockRange(3, datetime.fromtimestamp(5), datetime.fromtimestamp(6))
    d = BlockRange(4, datetime.fromtimestamp(7), datetime.fromtimestamp(8))
    bro = compute_overlap([a, b, c, d])
    assert bro.min_val.timestamp() == 1
    assert bro.max_val.timestamp() == 8
    assert bro.min_blknum == 1
    assert bro.max_blknum == 4
    assert len(bro.levels) == 1
    assert blknums(bro.levels[0]) == [1, 2, 3, 4]
示例#4
0
def test_try_insert() -> None:
    a = BlockRange(1, datetime.fromtimestamp(1), datetime.fromtimestamp(2))
    b = BlockRange(2, datetime.fromtimestamp(3), datetime.fromtimestamp(4))
    c = BlockRange(3, datetime.fromtimestamp(5), datetime.fromtimestamp(6))
    level = [a, c]
    assert try_insert(level, b)
    assert blknums(level) == [1, 2, 3]
    level = [a, b]
    assert try_insert(level, c)
    assert blknums(level) == [1, 2, 3]
    level = [b, c]
    assert try_insert(level, a)
    assert blknums(level) == [1, 2, 3]
示例#5
0
def test_try_insert_edge() -> None:
    a = BlockRange(1, datetime.fromtimestamp(1), datetime.fromtimestamp(2))
    b = BlockRange(2, datetime.fromtimestamp(3), datetime.fromtimestamp(4))
    # empty list
    level: list[BlockRange] = []
    assert try_insert(level, a)
    assert blknums(level) == [1]
    # insert before first element
    level = [b]
    assert try_insert(level, a)
    assert blknums(level) == [1, 2]
    # insert after last element
    level = [a]
    assert try_insert(level, b)
    assert blknums(level) == [1, 2]
示例#6
0
def test_block_range_matches_point() -> None:
    br = BlockRange(1, ts(10), ts(20))
    assert block_range_matches(br, ts(15), None)
    assert block_range_matches(br, ts(10), None)
    assert block_range_matches(br, ts(20), None)
    assert not block_range_matches(br, ts(9), None)
    assert not block_range_matches(br, ts(21), None)
示例#7
0
def test_block_range_matches_range() -> None:
    br = BlockRange(1, ts(10), ts(20))
    # contained within
    assert block_range_matches(br, ts(15), ts(18))
    # within, edge cases
    assert block_range_matches(br, ts(10), ts(11))
    assert block_range_matches(br, ts(19), ts(20))
    # overlaps
    assert block_range_matches(br, ts(8), ts(11))
    assert block_range_matches(br, ts(18), ts(21))
    # block contained by range
    assert block_range_matches(br, ts(5), ts(25))
示例#8
0
def parse_csv_rows(
    csv_rows: Iterable[str],
    start: Optional[datetime] = None,
    end: Optional[datetime] = None,
    match_type: Literal["overlap", "within"] = "overlap",
) -> list[BlockRange]:
    reader = csv.reader(csv_rows)
    brs = []
    for i, row in enumerate(reader):
        if i == 0:
            assert row == ["blknum", "value"]
            continue
        blknum, value = row
        br = BlockRange(int(blknum), *parse_datetime_tuple(value))
        if date_match(br, match_type, start, end):
            brs.append(br)
    # note: not sorted because bug in export_brin_items.sh sorting different
    # files. sorting makes viz look much nicer.
    brs = sorted(brs, key=lambda br: br.blknum)
    return brs
示例#9
0
def test_find_position_overlap() -> None:
    a = BlockRange(1, datetime.fromtimestamp(1), datetime.fromtimestamp(2))
    b = BlockRange(2, datetime.fromtimestamp(3), datetime.fromtimestamp(4))
    ab = BlockRange(3, datetime.fromtimestamp(2), datetime.fromtimestamp(4))
    assert find_position([a, b], ab) is None
    assert find_position([a, ab], b) is None