mirror of
https://github.com/kovidgoyal/kitty
synced 2026-07-23 08:47:47 +02:00
Add explicit check for holes in test
This commit is contained in:
@@ -733,6 +733,23 @@ clear(PyObject *self, PyObject *args UNUSED) {
|
|||||||
Py_RETURN_NONE;
|
Py_RETURN_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static PyObject*
|
||||||
|
holes(PyObject *self_, PyObject *args UNUSED) {
|
||||||
|
DiskCache *self = (DiskCache*)self_;
|
||||||
|
mutex(lock);
|
||||||
|
RAII_PyObject(ans, PyTuple_New(self->holes.count));
|
||||||
|
if (ans) {
|
||||||
|
for (size_t i = 0; i < self->holes.count; i++) {
|
||||||
|
PyObject *t = Py_BuildValue("LL", (long long)self->holes.items[i].pos, (long long)self->holes.items[i].size);
|
||||||
|
if (!t) return NULL;
|
||||||
|
PyTuple_SetItem(ans, i, t);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mutex(unlock);
|
||||||
|
Py_INCREF(ans);
|
||||||
|
return ans;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static PyObject*
|
static PyObject*
|
||||||
add(PyObject *self, PyObject *args) {
|
add(PyObject *self, PyObject *args) {
|
||||||
@@ -816,6 +833,7 @@ static PyMethodDef methods[] = {
|
|||||||
{"wait_for_write", wait_for_write, METH_VARARGS, NULL},
|
{"wait_for_write", wait_for_write, METH_VARARGS, NULL},
|
||||||
{"size_on_disk", size_on_disk, METH_NOARGS, NULL},
|
{"size_on_disk", size_on_disk, METH_NOARGS, NULL},
|
||||||
{"clear", clear, METH_NOARGS, NULL},
|
{"clear", clear, METH_NOARGS, NULL},
|
||||||
|
{"holes", holes, METH_NOARGS, NULL},
|
||||||
|
|
||||||
{NULL} /* Sentinel */
|
{NULL} /* Sentinel */
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -254,11 +254,15 @@ class TestGraphics(BaseTest):
|
|||||||
self.assertRaises(KeyError, dc.get, key_as_bytes(x))
|
self.assertRaises(KeyError, dc.get, key_as_bytes(x))
|
||||||
self.assertEqual(sz, dc.size_on_disk())
|
self.assertEqual(sz, dc.size_on_disk())
|
||||||
self.assertEqual(sz, dc.size_on_disk())
|
self.assertEqual(sz, dc.size_on_disk())
|
||||||
|
holes = {2, 4, 6, 8}
|
||||||
|
self.assertEqual(holes, {x[1] for x in dc.holes()})
|
||||||
# fill holes largest first to ensure small one doesnt go into large accidentally causing fragmentation
|
# fill holes largest first to ensure small one doesnt go into large accidentally causing fragmentation
|
||||||
for x in sorted(('xy', 'C'*4, 'B'*6, 'A'*8), key=len, reverse=True):
|
for x in sorted(('xy', 'C'*4, 'B'*6, 'A'*8), key=len, reverse=True):
|
||||||
add(x, x)
|
add(x, x)
|
||||||
self.assertTrue(dc.wait_for_write())
|
self.assertTrue(dc.wait_for_write())
|
||||||
check_data()
|
check_data()
|
||||||
|
holes.discard(len(x))
|
||||||
|
self.assertEqual(holes, {x[1] for x in dc.holes()})
|
||||||
self.assertEqual(sz, dc.size_on_disk(), f'Disk cache has unexpectedly grown from {sz} to {dc.size_on_disk} with data: {x!r}')
|
self.assertEqual(sz, dc.size_on_disk(), f'Disk cache has unexpectedly grown from {sz} to {dc.size_on_disk} with data: {x!r}')
|
||||||
check_data()
|
check_data()
|
||||||
dc.clear()
|
dc.clear()
|
||||||
|
|||||||
Reference in New Issue
Block a user