Browse Source

cleanup slice sorting with indices changes

Phil 3 years ago
parent
commit
d45661c405
2 changed files with 7 additions and 4 deletions
  1. 3 3
      core/slice/sort.odin
  2. 4 1
      tests/core/slice/test_core_slice.odin

+ 3 - 3
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"

+ 4 - 1
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 {