zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 23252c27beda48df95beb7bcf53b900e93fc7441 (tree)
parent 535722b37419f821650a3765e20880a3186ceff3
Author: Saurabh Mishra <saurabh.m@proton.me>
Date:   Wed, 18 Feb 2026 11:58:13 -0800

merge `popMinOrNull` into `popMin` and `popMaxOrNull` into `popMax`, and update tests

Diffstat:
Mlib/std/priority_dequeue.zig | 58++++++++++++++++++++++------------------------------------
1 file changed, 22 insertions(+), 36 deletions(-)

diff --git a/lib/std/priority_dequeue.zig b/lib/std/priority_dequeue.zig @@ -149,28 +149,14 @@ pub fn PriorityDequeue(comptime T: type, comptime Context: type, comptime compar return self.bestItemAtIndices(1, 2, .gt).index; } - /// Pop the smallest element from the dequeue. Returns - /// `null` if empty. - pub fn popMinOrNull(self: *Self) ?T { - return if (self.len > 0) self.popMin() else null; - } - - /// Remove and return the smallest element from the - /// dequeue. - pub fn popMin(self: *Self) T { - return self.popIndex(0); - } - - /// Pop the largest element from the dequeue. Returns - /// `null` if empty. - pub fn popMaxOrNull(self: *Self) ?T { - return if (self.len > 0) self.popMax() else null; + /// Remove and return the smallest element from the dequeue, or `null` if empty + pub fn popMin(self: *Self) ?T { + return if (self.len > 0) self.popIndex(0) else null; } - /// Remove and return the largest element from the - /// dequeue. - pub fn popMax(self: *Self) T { - return self.popIndex(self.maxIndex().?); + /// Remove and return the largest element from the dequeue, or `null` if empty + pub fn popMax(self: *Self) ?T { + return if (self.len > 0) self.popIndex(self.maxIndex().?) else null; } /// Remove and return element at index. Indices are in the @@ -504,12 +490,12 @@ test "push and pop min structs" { try queue.push(gpa, .{ .size = 25 }); try queue.push(gpa, .{ .size = 13 }); - try expectEqual(@as(u32, 7), queue.popMin().size); - try expectEqual(@as(u32, 12), queue.popMin().size); - try expectEqual(@as(u32, 13), queue.popMin().size); - try expectEqual(@as(u32, 23), queue.popMin().size); - try expectEqual(@as(u32, 25), queue.popMin().size); - try expectEqual(@as(u32, 54), queue.popMin().size); + try expectEqual(@as(u32, 7), queue.popMin().?.size); + try expectEqual(@as(u32, 12), queue.popMin().?.size); + try expectEqual(@as(u32, 13), queue.popMin().?.size); + try expectEqual(@as(u32, 23), queue.popMin().?.size); + try expectEqual(@as(u32, 25), queue.popMin().?.size); + try expectEqual(@as(u32, 54), queue.popMin().?.size); } test "push and pop max" { @@ -581,8 +567,8 @@ test "popOrNull empty" { var queue = PDQ.init({}); defer queue.deinit(gpa); - try expect(queue.popMinOrNull() == null); - try expect(queue.popMaxOrNull() == null); + try expect(queue.popMin() == null); + try expect(queue.popMax() == null); } test "edge case 3 elements" { @@ -721,7 +707,7 @@ test "fromOwnedSlice trivial case 0" { defer queue.deinit(gpa); try expectEqual(@as(usize, 0), queue.len); - try expect(queue.popMinOrNull() == null); + try expect(queue.popMin() == null); } test "fromOwnedSlice trivial case 1" { @@ -735,7 +721,7 @@ test "fromOwnedSlice trivial case 1" { try expectEqual(@as(usize, 1), queue.len); try expectEqual(items[0], queue.popMin()); - try expect(queue.popMinOrNull() == null); + try expect(queue.popMin() == null); } test "fromOwnedSlice" { @@ -881,7 +867,7 @@ test "pop at index" { try expectEqual(queue.popIndex(two_idx), 2); try expectEqual(queue.popMin(), 1); try expectEqual(queue.popMin(), 3); - try expectEqual(queue.popMinOrNull(), null); + try expectEqual(queue.popMin(), null); } test "iterator while empty" { @@ -917,7 +903,7 @@ test "shrinkAndFree" { try expectEqual(@as(u32, 3), queue.popMax()); try expectEqual(@as(u32, 2), queue.popMax()); try expectEqual(@as(u32, 1), queue.popMax()); - try expect(queue.popMaxOrNull() == null); + try expect(queue.popMax() == null); } test "fuzz testing min" { @@ -942,7 +928,7 @@ fn fuzzTestMin(rng: std.Random, comptime queue_size: usize) !void { defer queue.deinit(gpa); var last_removed: ?u32 = null; - while (queue.popMinOrNull()) |next| { + while (queue.popMin()) |next| { if (last_removed) |last| { try expect(last <= next); } @@ -972,7 +958,7 @@ fn fuzzTestMax(rng: std.Random, queue_size: usize) !void { defer queue.deinit(gpa); var last_removed: ?u32 = null; - while (queue.popMaxOrNull()) |next| { + while (queue.popMax()) |next| { if (last_removed) |last| { try expect(last >= next); } @@ -1006,13 +992,13 @@ fn fuzzTestMinMax(rng: std.Random, queue_size: usize) !void { var i: usize = 0; while (i < queue_size) : (i += 1) { if (i % 2 == 0) { - const next = queue.popMin(); + const next = queue.popMin().?; if (last_min) |last| { try expect(last <= next); } last_min = next; } else { - const next = queue.popMax(); + const next = queue.popMax().?; if (last_max) |last| { try expect(last >= next); }