45 lines
1004 B
Crystal
45 lines
1004 B
Crystal
|
require "./spec_helper"
|
||
|
|
||
|
describe Array do
|
||
|
describe "#heapify" do
|
||
|
it "preserves the elements in the array" do
|
||
|
a = Array(Int32).new(20) { rand(10) }
|
||
|
a.sort.should eq(a.clone.heapify!.sort)
|
||
|
end
|
||
|
|
||
|
it "creates an array with proper ordering" do
|
||
|
a = Array(Int32).new(20) { rand(10) }
|
||
|
a.heapify!
|
||
|
a.is_heap?.should be_true
|
||
|
end
|
||
|
|
||
|
it "maintains heap property while popping" do
|
||
|
a = Array(Int32).new(20) { rand(10) }
|
||
|
a.heapify!
|
||
|
20.times do |i|
|
||
|
a.heap_pop
|
||
|
a.is_heap?.should be_true
|
||
|
end
|
||
|
end
|
||
|
|
||
|
it "maintains heap property while pushing" do
|
||
|
a = [] of Int32
|
||
|
20.times do
|
||
|
a.heap_push(rand 10)
|
||
|
a.is_heap?.should be_true
|
||
|
end
|
||
|
end
|
||
|
|
||
|
it "pops numbers in descending order" do
|
||
|
a = Array(Int32).new(20) { rand(10) }
|
||
|
a.heapify!
|
||
|
last = Int32::MAX
|
||
|
20.times do
|
||
|
popped = a.heap_pop
|
||
|
popped.should be <= last
|
||
|
last = popped
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|