|
4 | 4 | # ########################################### # |
5 | 5 |
|
6 | 6 | import numpy as np |
| 7 | +import pytest |
7 | 8 |
|
8 | 9 | import xobjects as xo |
9 | 10 | from xobjects.test_helpers import for_all_test_contexts, requires_context |
@@ -94,6 +95,35 @@ def test_free_simple(test_context): |
94 | 95 | ch.free_string(offset) |
95 | 96 | ch.check() |
96 | 97 |
|
| 98 | +@for_all_test_contexts |
| 99 | +def test_free(test_context): |
| 100 | + class CheckFree(xo.Struct): |
| 101 | + a = xo.Float64 |
| 102 | + ch = CheckFree(a=5, _context=test_context) |
| 103 | + assert ch._buffer.capacity == 8 |
| 104 | + assert ch._buffer.chunks == [] |
| 105 | + with pytest.raises(ValueError, match="Cannot free outside of buffer"): |
| 106 | + ch._buffer.free(-2, 8) |
| 107 | + with pytest.raises(ValueError, match="Cannot free outside of buffer"): |
| 108 | + ch._buffer.free(0, 10) |
| 109 | + with pytest.raises(ValueError, match="Cannot free outside of buffer"): |
| 110 | + ch._buffer.free(7,2) |
| 111 | + ch._buffer.free(0,4) |
| 112 | + assert len(ch._buffer.chunks) == 1 |
| 113 | + assert ch._buffer.chunks[0].start == 0 |
| 114 | + assert ch._buffer.chunks[0].end == 4 |
| 115 | + ch._buffer.free(0,4) # Does nothing |
| 116 | + ch._buffer.free(2,4) # Increases free chunk |
| 117 | + assert len(ch._buffer.chunks) == 1 |
| 118 | + assert ch._buffer.chunks[0].start == 0 |
| 119 | + assert ch._buffer.chunks[0].end == 6 |
| 120 | + ch._buffer.free(7,1) |
| 121 | + assert len(ch._buffer.chunks) == 2 |
| 122 | + assert ch._buffer.chunks[0].start == 0 |
| 123 | + assert ch._buffer.chunks[0].end == 6 |
| 124 | + assert ch._buffer.chunks[1].start == 7 |
| 125 | + assert ch._buffer.chunks[1].end == 8 |
| 126 | + |
97 | 127 |
|
98 | 128 | @for_all_test_contexts |
99 | 129 | def test_grow(test_context): |
|
0 commit comments