Serenity Operating System
1/*
2 * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#include <LibTest/TestCase.h>
8
9#include <AK/CircularQueue.h>
10#include <AK/DeprecatedString.h>
11
12TEST_CASE(basic)
13{
14 CircularQueue<int, 3> ints;
15 EXPECT(ints.is_empty());
16 ints.enqueue(1);
17 ints.enqueue(2);
18 ints.enqueue(3);
19 EXPECT_EQ(ints.size(), 3u);
20
21 ints.enqueue(4);
22 EXPECT_EQ(ints.size(), 3u);
23 EXPECT_EQ(ints.dequeue(), 2);
24 EXPECT_EQ(ints.dequeue(), 3);
25 EXPECT_EQ(ints.dequeue(), 4);
26 EXPECT_EQ(ints.size(), 0u);
27}
28
29TEST_CASE(complex_type)
30{
31 CircularQueue<DeprecatedString, 2> strings;
32
33 strings.enqueue("ABC");
34 strings.enqueue("DEF");
35
36 EXPECT_EQ(strings.size(), 2u);
37
38 strings.enqueue("abc");
39 strings.enqueue("def");
40
41 EXPECT_EQ(strings.dequeue(), "abc");
42 EXPECT_EQ(strings.dequeue(), "def");
43}
44
45TEST_CASE(complex_type_clear)
46{
47 CircularQueue<DeprecatedString, 5> strings;
48 strings.enqueue("xxx");
49 strings.enqueue("xxx");
50 strings.enqueue("xxx");
51 strings.enqueue("xxx");
52 strings.enqueue("xxx");
53 EXPECT_EQ(strings.size(), 5u);
54 strings.clear();
55 EXPECT_EQ(strings.size(), 0u);
56}
57
58struct ConstructorCounter {
59 static unsigned s_num_constructor_calls;
60 ConstructorCounter() { ++s_num_constructor_calls; }
61};
62unsigned ConstructorCounter::s_num_constructor_calls = 0;
63
64TEST_CASE(should_not_call_value_type_constructor_when_created)
65{
66 CircularQueue<ConstructorCounter, 10> queue;
67 EXPECT_EQ(0u, ConstructorCounter::s_num_constructor_calls);
68}