| @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); | |
| } | |