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