| ... | ... | @@ -149,28 +149,14 @@ pub fn PriorityDequeue(comptime T: type, comptime Context: type, comptime compar |
| 149 | 149 | return self.bestItemAtIndices(1, 2, .gt).index; |
| 150 | 150 | } |
| 151 | 151 | |
| 152 | | /// Pop the smallest element from the dequeue. Returns |
| 153 | | /// `null` if empty. |
| 154 | | pub fn popMinOrNull(self: *Self) ?T { |
| 155 | | return if (self.len > 0) self.popMin() else null; |
| 156 | | } |
| 157 | | |
| 158 | | /// Remove and return the smallest element from the |
| 159 | | /// dequeue. |
| 160 | | pub fn popMin(self: *Self) T { |
| 161 | | return self.popIndex(0); |
| 162 | | } |
| 163 | | |
| 164 | | /// Pop the largest element from the dequeue. Returns |
| 165 | | /// `null` if empty. |
| 166 | | pub fn popMaxOrNull(self: *Self) ?T { |
| 167 | | return if (self.len > 0) self.popMax() else null; |
| 152 | /// Remove and return the smallest element from the dequeue, or `null` if empty |
| 153 | pub fn popMin(self: *Self) ?T { |
| 154 | return if (self.len > 0) self.popIndex(0) else null; |
| 168 | 155 | } |
| 169 | 156 | |
| 170 | | /// Remove and return the largest element from the |
| 171 | | /// dequeue. |
| 172 | | pub fn popMax(self: *Self) T { |
| 173 | | return self.popIndex(self.maxIndex().?); |
| 157 | /// Remove and return the largest element from the dequeue, or `null` if empty |
| 158 | pub fn popMax(self: *Self) ?T { |
| 159 | return if (self.len > 0) self.popIndex(self.maxIndex().?) else null; |
| 174 | 160 | } |
| 175 | 161 | |
| 176 | 162 | /// Remove and return element at index. Indices are in the |
| ... | ... | @@ -504,12 +490,12 @@ test "push and pop min structs" { |
| 504 | 490 | try queue.push(gpa, .{ .size = 25 }); |
| 505 | 491 | try queue.push(gpa, .{ .size = 13 }); |
| 506 | 492 | |
| 507 | | try expectEqual(@as(u32, 7), queue.popMin().size); |
| 508 | | try expectEqual(@as(u32, 12), queue.popMin().size); |
| 509 | | try expectEqual(@as(u32, 13), queue.popMin().size); |
| 510 | | try expectEqual(@as(u32, 23), queue.popMin().size); |
| 511 | | try expectEqual(@as(u32, 25), queue.popMin().size); |
| 512 | | try expectEqual(@as(u32, 54), queue.popMin().size); |
| 493 | try expectEqual(@as(u32, 7), queue.popMin().?.size); |
| 494 | try expectEqual(@as(u32, 12), queue.popMin().?.size); |
| 495 | try expectEqual(@as(u32, 13), queue.popMin().?.size); |
| 496 | try expectEqual(@as(u32, 23), queue.popMin().?.size); |
| 497 | try expectEqual(@as(u32, 25), queue.popMin().?.size); |
| 498 | try expectEqual(@as(u32, 54), queue.popMin().?.size); |
| 513 | 499 | } |
| 514 | 500 | |
| 515 | 501 | test "push and pop max" { |
| ... | ... | @@ -581,8 +567,8 @@ test "popOrNull empty" { |
| 581 | 567 | var queue = PDQ.init({}); |
| 582 | 568 | defer queue.deinit(gpa); |
| 583 | 569 | |
| 584 | | try expect(queue.popMinOrNull() == null); |
| 585 | | try expect(queue.popMaxOrNull() == null); |
| 570 | try expect(queue.popMin() == null); |
| 571 | try expect(queue.popMax() == null); |
| 586 | 572 | } |
| 587 | 573 | |
| 588 | 574 | test "edge case 3 elements" { |
| ... | ... | @@ -721,7 +707,7 @@ test "fromOwnedSlice trivial case 0" { |
| 721 | 707 | defer queue.deinit(gpa); |
| 722 | 708 | |
| 723 | 709 | try expectEqual(@as(usize, 0), queue.len); |
| 724 | | try expect(queue.popMinOrNull() == null); |
| 710 | try expect(queue.popMin() == null); |
| 725 | 711 | } |
| 726 | 712 | |
| 727 | 713 | test "fromOwnedSlice trivial case 1" { |
| ... | ... | @@ -735,7 +721,7 @@ test "fromOwnedSlice trivial case 1" { |
| 735 | 721 | |
| 736 | 722 | try expectEqual(@as(usize, 1), queue.len); |
| 737 | 723 | try expectEqual(items[0], queue.popMin()); |
| 738 | | try expect(queue.popMinOrNull() == null); |
| 724 | try expect(queue.popMin() == null); |
| 739 | 725 | } |
| 740 | 726 | |
| 741 | 727 | test "fromOwnedSlice" { |
| ... | ... | @@ -881,7 +867,7 @@ test "pop at index" { |
| 881 | 867 | try expectEqual(queue.popIndex(two_idx), 2); |
| 882 | 868 | try expectEqual(queue.popMin(), 1); |
| 883 | 869 | try expectEqual(queue.popMin(), 3); |
| 884 | | try expectEqual(queue.popMinOrNull(), null); |
| 870 | try expectEqual(queue.popMin(), null); |
| 885 | 871 | } |
| 886 | 872 | |
| 887 | 873 | test "iterator while empty" { |
| ... | ... | @@ -917,7 +903,7 @@ test "shrinkAndFree" { |
| 917 | 903 | try expectEqual(@as(u32, 3), queue.popMax()); |
| 918 | 904 | try expectEqual(@as(u32, 2), queue.popMax()); |
| 919 | 905 | try expectEqual(@as(u32, 1), queue.popMax()); |
| 920 | | try expect(queue.popMaxOrNull() == null); |
| 906 | try expect(queue.popMax() == null); |
| 921 | 907 | } |
| 922 | 908 | |
| 923 | 909 | test "fuzz testing min" { |
| ... | ... | @@ -942,7 +928,7 @@ fn fuzzTestMin(rng: std.Random, comptime queue_size: usize) !void { |
| 942 | 928 | defer queue.deinit(gpa); |
| 943 | 929 | |
| 944 | 930 | var last_removed: ?u32 = null; |
| 945 | | while (queue.popMinOrNull()) |next| { |
| 931 | while (queue.popMin()) |next| { |
| 946 | 932 | if (last_removed) |last| { |
| 947 | 933 | try expect(last <= next); |
| 948 | 934 | } |
| ... | ... | @@ -972,7 +958,7 @@ fn fuzzTestMax(rng: std.Random, queue_size: usize) !void { |
| 972 | 958 | defer queue.deinit(gpa); |
| 973 | 959 | |
| 974 | 960 | var last_removed: ?u32 = null; |
| 975 | | while (queue.popMaxOrNull()) |next| { |
| 961 | while (queue.popMax()) |next| { |
| 976 | 962 | if (last_removed) |last| { |
| 977 | 963 | try expect(last >= next); |
| 978 | 964 | } |
| ... | ... | @@ -1006,13 +992,13 @@ fn fuzzTestMinMax(rng: std.Random, queue_size: usize) !void { |
| 1006 | 992 | var i: usize = 0; |
| 1007 | 993 | while (i < queue_size) : (i += 1) { |
| 1008 | 994 | if (i % 2 == 0) { |
| 1009 | | const next = queue.popMin(); |
| 995 | const next = queue.popMin().?; |
| 1010 | 996 | if (last_min) |last| { |
| 1011 | 997 | try expect(last <= next); |
| 1012 | 998 | } |
| 1013 | 999 | last_min = next; |
| 1014 | 1000 | } else { |
| 1015 | | const next = queue.popMax(); |
| 1001 | const next = queue.popMax().?; |
| 1016 | 1002 | if (last_max) |last| { |
| 1017 | 1003 | try expect(last >= next); |
| 1018 | 1004 | } |