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
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)
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]
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]
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]
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)
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))
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
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