class IndexRetrieveRangeTest(unittest.TestCase): def setUp(self) -> None: self.int_index = Index(int) for i in range(100): self.int_index.add(i, i) self.str_index = Index(int) for i in range(10): self.str_index.add(str(i), i) @given(low=integers(min_value=0, max_value=99), high=integers(min_value=0, max_value=99)) @settings(max_examples=100) def test_retrieve_range_int(self, low, high): assume(high > low) range = self.int_index.retrieve_range(low, high) if high - low == 0: assert range == {high} else: assert len(range) == high - low + 1 @given(low=integers(min_value=0, max_value=9), high=integers(min_value=0, max_value=9)) @settings(max_examples=10) def test_retrieve_range_str(self, low, high): high = str(high) low = str(low) assume(high > low) range = self.str_index.retrieve_range(low, high) if high == low: assert range == {int(high)} else: assert len(range) == int(high) - int(low) + 1
class IndexDestroyTest(unittest.TestCase): def setUp(self) -> None: self.index = Index(str) @given(value=text(), index=integers()) @settings(max_examples=100) def test_destroy(self, value, index): self.index.add(value, index) self.index.destroy(value, index) new_entry = self.index.retrieve(value) assert new_entry == set() with pytest.raises(KeyError): self.index.destroy(value, index)
class IndexAddTest(unittest.TestCase): def setUp(self): self.index = Index(str) @given(value=text(), index=integers()) def test_insert(self, value, index): if value is None: self.index.add(value, index) assert index in self.index.none_indexes elif value in self.index.indexes: previous_value = self.index.indexes[value] if isinstance(previous_value, set): assume(index not in previous_value) first_len = len(previous_value) self.index.add(value, index) assert len(self.index.indexes[value]) - first_len == 1 assert index in self.index.indexes[value] else: assume(index != previous_value) self.index.add(value, index) new_value = self.index.indexes[value] assert isinstance(new_value, set) assert len(new_value) == 2 assert index in new_value else: self.index.add(value, index) new_value = self.index.indexes[value] assert isinstance(new_value, int) assert new_value == index
def test_retrieve(): index = Index(bytes) index.add(b"23", 1) assert index.retrieve(b"23") == {1} index.add(b"23", 2) assert index.retrieve(b"23") == {1, 2} index.add(b"24", 2) assert index.retrieve(b"24") == {2} index.add(None, 3) assert index.retrieve(None) == {3} assert index.retrieve(b"26") == set()
class IndexRetrieveTest(unittest.TestCase): def setUp(self) -> None: self.index = Index(str) @given(value=text(), index=integers()) @settings(max_examples=100) def test_retrieve(self, value, index): original_value = self.index.retrieve(value) if isinstance(original_value, set): original_value = original_value.copy() assume(index not in original_value) assert isinstance(original_value, set) or original_value is None self.index.add(value, index) new_value = self.index.retrieve(value) if original_value is None: assert isinstance(new_value, set) assert new_value == {index} else: assert len(new_value) - len(original_value) == 1 assert index in new_value
def test_insert(): index = Index(bytes) index.add(b"23", 1) assert len(index) == 1 assert index.indexes[b"23"] == 1 index.add(b"23", 2) assert len(index) == 1 assert index.indexes[b"23"] == {1, 2} index.add(b"23", 3) assert len(index) == 1 assert index.indexes[b"23"] == {1, 2, 3} index.add(None, 1) assert len(index) == 2 assert index.none_indexes == {1}
def test_retrieve_range_bytes(): index = Index(bytes) index.add(None, 2) index.add(b"3", 3) index.add(b"3", 4) index.add(b"4", 4) index.add(b"5", 5) index.add(b"6", 6) range = index.retrieve_range(None, None) assert range == {2, 3, 4, 5, 6} range = index.retrieve_range(None, b"2") assert range == {2} range = index.retrieve_range(b"3", b"4") assert range == {3, 4} range = index.retrieve_range(b"3", b"8") assert range == {3, 4, 5, 6}
def test_destroy(): index = Index(bytes) index.add(None, 0) index.add(b"23", 1) index.add(b"23", 2) index.add(b"23", 3) index.destroy(None, 0) assert len(index) == 1 index.destroy(b"23", 1) assert len(index) == 1 assert index.retrieve(b"23") == {2, 3} index.destroy(b"23", 2) assert len(index) == 1 assert index.retrieve(b"23") == {3} index.destroy(b"23", 3) assert len(index) == 0 assert index.retrieve(b"23") == set() with pytest.raises(KeyError): index.destroy(None, 0) with pytest.raises(KeyError): index.destroy(b"23", 1)