annotate tests/libserver/id/main.cpp @ 0:8991989c4708

Initial import
author David Demelier <markand@malikania.fr>
date Tue, 22 Mar 2016 18:26:05 +0100
parents
children 45b3c770803c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * main.cpp -- test Id
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2013-2016 Malikania Authors
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #include <cstdint>
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #include <thread>
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
21
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 #include <gtest/gtest.h>
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
23
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 #include <malikania/Id.h>
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
25
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 using namespace malikania;
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
27
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 /* --------------------------------------------------------
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 * Basic use case
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 * -------------------------------------------------------- */
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
31
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 class TestId : public testing::Test {
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 protected:
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 IdGen<unsigned> m_idgen;
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
35
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 public:
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 ~TestId()
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 {
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 m_idgen.reset();
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 }
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 };
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
42
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 TEST_F(TestId, simple)
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 {
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 ASSERT_EQ(0U, m_idgen.next());
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 ASSERT_EQ(1U, m_idgen.next());
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 ASSERT_EQ(2U, m_idgen.next());
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 ASSERT_EQ(3U, m_idgen.next());
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 ASSERT_EQ(4U, m_idgen.next());
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 }
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
51
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 TEST_F(TestId, reset)
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 {
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 m_idgen.next();
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 m_idgen.next();
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 m_idgen.next();
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
57
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 m_idgen.reset();
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
59
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 ASSERT_EQ(0U, m_idgen.next());
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
61 }
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
62
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
63 TEST_F(TestId, release1)
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 {
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 m_idgen.next(); // 0
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 m_idgen.next(); // 1
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 m_idgen.next(); // 2
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 m_idgen.release(1);
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
69
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
70 /*
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 * 0 and 2 are currently in use.
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 *
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
73 * The next id must be 1 and then 3.
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 */
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 ASSERT_EQ(1U, m_idgen.next());
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
76 ASSERT_EQ(3U, m_idgen.next());
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
77 }
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
78
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
79 TEST_F(TestId, release2)
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
80 {
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 m_idgen.next(); // 0
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
82 m_idgen.next(); // 1
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
83 m_idgen.next(); // 2
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 m_idgen.release(1);
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
85 m_idgen.release(0);
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
86
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 /*
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
88 * Only 2 is in use, next id must be:
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
89 *
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
90 * - 1
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 * - 0
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
92 * - 3
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
93 */
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
94 ASSERT_EQ(1U, m_idgen.next());
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
95 ASSERT_EQ(0U, m_idgen.next());
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
96 ASSERT_EQ(3U, m_idgen.next());
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
97 }
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
98
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
99 /* --------------------------------------------------------
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
100 * Id RAII class
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
101 * -------------------------------------------------------- */
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
102
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
103 TEST(IdLocker, basic)
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
104 {
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
105 IdGen<int8_t> gen;
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
106 Id<int8_t> id(gen);
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
107
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
108 ASSERT_EQ(0, id);
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
109 }
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
110
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
111 TEST(IdLocker, two)
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
112 {
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
113 IdGen<int8_t> gen;
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
114 Id<int8_t> id(gen);
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
115 Id<int8_t> id2(gen);
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
116
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
117 ASSERT_EQ(0, id);
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
118 ASSERT_EQ(1, id2);
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
119 }
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
120
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
121 TEST(IdLocker, already)
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
122 {
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
123 IdGen<int8_t> gen;
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
124 Id<int8_t> id(gen, gen.next());
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
125
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
126 ASSERT_EQ(0, id);
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
127 }
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
128
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
129 /* --------------------------------------------------------
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
130 * Limit test
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
131 * -------------------------------------------------------- */
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
132
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
133 TEST(Limits, max)
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
134 {
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
135 IdGen<int8_t> idgen;
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
136 int8_t last;
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
137
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
138 try {
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
139 for (int i = 0; i < 127; ++i) {
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
140 last = idgen.next();
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
141 }
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
142 } catch (const std::exception &ex) {
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
143 FAIL() << ex.what();
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
144 }
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
145
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
146 ASSERT_EQ(126, last);
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
147 }
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
148
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
149 TEST(Limits, fail)
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
150 {
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
151 IdGen<int8_t> idgen;
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
152 int8_t last;
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
153
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
154 try {
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
155 for (int i = 0; i < 200; ++i) {
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
156 last = idgen.next();
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
157 }
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
158
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
159 FAIL() << "Exception expected";
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
160 } catch (const std::exception &ex) {
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
161 }
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
162
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
163 ASSERT_EQ(126, last);
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
164 }
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
165
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
166 int main(int argc, char **argv)
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
167 {
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
168 testing::InitGoogleTest(&argc, argv);
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
169
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
170 return RUN_ALL_TESTS();
8991989c4708 Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
171 }