| ... | ... | @@ -23,10 +23,17 @@ pub fn PriorityDequeue(comptime T: type, comptime Context: type, comptime compar |
| 23 | 23 | len: usize, |
| 24 | 24 | context: Context, |
| 25 | 25 | |
| 26 | | /// Initialize and return a new priority dequeue. |
| 27 | | pub fn init(context: Context) Self { |
| 26 | /// A priority dequeue containing no elements. |
| 27 | pub const empty: Self = .{ |
| 28 | .items = &.{}, |
| 29 | .len = 0, |
| 30 | .context = undefined, |
| 31 | }; |
| 32 | |
| 33 | /// Initialize and return a new priority dequeue with context. |
| 34 | pub fn initContext(context: Context) Self { |
| 28 | 35 | return Self{ |
| 29 | | .items = &[_]T{}, |
| 36 | .items = &.{}, |
| 30 | 37 | .len = 0, |
| 31 | 38 | .context = context, |
| 32 | 39 | }; |
| ... | ... | @@ -451,7 +458,8 @@ const PDQ = PriorityDequeue(u32, void, lessThanComparison); |
| 451 | 458 | |
| 452 | 459 | test "push and pop min" { |
| 453 | 460 | const gpa = std.testing.allocator; |
| 454 | | var queue = PDQ.init({}); |
| 461 | |
| 462 | var queue: PDQ = .empty; |
| 455 | 463 | defer queue.deinit(gpa); |
| 456 | 464 | |
| 457 | 465 | try queue.push(gpa, 54); |
| ... | ... | @@ -480,7 +488,7 @@ test "push and pop min structs" { |
| 480 | 488 | _ = context; |
| 481 | 489 | return std.math.order(a.size, b.size); |
| 482 | 490 | } |
| 483 | | }.order).init({}); |
| 491 | }.order).initContext({}); |
| 484 | 492 | defer queue.deinit(gpa); |
| 485 | 493 | |
| 486 | 494 | try queue.push(gpa, .{ .size = 54 }); |
| ... | ... | @@ -501,7 +509,7 @@ test "push and pop min structs" { |
| 501 | 509 | test "push and pop max" { |
| 502 | 510 | const gpa = std.testing.allocator; |
| 503 | 511 | |
| 504 | | var queue = PDQ.init({}); |
| 512 | var queue: PDQ = .empty; |
| 505 | 513 | defer queue.deinit(gpa); |
| 506 | 514 | |
| 507 | 515 | try queue.push(gpa, 54); |
| ... | ... | @@ -522,7 +530,7 @@ test "push and pop max" { |
| 522 | 530 | test "push and pop same min" { |
| 523 | 531 | const gpa = std.testing.allocator; |
| 524 | 532 | |
| 525 | | var queue = PDQ.init({}); |
| 533 | var queue: PDQ = .empty; |
| 526 | 534 | defer queue.deinit(gpa); |
| 527 | 535 | |
| 528 | 536 | try queue.push(gpa, 1); |
| ... | ... | @@ -543,7 +551,7 @@ test "push and pop same min" { |
| 543 | 551 | test "push and pop same max" { |
| 544 | 552 | const gpa = std.testing.allocator; |
| 545 | 553 | |
| 546 | | var queue = PDQ.init({}); |
| 554 | var queue: PDQ = .empty; |
| 547 | 555 | defer queue.deinit(gpa); |
| 548 | 556 | |
| 549 | 557 | try queue.push(gpa, 1); |
| ... | ... | @@ -564,7 +572,7 @@ test "push and pop same max" { |
| 564 | 572 | test "popOrNull empty" { |
| 565 | 573 | const gpa = std.testing.allocator; |
| 566 | 574 | |
| 567 | | var queue = PDQ.init({}); |
| 575 | var queue: PDQ = .empty; |
| 568 | 576 | defer queue.deinit(gpa); |
| 569 | 577 | |
| 570 | 578 | try expect(queue.popMin() == null); |
| ... | ... | @@ -574,7 +582,7 @@ test "popOrNull empty" { |
| 574 | 582 | test "edge case 3 elements" { |
| 575 | 583 | const gpa = std.testing.allocator; |
| 576 | 584 | |
| 577 | | var queue = PDQ.init({}); |
| 585 | var queue: PDQ = .empty; |
| 578 | 586 | defer queue.deinit(gpa); |
| 579 | 587 | |
| 580 | 588 | try queue.push(gpa, 9); |
| ... | ... | @@ -589,7 +597,7 @@ test "edge case 3 elements" { |
| 589 | 597 | test "edge case 3 elements max" { |
| 590 | 598 | const gpa = std.testing.allocator; |
| 591 | 599 | |
| 592 | | var queue = PDQ.init({}); |
| 600 | var queue: PDQ = .empty; |
| 593 | 601 | defer queue.deinit(gpa); |
| 594 | 602 | |
| 595 | 603 | try queue.push(gpa, 9); |
| ... | ... | @@ -604,7 +612,7 @@ test "edge case 3 elements max" { |
| 604 | 612 | test "peekMin" { |
| 605 | 613 | const gpa = std.testing.allocator; |
| 606 | 614 | |
| 607 | | var queue = PDQ.init({}); |
| 615 | var queue: PDQ = .empty; |
| 608 | 616 | defer queue.deinit(gpa); |
| 609 | 617 | |
| 610 | 618 | try expect(queue.peekMin() == null); |
| ... | ... | @@ -620,7 +628,7 @@ test "peekMin" { |
| 620 | 628 | test "peekMax" { |
| 621 | 629 | const gpa = std.testing.allocator; |
| 622 | 630 | |
| 623 | | var queue = PDQ.init({}); |
| 631 | var queue: PDQ = .empty; |
| 624 | 632 | defer queue.deinit(gpa); |
| 625 | 633 | |
| 626 | 634 | try expect(queue.peekMin() == null); |
| ... | ... | @@ -636,7 +644,7 @@ test "peekMax" { |
| 636 | 644 | test "sift up with odd indices, popMin" { |
| 637 | 645 | const gpa = std.testing.allocator; |
| 638 | 646 | |
| 639 | | var queue = PDQ.init({}); |
| 647 | var queue: PDQ = .empty; |
| 640 | 648 | defer queue.deinit(gpa); |
| 641 | 649 | |
| 642 | 650 | const items = [_]u32{ 15, 7, 21, 14, 13, 22, 12, 6, 7, 25, 5, 24, 11, 16, 15, 24, 2, 1 }; |
| ... | ... | @@ -653,7 +661,7 @@ test "sift up with odd indices, popMin" { |
| 653 | 661 | test "sift up with odd indices, popMax" { |
| 654 | 662 | const gpa = std.testing.allocator; |
| 655 | 663 | |
| 656 | | var queue = PDQ.init({}); |
| 664 | var queue: PDQ = .empty; |
| 657 | 665 | defer queue.deinit(gpa); |
| 658 | 666 | |
| 659 | 667 | const items = [_]u32{ 15, 7, 21, 14, 13, 22, 12, 6, 7, 25, 5, 24, 11, 16, 15, 24, 2, 1 }; |
| ... | ... | @@ -670,7 +678,7 @@ test "sift up with odd indices, popMax" { |
| 670 | 678 | test "pushSlice min" { |
| 671 | 679 | const gpa = std.testing.allocator; |
| 672 | 680 | |
| 673 | | var queue = PDQ.init({}); |
| 681 | var queue: PDQ = .empty; |
| 674 | 682 | defer queue.deinit(gpa); |
| 675 | 683 | |
| 676 | 684 | const items = [_]u32{ 15, 7, 21, 14, 13, 22, 12, 6, 7, 25, 5, 24, 11, 16, 15, 24, 2, 1 }; |
| ... | ... | @@ -685,7 +693,7 @@ test "pushSlice min" { |
| 685 | 693 | test "pushSlice max" { |
| 686 | 694 | const gpa = std.testing.allocator; |
| 687 | 695 | |
| 688 | | var queue = PDQ.init({}); |
| 696 | var queue: PDQ = .empty; |
| 689 | 697 | defer queue.deinit(gpa); |
| 690 | 698 | |
| 691 | 699 | const items = [_]u32{ 15, 7, 21, 14, 13, 22, 12, 6, 7, 25, 5, 24, 11, 16, 15, 24, 2, 1 }; |
| ... | ... | @@ -742,7 +750,7 @@ test "fromOwnedSlice" { |
| 742 | 750 | test "update min queue" { |
| 743 | 751 | const gpa = std.testing.allocator; |
| 744 | 752 | |
| 745 | | var queue = PDQ.init({}); |
| 753 | var queue: PDQ = .empty; |
| 746 | 754 | defer queue.deinit(gpa); |
| 747 | 755 | |
| 748 | 756 | try queue.push(gpa, 55); |
| ... | ... | @@ -759,7 +767,7 @@ test "update min queue" { |
| 759 | 767 | test "update same min queue" { |
| 760 | 768 | const gpa = std.testing.allocator; |
| 761 | 769 | |
| 762 | | var queue = PDQ.init({}); |
| 770 | var queue: PDQ = .empty; |
| 763 | 771 | defer queue.deinit(gpa); |
| 764 | 772 | |
| 765 | 773 | try queue.push(gpa, 1); |
| ... | ... | @@ -777,7 +785,7 @@ test "update same min queue" { |
| 777 | 785 | test "update max queue" { |
| 778 | 786 | const gpa = std.testing.allocator; |
| 779 | 787 | |
| 780 | | var queue = PDQ.init({}); |
| 788 | var queue: PDQ = .empty; |
| 781 | 789 | defer queue.deinit(gpa); |
| 782 | 790 | |
| 783 | 791 | try queue.push(gpa, 55); |
| ... | ... | @@ -795,7 +803,7 @@ test "update max queue" { |
| 795 | 803 | test "update same max queue" { |
| 796 | 804 | const gpa = std.testing.allocator; |
| 797 | 805 | |
| 798 | | var queue = PDQ.init({}); |
| 806 | var queue: PDQ = .empty; |
| 799 | 807 | defer queue.deinit(gpa); |
| 800 | 808 | |
| 801 | 809 | try queue.push(gpa, 1); |
| ... | ... | @@ -813,7 +821,7 @@ test "update same max queue" { |
| 813 | 821 | test "update after pop" { |
| 814 | 822 | const gpa = std.testing.allocator; |
| 815 | 823 | |
| 816 | | var queue = PDQ.init({}); |
| 824 | var queue: PDQ = .empty; |
| 817 | 825 | defer queue.deinit(gpa); |
| 818 | 826 | |
| 819 | 827 | try queue.push(gpa, 1); |
| ... | ... | @@ -824,7 +832,7 @@ test "update after pop" { |
| 824 | 832 | test "iterator" { |
| 825 | 833 | const gpa = std.testing.allocator; |
| 826 | 834 | |
| 827 | | var queue = PDQ.init({}); |
| 835 | var queue: PDQ = .empty; |
| 828 | 836 | var map = std.AutoHashMap(u32, void).init(testing.allocator); |
| 829 | 837 | defer { |
| 830 | 838 | queue.deinit(gpa); |
| ... | ... | @@ -848,7 +856,7 @@ test "iterator" { |
| 848 | 856 | test "pop at index" { |
| 849 | 857 | const gpa = std.testing.allocator; |
| 850 | 858 | |
| 851 | | var queue = PDQ.init({}); |
| 859 | var queue: PDQ = .empty; |
| 852 | 860 | defer queue.deinit(gpa); |
| 853 | 861 | |
| 854 | 862 | try queue.push(gpa, 3); |
| ... | ... | @@ -873,7 +881,7 @@ test "pop at index" { |
| 873 | 881 | test "iterator while empty" { |
| 874 | 882 | const gpa = std.testing.allocator; |
| 875 | 883 | |
| 876 | | var queue = PDQ.init({}); |
| 884 | var queue: PDQ = .empty; |
| 877 | 885 | defer queue.deinit(gpa); |
| 878 | 886 | |
| 879 | 887 | var it = queue.iterator(); |
| ... | ... | @@ -884,7 +892,7 @@ test "iterator while empty" { |
| 884 | 892 | test "shrinkAndFree" { |
| 885 | 893 | const gpa = std.testing.allocator; |
| 886 | 894 | |
| 887 | | var queue = PDQ.init({}); |
| 895 | var queue: PDQ = .empty; |
| 888 | 896 | defer queue.deinit(gpa); |
| 889 | 897 | |
| 890 | 898 | try queue.ensureTotalCapacity(gpa, 4); |
| ... | ... | @@ -1031,7 +1039,7 @@ test "push and pop" { |
| 1031 | 1039 | |
| 1032 | 1040 | const context = [_]u32{ 5, 3, 4, 2, 2, 8, 0 }; |
| 1033 | 1041 | |
| 1034 | | var queue = CPDQ.init(context[0..]); |
| 1042 | var queue: CPDQ = .initContext(context[0..]); |
| 1035 | 1043 | defer queue.deinit(gpa); |
| 1036 | 1044 | |
| 1037 | 1045 | try queue.push(gpa, 0); |
| ... | ... | @@ -1060,7 +1068,7 @@ test "don't compare a value to a copy of itself" { |
| 1060 | 1068 | all_cmps_unique = all_cmps_unique and (a != b); |
| 1061 | 1069 | return std.math.order(a, b); |
| 1062 | 1070 | } |
| 1063 | | }.uniqueLessThan).init({}); |
| 1071 | }.uniqueLessThan).initContext({}); |
| 1064 | 1072 | defer depq.deinit(gpa); |
| 1065 | 1073 | |
| 1066 | 1074 | try depq.push(gpa, 1); |