diff --git a/core/slice/sort.odin b/core/slice/sort.odin index 5319fbaaa..e0303a65a 100644 --- a/core/slice/sort.odin +++ b/core/slice/sort.odin @@ -60,17 +60,17 @@ sort_by_indices_overwrite :: proc(data: $T/[]$E, indices: []int) { // sort sorts a slice and returns a slice of the original indices // This sort is not guaranteed to be stable sort_with_indices :: proc(data: $T/[]$E, allocator := context.allocator) -> (indices: []int) where ORD(E) { + indices = make([]int, len(data), allocator) when size_of(E) != 0 { if n := len(data); n > 1 { - indices = make([]int, len(data), allocator) for _, idx in indices { indices[idx] = idx } _quick_sort_general_with_indices(data, indices, 0, n, _max_depth(n), struct{}{}, .Ordered) - return indices } + return indices } - return nil + return indices } // sort_by sorts a slice with a given procedure to test whether two values are ordered "i < j" diff --git a/tests/core/slice/test_core_slice.odin b/tests/core/slice/test_core_slice.odin index 8caf911e8..08dc2d3ae 100644 --- a/tests/core/slice/test_core_slice.odin +++ b/tests/core/slice/test_core_slice.odin @@ -51,8 +51,11 @@ test_sort_with_indices :: proc(t: ^testing.T) { r := rand.create(seed) vals := make([]u64, test_size) - defer delete(vals) r_idx := make([]int, test_size) // Reverse index + defer { + delete(vals) + delete(r_idx) + } // Set up test values for _, i in vals {