blob: cc176d937f73e8f9f1bf724550a25f3e2fdff77b [file] [log] [blame]
Ben Murdoch4a90d5f2016-03-22 12:00:34 +00001// Copyright 2015 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "src/locked-queue-inl.h"
6#include "testing/gtest/include/gtest/gtest.h"
7
8namespace {
9
10typedef int Record;
11
12} // namespace
13
14namespace v8 {
15namespace internal {
16
17TEST(LockedQueue, ConstructorEmpty) {
18 LockedQueue<Record> queue;
19 EXPECT_TRUE(queue.IsEmpty());
20}
21
22
23TEST(LockedQueue, SingleRecordEnqueueDequeue) {
24 LockedQueue<Record> queue;
25 EXPECT_TRUE(queue.IsEmpty());
26 queue.Enqueue(1);
27 EXPECT_FALSE(queue.IsEmpty());
28 Record a = -1;
29 bool success = queue.Dequeue(&a);
30 EXPECT_TRUE(success);
31 EXPECT_EQ(a, 1);
32 EXPECT_TRUE(queue.IsEmpty());
33}
34
35
36TEST(LockedQueue, Peek) {
37 LockedQueue<Record> queue;
38 EXPECT_TRUE(queue.IsEmpty());
39 queue.Enqueue(1);
40 EXPECT_FALSE(queue.IsEmpty());
41 Record a = -1;
42 bool success = queue.Peek(&a);
43 EXPECT_TRUE(success);
44 EXPECT_EQ(a, 1);
45 EXPECT_FALSE(queue.IsEmpty());
46 success = queue.Dequeue(&a);
47 EXPECT_TRUE(success);
48 EXPECT_EQ(a, 1);
49 EXPECT_TRUE(queue.IsEmpty());
50}
51
52
53TEST(LockedQueue, PeekOnEmpty) {
54 LockedQueue<Record> queue;
55 EXPECT_TRUE(queue.IsEmpty());
56 Record a = -1;
57 bool success = queue.Peek(&a);
58 EXPECT_FALSE(success);
59}
60
61
62TEST(LockedQueue, MultipleRecords) {
63 LockedQueue<Record> queue;
64 EXPECT_TRUE(queue.IsEmpty());
65 queue.Enqueue(1);
66 EXPECT_FALSE(queue.IsEmpty());
67 for (int i = 2; i <= 5; ++i) {
68 queue.Enqueue(i);
69 EXPECT_FALSE(queue.IsEmpty());
70 }
71 Record rec = 0;
72 for (int i = 1; i <= 4; ++i) {
73 EXPECT_FALSE(queue.IsEmpty());
74 queue.Dequeue(&rec);
75 EXPECT_EQ(i, rec);
76 }
77 for (int i = 6; i <= 12; ++i) {
78 queue.Enqueue(i);
79 EXPECT_FALSE(queue.IsEmpty());
80 }
81 for (int i = 5; i <= 12; ++i) {
82 EXPECT_FALSE(queue.IsEmpty());
83 queue.Dequeue(&rec);
84 EXPECT_EQ(i, rec);
85 }
86 EXPECT_TRUE(queue.IsEmpty());
87}
88
89} // namespace internal
90} // namespace v8