3 * Copyright (c) 2020 Project CHIP Authors
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
21 * This file implements a unit test suite for CHIP SafeInt functions
25 #include <support/SafeInt.h>
26 #include <support/UnitTestRegistration.h>
28 #include <nlunit-test.h>
32 static void TestCanCastTo_Int8(nlTestSuite * inSuite, void * inContext)
34 NL_TEST_ASSERT(inSuite, CanCastTo<uint8_t>(0));
35 NL_TEST_ASSERT(inSuite, CanCastTo<uint8_t>(127));
36 NL_TEST_ASSERT(inSuite, CanCastTo<uint8_t>(128));
37 NL_TEST_ASSERT(inSuite, CanCastTo<uint8_t>(129));
38 NL_TEST_ASSERT(inSuite, CanCastTo<uint8_t>(255));
39 NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(256));
40 NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(32767));
41 NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(32768));
42 NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(32769));
43 NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(65535));
44 NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(65536));
45 NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(2147483647ll));
46 NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(2147483648ll));
47 NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(2147483649ll));
48 NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(4294967295ll));
49 NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(4294967296ll));
50 NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(9223372036854775807ull));
51 NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(9223372036854775808ull));
53 NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(-1));
54 NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(-127));
55 NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(-128));
56 NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(-129));
57 NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(-255));
58 NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(-256));
59 NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(-32767));
60 NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(-32768));
61 NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(-32769));
62 NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(-65535));
63 NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(-65536));
64 NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(-2147483647ll));
65 NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(-2147483648ll));
66 NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(-2147483649ll));
67 NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(-4294967295ll));
68 NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(-4294967296ll));
69 NL_TEST_ASSERT(inSuite, !CanCastTo<uint8_t>(-9223372036854775807ll));
71 NL_TEST_ASSERT(inSuite, CanCastTo<int8_t>(0));
72 NL_TEST_ASSERT(inSuite, CanCastTo<int8_t>(127));
73 NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(128));
74 NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(129));
75 NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(255));
76 NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(256));
77 NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(32767));
78 NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(32768));
79 NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(32769));
80 NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(65535));
81 NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(65536));
82 NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(2147483647ll));
83 NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(2147483648ll));
84 NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(2147483649ll));
85 NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(4294967295ll));
86 NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(4294967296ll));
87 NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(9223372036854775807ull));
88 NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(9223372036854775808ull));
90 NL_TEST_ASSERT(inSuite, CanCastTo<int8_t>(-1));
91 NL_TEST_ASSERT(inSuite, CanCastTo<int8_t>(-127));
92 NL_TEST_ASSERT(inSuite, CanCastTo<int8_t>(-128));
93 NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(-129));
94 NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(-255));
95 NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(-256));
96 NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(-32767));
97 NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(-32768));
98 NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(-32769));
99 NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(-65535));
100 NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(-65536));
101 NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(-2147483647ll));
102 NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(-2147483648ll));
103 NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(-2147483649ll));
104 NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(-4294967295ll));
105 NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(-4294967296ll));
106 NL_TEST_ASSERT(inSuite, !CanCastTo<int8_t>(-9223372036854775807ll));
109 static void TestCanCastTo_Int16(nlTestSuite * inSuite, void * inContext)
111 NL_TEST_ASSERT(inSuite, CanCastTo<uint16_t>(0));
112 NL_TEST_ASSERT(inSuite, CanCastTo<uint16_t>(127));
113 NL_TEST_ASSERT(inSuite, CanCastTo<uint16_t>(128));
114 NL_TEST_ASSERT(inSuite, CanCastTo<uint16_t>(129));
115 NL_TEST_ASSERT(inSuite, CanCastTo<uint16_t>(255));
116 NL_TEST_ASSERT(inSuite, CanCastTo<uint16_t>(256));
117 NL_TEST_ASSERT(inSuite, CanCastTo<uint16_t>(32767));
118 NL_TEST_ASSERT(inSuite, CanCastTo<uint16_t>(32768));
119 NL_TEST_ASSERT(inSuite, CanCastTo<uint16_t>(32769));
120 NL_TEST_ASSERT(inSuite, CanCastTo<uint16_t>(65535));
121 NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(65536));
122 NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(2147483647ll));
123 NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(2147483648ll));
124 NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(2147483649ll));
125 NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(4294967295ll));
126 NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(4294967296ll));
127 NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(9223372036854775807ull));
128 NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(9223372036854775808ull));
130 NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(-1));
131 NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(-127));
132 NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(-128));
133 NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(-129));
134 NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(-255));
135 NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(-256));
136 NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(-32767));
137 NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(-32768));
138 NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(-32769));
139 NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(-65535));
140 NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(-65536));
141 NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(-2147483647ll));
142 NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(-2147483648ll));
143 NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(-2147483649ll));
144 NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(-4294967295ll));
145 NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(-4294967296ll));
146 NL_TEST_ASSERT(inSuite, !CanCastTo<uint16_t>(-9223372036854775807ll));
148 NL_TEST_ASSERT(inSuite, CanCastTo<int16_t>(0));
149 NL_TEST_ASSERT(inSuite, CanCastTo<int16_t>(127));
150 NL_TEST_ASSERT(inSuite, CanCastTo<int16_t>(128));
151 NL_TEST_ASSERT(inSuite, CanCastTo<int16_t>(129));
152 NL_TEST_ASSERT(inSuite, CanCastTo<int16_t>(255));
153 NL_TEST_ASSERT(inSuite, CanCastTo<int16_t>(256));
154 NL_TEST_ASSERT(inSuite, CanCastTo<int16_t>(32767));
155 NL_TEST_ASSERT(inSuite, !CanCastTo<int16_t>(32768));
156 NL_TEST_ASSERT(inSuite, !CanCastTo<int16_t>(32769));
157 NL_TEST_ASSERT(inSuite, !CanCastTo<int16_t>(65535));
158 NL_TEST_ASSERT(inSuite, !CanCastTo<int16_t>(65536));
159 NL_TEST_ASSERT(inSuite, !CanCastTo<int16_t>(2147483647ll));
160 NL_TEST_ASSERT(inSuite, !CanCastTo<int16_t>(2147483648ll));
161 NL_TEST_ASSERT(inSuite, !CanCastTo<int16_t>(2147483649ll));
162 NL_TEST_ASSERT(inSuite, !CanCastTo<int16_t>(4294967295ll));
163 NL_TEST_ASSERT(inSuite, !CanCastTo<int16_t>(4294967296ll));
164 NL_TEST_ASSERT(inSuite, !CanCastTo<int16_t>(9223372036854775807ull));
165 NL_TEST_ASSERT(inSuite, !CanCastTo<int16_t>(9223372036854775808ull));
167 NL_TEST_ASSERT(inSuite, CanCastTo<int16_t>(-1));
168 NL_TEST_ASSERT(inSuite, CanCastTo<int16_t>(-127));
169 NL_TEST_ASSERT(inSuite, CanCastTo<int16_t>(-128));
170 NL_TEST_ASSERT(inSuite, CanCastTo<int16_t>(-129));
171 NL_TEST_ASSERT(inSuite, CanCastTo<int16_t>(-255));
172 NL_TEST_ASSERT(inSuite, CanCastTo<int16_t>(-256));
173 NL_TEST_ASSERT(inSuite, CanCastTo<int16_t>(-32767));
174 NL_TEST_ASSERT(inSuite, CanCastTo<int16_t>(-32768));
175 NL_TEST_ASSERT(inSuite, !CanCastTo<int16_t>(-32769));
176 NL_TEST_ASSERT(inSuite, !CanCastTo<int16_t>(-65535));
177 NL_TEST_ASSERT(inSuite, !CanCastTo<int16_t>(-65536));
178 NL_TEST_ASSERT(inSuite, !CanCastTo<int16_t>(-2147483647ll));
179 NL_TEST_ASSERT(inSuite, !CanCastTo<int16_t>(-2147483648ll));
180 NL_TEST_ASSERT(inSuite, !CanCastTo<int16_t>(-2147483649ll));
181 NL_TEST_ASSERT(inSuite, !CanCastTo<int16_t>(-4294967295ll));
182 NL_TEST_ASSERT(inSuite, !CanCastTo<int16_t>(-4294967296ll));
183 NL_TEST_ASSERT(inSuite, !CanCastTo<int16_t>(-9223372036854775807ll));
186 static void TestCanCastTo_Int32(nlTestSuite * inSuite, void * inContext)
188 NL_TEST_ASSERT(inSuite, CanCastTo<uint32_t>(0));
189 NL_TEST_ASSERT(inSuite, CanCastTo<uint32_t>(127));
190 NL_TEST_ASSERT(inSuite, CanCastTo<uint32_t>(128));
191 NL_TEST_ASSERT(inSuite, CanCastTo<uint32_t>(129));
192 NL_TEST_ASSERT(inSuite, CanCastTo<uint32_t>(255));
193 NL_TEST_ASSERT(inSuite, CanCastTo<uint32_t>(256));
194 NL_TEST_ASSERT(inSuite, CanCastTo<uint32_t>(32767));
195 NL_TEST_ASSERT(inSuite, CanCastTo<uint32_t>(32768));
196 NL_TEST_ASSERT(inSuite, CanCastTo<uint32_t>(32769));
197 NL_TEST_ASSERT(inSuite, CanCastTo<uint32_t>(65535));
198 NL_TEST_ASSERT(inSuite, CanCastTo<uint32_t>(65536));
199 NL_TEST_ASSERT(inSuite, CanCastTo<uint32_t>(2147483647ll));
200 NL_TEST_ASSERT(inSuite, CanCastTo<uint32_t>(2147483648ll));
201 NL_TEST_ASSERT(inSuite, CanCastTo<uint32_t>(2147483649ll));
202 NL_TEST_ASSERT(inSuite, CanCastTo<uint32_t>(4294967295ll));
203 NL_TEST_ASSERT(inSuite, !CanCastTo<uint32_t>(4294967296ll));
204 NL_TEST_ASSERT(inSuite, !CanCastTo<uint32_t>(9223372036854775807ull));
205 NL_TEST_ASSERT(inSuite, !CanCastTo<uint32_t>(9223372036854775808ull));
207 NL_TEST_ASSERT(inSuite, !CanCastTo<uint32_t>(-1));
208 NL_TEST_ASSERT(inSuite, !CanCastTo<uint32_t>(-127));
209 NL_TEST_ASSERT(inSuite, !CanCastTo<uint32_t>(-128));
210 NL_TEST_ASSERT(inSuite, !CanCastTo<uint32_t>(-129));
211 NL_TEST_ASSERT(inSuite, !CanCastTo<uint32_t>(-255));
212 NL_TEST_ASSERT(inSuite, !CanCastTo<uint32_t>(-256));
213 NL_TEST_ASSERT(inSuite, !CanCastTo<uint32_t>(-32767));
214 NL_TEST_ASSERT(inSuite, !CanCastTo<uint32_t>(-32768));
215 NL_TEST_ASSERT(inSuite, !CanCastTo<uint32_t>(-32769));
216 NL_TEST_ASSERT(inSuite, !CanCastTo<uint32_t>(-65535));
217 NL_TEST_ASSERT(inSuite, !CanCastTo<uint32_t>(-65536));
218 NL_TEST_ASSERT(inSuite, !CanCastTo<uint32_t>(-2147483647ll));
219 NL_TEST_ASSERT(inSuite, !CanCastTo<uint32_t>(-2147483648ll));
220 NL_TEST_ASSERT(inSuite, !CanCastTo<uint32_t>(-2147483649ll));
221 NL_TEST_ASSERT(inSuite, !CanCastTo<uint32_t>(-4294967295ll));
222 NL_TEST_ASSERT(inSuite, !CanCastTo<uint32_t>(-4294967296ll));
223 NL_TEST_ASSERT(inSuite, !CanCastTo<uint32_t>(-9223372036854775807ll));
225 NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(0));
226 NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(127));
227 NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(128));
228 NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(129));
229 NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(255));
230 NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(256));
231 NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(32767));
232 NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(32768));
233 NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(32769));
234 NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(65535));
235 NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(65536));
236 NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(2147483647ll));
237 NL_TEST_ASSERT(inSuite, !CanCastTo<int32_t>(2147483648ll));
238 NL_TEST_ASSERT(inSuite, !CanCastTo<int32_t>(2147483649ll));
239 NL_TEST_ASSERT(inSuite, !CanCastTo<int32_t>(4294967295ll));
240 NL_TEST_ASSERT(inSuite, !CanCastTo<int32_t>(4294967296ll));
241 NL_TEST_ASSERT(inSuite, !CanCastTo<int32_t>(9223372036854775807ull));
242 NL_TEST_ASSERT(inSuite, !CanCastTo<int32_t>(9223372036854775808ull));
244 NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(-1));
245 NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(-127));
246 NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(-128));
247 NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(-129));
248 NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(-255));
249 NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(-256));
250 NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(-32767));
251 NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(-32768));
252 NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(-32769));
253 NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(-65535));
254 NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(-65536));
255 NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(-2147483647ll));
256 NL_TEST_ASSERT(inSuite, CanCastTo<int32_t>(-2147483648ll));
257 NL_TEST_ASSERT(inSuite, !CanCastTo<int32_t>(-2147483649ll));
258 NL_TEST_ASSERT(inSuite, !CanCastTo<int32_t>(-4294967295ll));
259 NL_TEST_ASSERT(inSuite, !CanCastTo<int32_t>(-4294967296ll));
260 NL_TEST_ASSERT(inSuite, !CanCastTo<int32_t>(-9223372036854775807ll));
263 static void TestCanCastTo_Int64(nlTestSuite * inSuite, void * inContext)
265 NL_TEST_ASSERT(inSuite, CanCastTo<uint64_t>(0));
266 NL_TEST_ASSERT(inSuite, CanCastTo<uint64_t>(127));
267 NL_TEST_ASSERT(inSuite, CanCastTo<uint64_t>(128));
268 NL_TEST_ASSERT(inSuite, CanCastTo<uint64_t>(129));
269 NL_TEST_ASSERT(inSuite, CanCastTo<uint64_t>(255));
270 NL_TEST_ASSERT(inSuite, CanCastTo<uint64_t>(256));
271 NL_TEST_ASSERT(inSuite, CanCastTo<uint64_t>(32767));
272 NL_TEST_ASSERT(inSuite, CanCastTo<uint64_t>(32768));
273 NL_TEST_ASSERT(inSuite, CanCastTo<uint64_t>(32769));
274 NL_TEST_ASSERT(inSuite, CanCastTo<uint64_t>(65535));
275 NL_TEST_ASSERT(inSuite, CanCastTo<uint64_t>(65536));
276 NL_TEST_ASSERT(inSuite, CanCastTo<uint64_t>(2147483647ll));
277 NL_TEST_ASSERT(inSuite, CanCastTo<uint64_t>(2147483648ll));
278 NL_TEST_ASSERT(inSuite, CanCastTo<uint64_t>(2147483649ll));
279 NL_TEST_ASSERT(inSuite, CanCastTo<uint64_t>(4294967295ll));
280 NL_TEST_ASSERT(inSuite, CanCastTo<uint64_t>(4294967296ll));
281 NL_TEST_ASSERT(inSuite, CanCastTo<uint64_t>(9223372036854775807ull));
282 NL_TEST_ASSERT(inSuite, CanCastTo<uint64_t>(9223372036854775808ull));
284 NL_TEST_ASSERT(inSuite, !CanCastTo<uint64_t>(-1));
285 NL_TEST_ASSERT(inSuite, !CanCastTo<uint64_t>(-127));
286 NL_TEST_ASSERT(inSuite, !CanCastTo<uint64_t>(-128));
287 NL_TEST_ASSERT(inSuite, !CanCastTo<uint64_t>(-129));
288 NL_TEST_ASSERT(inSuite, !CanCastTo<uint64_t>(-255));
289 NL_TEST_ASSERT(inSuite, !CanCastTo<uint64_t>(-256));
290 NL_TEST_ASSERT(inSuite, !CanCastTo<uint64_t>(-32767));
291 NL_TEST_ASSERT(inSuite, !CanCastTo<uint64_t>(-32768));
292 NL_TEST_ASSERT(inSuite, !CanCastTo<uint64_t>(-32769));
293 NL_TEST_ASSERT(inSuite, !CanCastTo<uint64_t>(-65535));
294 NL_TEST_ASSERT(inSuite, !CanCastTo<uint64_t>(-65536));
295 NL_TEST_ASSERT(inSuite, !CanCastTo<uint64_t>(-2147483647ll));
296 NL_TEST_ASSERT(inSuite, !CanCastTo<uint64_t>(-2147483648ll));
297 NL_TEST_ASSERT(inSuite, !CanCastTo<uint64_t>(-2147483649ll));
298 NL_TEST_ASSERT(inSuite, !CanCastTo<uint64_t>(-4294967295ll));
299 NL_TEST_ASSERT(inSuite, !CanCastTo<uint64_t>(-4294967296ll));
300 NL_TEST_ASSERT(inSuite, !CanCastTo<uint64_t>(-9223372036854775807ll));
302 NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(0));
303 NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(127));
304 NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(128));
305 NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(129));
306 NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(255));
307 NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(256));
308 NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(32767));
309 NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(32768));
310 NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(32769));
311 NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(65535));
312 NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(65536));
313 NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(2147483647ll));
314 NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(2147483648ll));
315 NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(2147483649ll));
316 NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(4294967295ll));
317 NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(4294967296ll));
318 NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(9223372036854775807ull));
319 NL_TEST_ASSERT(inSuite, !CanCastTo<int64_t>(9223372036854775808ull));
321 NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(-1));
322 NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(-127));
323 NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(-128));
324 NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(-129));
325 NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(-255));
326 NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(-256));
327 NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(-32767));
328 NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(-32768));
329 NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(-32769));
330 NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(-65535));
331 NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(-65536));
332 NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(-2147483647ll));
333 NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(-2147483648ll));
334 NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(-2147483649ll));
335 NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(-4294967295ll));
336 NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(-4294967296ll));
337 NL_TEST_ASSERT(inSuite, CanCastTo<int64_t>(-9223372036854775807ll));
340 static void TestCastToSigned(nlTestSuite * inSuite, void * inContext)
342 NL_TEST_ASSERT(inSuite, CastToSigned(static_cast<uint8_t>(5)) == 5);
343 NL_TEST_ASSERT(inSuite, CastToSigned(static_cast<uint8_t>(-5)) == -5);
344 NL_TEST_ASSERT(inSuite, CastToSigned(static_cast<uint8_t>(254)) == -2);
345 NL_TEST_ASSERT(inSuite, CastToSigned(static_cast<uint8_t>(65533)) == -3);
346 NL_TEST_ASSERT(inSuite, CastToSigned(static_cast<uint16_t>(254)) == 254);
347 NL_TEST_ASSERT(inSuite, CastToSigned(static_cast<uint16_t>(65533)) == -3);
350 #define NL_TEST_DEF_FN(fn) NL_TEST_DEF("Test " #fn, fn)
352 * Test Suite. It lists all the test functions.
354 static const nlTest sTests[] = { NL_TEST_DEF_FN(TestCanCastTo_Int8), NL_TEST_DEF_FN(TestCanCastTo_Int16),
355 NL_TEST_DEF_FN(TestCanCastTo_Int32), NL_TEST_DEF_FN(TestCanCastTo_Int64),
356 NL_TEST_DEF_FN(TestCastToSigned), NL_TEST_SENTINEL() };
358 int TestSafeInt(void)
360 nlTestSuite theSuite = { "CHIP SafeInt tests", &sTests[0], nullptr, nullptr };
362 // Run test suit againt one context.
363 nlTestRunner(&theSuite, nullptr);
364 return nlTestRunnerStats(&theSuite);
367 CHIP_REGISTER_TEST_SUITE(TestSafeInt)