Skip to content

Commit b6b39ba

Browse files
committed
add tests - warning: Copilot
1 parent 5adfec9 commit b6b39ba

File tree

1 file changed

+134
-0
lines changed

1 file changed

+134
-0
lines changed

test/runtests.jl

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,111 @@ end
109109
Bumper.reset_buffer!(b)
110110
Bumper.reset_buffer!()
111111

112+
rb = ResizeBuffer(1000)
113+
114+
# Basic allocation tests for ResizeBuffer
115+
@test f(v, rb) == 9
116+
@test rb.offset == 0
117+
@test g(v, rb) == 9
118+
@test rb.offset == 0
119+
120+
@test @allocated(f(v, rb)) == 0
121+
@test @allocated(g(v, rb)) == 0
122+
123+
# Test nested allocations for ResizeBuffer
124+
@no_escape rb begin
125+
y = @alloc(Int, length(v))
126+
off1 = rb.offset
127+
@no_escape rb begin
128+
z = @alloc(Int, length(v))
129+
130+
@test pointer(z) != pointer(y)
131+
@test Int(pointer(z)) == Int(pointer(y)) + 8 * length(v)
132+
@test rb.offset == off1 + 8 * length(v)
133+
end
134+
135+
@test rb.offset == off1
136+
end
137+
138+
# Test buffer growth for ResizeBuffer
139+
@no_escape rb begin
140+
current = rb.offset
141+
x = @alloc(Int8, 500)
142+
@test rb.offset == current + 500
143+
@test rb.max_offset == current + 500
144+
end
145+
146+
# After no_escape, offset should be reset but max_offset preserved
147+
@test rb.offset == 0
148+
@test rb.max_offset > 0
149+
150+
# Test overflow allocation (exceeding buffer size) for ResizeBuffer
151+
rb2 = ResizeBuffer(100)
152+
@no_escape rb2 begin
153+
x = @alloc(Int8, 50) # Within buffer
154+
@test rb2.offset == 50
155+
@test isempty(rb2.overflow)
156+
157+
y = @alloc(Int8, 60) # Exceeds remaining buffer space
158+
@test rb2.offset == 110
159+
@test length(rb2.overflow) == 1
160+
end
161+
162+
# After no_escape, overflow should be cleared
163+
@test rb2.offset == 0
164+
@test isempty(rb2.overflow)
165+
166+
# Test reset_buffer! for ResizeBuffer
167+
rb3 = ResizeBuffer(100)
168+
@no_escape rb3 begin
169+
@alloc(Int8, 50)
170+
@test rb3.offset == 50
171+
@test rb3.max_offset == 50
172+
end
173+
174+
Bumper.reset_buffer!(rb3)
175+
@test rb3.offset == 0
176+
@test rb3.max_offset == 0
177+
178+
# Test alloc_ptr! for ResizeBuffer
179+
rb4 = ResizeBuffer(100)
180+
@no_escape rb4 begin
181+
current = rb4.offset
182+
p = @alloc_ptr(10)
183+
@test rb4.offset == current + 10
184+
185+
p2 = @alloc_ptr(20)
186+
@test rb4.offset == current + 30
187+
@test Int(p2) == Int(p) + 10
188+
end
189+
190+
# Test buffer resize on next allocation after exceeding initial max_offset
191+
rb5 = ResizeBuffer(100)
192+
@no_escape rb5 begin
193+
x = @alloc(Int8, 150) # Exceeds initial buffer, triggers resize
194+
@test rb5.max_offset == 150
195+
@test rb5.buf_len == 150 # Buffer was resized
196+
@test isempty(rb5.overflow) # But still fits in resized buffer
197+
end
198+
199+
# The buffer should now be empty
200+
@test rb5.offset == 0
201+
@test isempty(rb5.overflow)
202+
203+
# Test actual overflow when we exceed the resized buffer
204+
rb6 = ResizeBuffer(100)
205+
@no_escape rb6 begin
206+
x = @alloc(Int8, 50) # Fits in buffer
207+
y = @alloc(Int8, 100) # Exceeds buffer size
208+
@test rb6.offset == 150
209+
@test rb6.max_offset == 150
210+
@test !isempty(rb6.overflow)
211+
end
212+
213+
# After @no_escape, overflow is cleared
214+
@test rb6.offset == 0
215+
@test isempty(rb6.overflow)
216+
112217
@test_throws Exception @no_escape begin
113218
@alloc(Int, 10)
114219
end
@@ -186,4 +291,33 @@ end
186291
@test default_buffer() !== with_buffer(default_buffer, SlabBuffer())
187292
@test default_buffer(AllocBuffer) === default_buffer(AllocBuffer)
188293
@test default_buffer(AllocBuffer) !== with_buffer(() -> default_buffer(AllocBuffer), AllocBuffer())
294+
295+
# Test default_buffer for ResizeBuffer
296+
rb_default = default_buffer(ResizeBuffer)
297+
@test rb_default isa ResizeBuffer
298+
@test default_buffer(ResizeBuffer) === rb_default
299+
300+
# Test with_buffer for ResizeBuffer
301+
rb4 = ResizeBuffer(200)
302+
rb5 = ResizeBuffer(300)
303+
304+
@test default_buffer(ResizeBuffer) === rb_default
305+
with_buffer(rb4) do
306+
@test default_buffer(ResizeBuffer) === rb4
307+
@test default_buffer(ResizeBuffer) !== rb_default
308+
309+
with_buffer(rb5) do
310+
@test default_buffer(ResizeBuffer) === rb5
311+
@test default_buffer(ResizeBuffer) !== rb4
312+
end
313+
314+
@test default_buffer(ResizeBuffer) === rb4
315+
end
316+
@test default_buffer(ResizeBuffer) === rb_default
317+
318+
# Test that ResizeBuffer works across different tasks
319+
@test default_buffer(ResizeBuffer) === default_buffer(ResizeBuffer)
320+
@test default_buffer(ResizeBuffer) !== fetch(@async default_buffer(ResizeBuffer))
321+
@test default_buffer(ResizeBuffer) !==
322+
fetch(Threads.@spawn default_buffer(ResizeBuffer))
189323
end

0 commit comments

Comments
 (0)