Files
Odin/tests/issues/test_pr_6476.odin
2026-03-25 19:55:38 -04:00

36 lines
1.1 KiB
Odin

package test_issues
import "core:testing"
import "core:mem"
// Test for a problem encountered with the scratch allocator.
// Say you have a scratch allocator with an arena size of N.
// If you make an allocation whose size is <= N but greater than
// the amount of free space left in the arena, the allocator
// will return a slice of memory from the start of the arena,
// overlapping previous allocations. (the expected
// behavior is it satisfies the request with the backup allocator)
@test
test_scratch_smash :: proc(t: ^testing.T) {
// setup
frAlloc: mem.Scratch
err := mem.scratch_init(&frAlloc, 1 * mem.Kilobyte)
testing.expect(t, err == nil)
talloc := mem.scratch_allocator(&frAlloc)
defer mem.scratch_destroy(&frAlloc)
// First allocation fits in arena.
a1 := make([]byte, 512, talloc)
// Second allocation does not fit in the free space, but is
// <= the arena size.
a2 := make([]byte, 1024, talloc)
// Should be true, but bug in scratch allocator returns space
// overlapping a1 when allocating a2.
testing.expect(t, &a1[0] != &a2[0])
}