From 1452693183fb35e535a6e17742bd147c95174339 Mon Sep 17 00:00:00 2001 From: Martin Janiczek Date: Thu, 28 Sep 2023 00:36:05 +0200 Subject: [PATCH] AK: Add randomized tests for BinaryHeap --- Tests/AK/TestBinaryHeap.cpp | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/Tests/AK/TestBinaryHeap.cpp b/Tests/AK/TestBinaryHeap.cpp index 5ac1cc953c..8388c48d56 100644 --- a/Tests/AK/TestBinaryHeap.cpp +++ b/Tests/AK/TestBinaryHeap.cpp @@ -9,6 +9,8 @@ #include #include +using namespace Test::Randomized; + TEST_CASE(construct) { BinaryHeap empty; @@ -65,3 +67,38 @@ TEST_CASE(large_populate_reverse) EXPECT_EQ(ints.pop_min(), i); } } + +RANDOMIZED_TEST_CASE(pop_min_is_min) +{ + GEN(vec, Gen::vector(1, 10, []() { return Gen::unsigned_int(); })); + + auto sorted { vec }; + AK::quick_sort(sorted); + + BinaryHeap heap; + + // insert in a non-sorted order + for (u32 n : vec) { + heap.insert(n, n); + } + + // check in a sorted order + for (u32 sorted_n : sorted) { + EXPECT_EQ(heap.pop_min(), sorted_n); + } +} + +RANDOMIZED_TEST_CASE(peek_min_same_as_pop_min) +{ + GEN(vec, Gen::vector(1, 10, []() { return Gen::unsigned_int(); })); + BinaryHeap heap; + for (u32 n : vec) { + heap.insert(n, n); + } + + while (!heap.is_empty()) { + u32 peeked = heap.peek_min(); + u32 popped = heap.pop_min(); + EXPECT_EQ(peeked, popped); + } +}