| @system unittest |
| { |
| import std.container.binaryheap; |
| |
| import std.algorithm.comparison : equal; |
| import std.range : take; |
| auto maxHeap = heapify([4, 7, 3, 1, 5]); |
| assert(maxHeap.take(3).equal([7, 5, 4])); |
| |
| auto minHeap = heapify!"a > b"([4, 7, 3, 1, 5]); |
| assert(minHeap.take(3).equal([1, 3, 4])); |
| } |
| |
| @system unittest |
| { |
| import std.container.binaryheap; |
| |
| import std.algorithm.comparison : equal; |
| int[] a = [ 4, 1, 3, 2, 16, 9, 10, 14, 8, 7 ]; |
| auto h = heapify(a); |
| // largest element |
| assert(h.front == 16); |
| // a has the heap property |
| assert(equal(a, [ 16, 14, 10, 8, 7, 9, 3, 2, 4, 1 ])); |
| } |
| |
| @system unittest |
| { |
| import std.container.binaryheap; |
| |
| import std.algorithm.comparison : equal; |
| import std.range : take; |
| int[] a = [4, 1, 3, 2, 16, 9, 10, 14, 8, 7]; |
| auto top5 = heapify(a).take(5); |
| assert(top5.equal([16, 14, 10, 9, 8])); |
| } |
| |
| @system unittest |
| { |
| import std.container.binaryheap; |
| |
| import std.conv : to; |
| import std.range.primitives; |
| { |
| // example from "Introduction to Algorithms" Cormen et al., p 146 |
| int[] a = [ 4, 1, 3, 2, 16, 9, 10, 14, 8, 7 ]; |
| auto h = heapify(a); |
| h = heapify!"a < b"(a); |
| assert(h.front == 16); |
| assert(a == [ 16, 14, 10, 8, 7, 9, 3, 2, 4, 1 ]); |
| auto witness = [ 16, 14, 10, 9, 8, 7, 4, 3, 2, 1 ]; |
| for (; !h.empty; h.removeFront(), witness.popFront()) |
| { |
| assert(!witness.empty); |
| assert(witness.front == h.front); |
| } |
| assert(witness.empty); |
| } |
| { |
| int[] a = [ 4, 1, 3, 2, 16, 9, 10, 14, 8, 7 ]; |
| int[] b = new int[a.length]; |
| BinaryHeap!(int[]) h = BinaryHeap!(int[])(b, 0); |
| foreach (e; a) |
| { |
| h.insert(e); |
| } |
| assert(b == [ 16, 14, 10, 8, 7, 3, 9, 1, 4, 2 ], to!string(b)); |
| } |
| } |
| |
| @system unittest |
| { |
| import std.container.binaryheap; |
| |
| import std.stdio; |
| import std.algorithm.comparison : equal; |
| import std.container.binaryheap; |
| |
| int[] a = [ 4, 1, 3, 2, 16, 9, 10, 14, 8, 7 ]; |
| auto h = heapify(a); |
| |
| // Internal representation of Binary Heap tree |
| assert(a.equal([16, 14, 10, 8, 7, 9, 3, 2, 4, 1])); |
| |
| h.replaceFront(30); |
| // Value 16 was replaced by 30 |
| assert(a.equal([30, 14, 10, 8, 7, 9, 3, 2, 4, 1])); |
| |
| // Making changes to the Store will be seen in the Heap |
| a[0] = 40; |
| assert(h.front() == 40); |
| |
| // Inserting a new element will reallocate the Store, leaving |
| // the original Store unchanged. |
| h.insert(20); |
| assert(a.equal([40, 14, 10, 8, 7, 9, 3, 2, 4, 1])); |
| |
| // Making changes to the original Store will not affect the Heap anymore |
| a[0] = 60; |
| assert(h.front() == 40); |
| } |
| |