Fix edge cases in fromOwnedSlice
This commit is contained in:
@@ -166,6 +166,9 @@ pub fn PriorityQueue(comptime T: type) type {
|
||||
.allocator = allocator,
|
||||
.compareFn = compareFn,
|
||||
};
|
||||
|
||||
if (queue.len <= 1) return queue;
|
||||
|
||||
const half = (queue.len >> 1) - 1;
|
||||
var i: usize = 0;
|
||||
while (i <= half) : (i += 1) {
|
||||
@@ -352,6 +355,26 @@ test "std.PriorityQueue: addSlice" {
|
||||
}
|
||||
}
|
||||
|
||||
test "std.PriorityQueue: fromOwnedSlice trivial case 0" {
|
||||
const items = [0]u32{};
|
||||
const queue_items = try testing.allocator.dupe(u32, &items);
|
||||
var queue = PQ.fromOwnedSlice(testing.allocator, lessThan, queue_items[0..]);
|
||||
defer queue.deinit();
|
||||
expectEqual(@as(usize, 0), queue.len);
|
||||
expect(queue.removeOrNull() == null);
|
||||
}
|
||||
|
||||
test "std.PriorityQueue: fromOwnedSlice trivial case 1" {
|
||||
const items = [1]u32{1};
|
||||
const queue_items = try testing.allocator.dupe(u32, &items);
|
||||
var queue = PQ.fromOwnedSlice(testing.allocator, lessThan, queue_items[0..]);
|
||||
defer queue.deinit();
|
||||
|
||||
expectEqual(@as(usize, 1), queue.len);
|
||||
expectEqual(items[0], queue.remove());
|
||||
expect(queue.removeOrNull() == null);
|
||||
}
|
||||
|
||||
test "std.PriorityQueue: fromOwnedSlice" {
|
||||
const items = [_]u32{ 15, 7, 21, 14, 13, 22, 12, 6, 7, 25, 5, 24, 11, 16, 15, 24, 2, 1 };
|
||||
const heap_items = try testing.allocator.dupe(u32, items[0..]);
|
||||
|
||||
Reference in New Issue
Block a user