Serenity Operating System
at master 67 lines 1.6 kB view raw
1/* 2 * Copyright (c) 2021, Idan Horowitz <idan.horowitz@serenityos.org> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#include <LibTest/TestCase.h> 8 9#include <AK/BinaryHeap.h> 10#include <AK/DeprecatedString.h> 11 12TEST_CASE(construct) 13{ 14 BinaryHeap<int, int, 5> empty; 15 EXPECT(empty.is_empty()); 16 EXPECT(empty.size() == 0); 17} 18 19TEST_CASE(construct_from_existing) 20{ 21 int keys[] = { 3, 2, 1 }; 22 char values[] = { 'c', 'b', 'a' }; 23 BinaryHeap<int, char, 5> from_existing(keys, values, 3); 24 EXPECT(from_existing.size() == 3); 25 EXPECT_EQ(from_existing.pop_min(), 'a'); 26 EXPECT_EQ(from_existing.pop_min(), 'b'); 27 EXPECT_EQ(from_existing.pop_min(), 'c'); 28} 29 30TEST_CASE(populate_int) 31{ 32 BinaryHeap<int, int, 5> ints; 33 ints.insert(1, 10); 34 ints.insert(3, 20); 35 ints.insert(2, 30); 36 EXPECT_EQ(ints.size(), 3u); 37 EXPECT_EQ(ints.pop_min(), 10); 38 EXPECT_EQ(ints.size(), 2u); 39 EXPECT_EQ(ints.pop_min(), 30); 40 EXPECT_EQ(ints.size(), 1u); 41 EXPECT_EQ(ints.pop_min(), 20); 42 EXPECT_EQ(ints.size(), 0u); 43} 44 45TEST_CASE(populate_string) 46{ 47 BinaryHeap<int, DeprecatedString, 5> strings; 48 strings.insert(1, "ABC"); 49 strings.insert(2, "DEF"); 50 EXPECT_EQ(strings.size(), 2u); 51 EXPECT_EQ(strings.pop_min(), "ABC"); 52 EXPECT_EQ(strings.pop_min(), "DEF"); 53 EXPECT(strings.is_empty()); 54} 55 56TEST_CASE(large_populate_reverse) 57{ 58 BinaryHeap<int, int, 1024> ints; 59 for (int i = 1023; i >= 0; i--) { 60 ints.insert(i, i); 61 } 62 EXPECT_EQ(ints.size(), 1024u); 63 for (int i = 0; i < 1024; i++) { 64 EXPECT_EQ(ints.peek_min(), i); 65 EXPECT_EQ(ints.pop_min(), i); 66 } 67}