135 using namespace armnn;
138 BOOST_CHECK_THROW(numeric_cast<unsigned char>(-1), std::bad_cast);
139 BOOST_CHECK_THROW(numeric_cast<unsigned char>(1 << 8), std::bad_cast);
140 BOOST_CHECK_THROW(numeric_cast<unsigned char>(1L << 16), std::bad_cast);
141 BOOST_CHECK_THROW(numeric_cast<unsigned char>(1LL << 32), std::bad_cast);
143 BOOST_CHECK_THROW(numeric_cast<signed char>((1L << 8)*-1), std::bad_cast);
144 BOOST_CHECK_THROW(numeric_cast<signed char>((1L << 15)*-1), std::bad_cast);
145 BOOST_CHECK_THROW(numeric_cast<signed char>((1LL << 31)*-1), std::bad_cast);
147 BOOST_CHECK_NO_THROW(numeric_cast<unsigned char>(1U));
148 BOOST_CHECK_NO_THROW(numeric_cast<unsigned char>(1L));
149 BOOST_CHECK_NO_THROW(numeric_cast<signed char>(-1));
150 BOOST_CHECK_NO_THROW(numeric_cast<signed char>(-1L));
151 BOOST_CHECK_NO_THROW(numeric_cast<signed char>((1 << 7)*-1));
154 BOOST_CHECK_THROW(numeric_cast<uint16_t>(-1), std::bad_cast);
155 BOOST_CHECK_THROW(numeric_cast<uint16_t>(1L << 16), std::bad_cast);
156 BOOST_CHECK_THROW(numeric_cast<uint16_t>(1LL << 32), std::bad_cast);
158 BOOST_CHECK_THROW(numeric_cast<int16_t>(1L << 15), std::bad_cast);
159 BOOST_CHECK_THROW(numeric_cast<int16_t>(1LL << 31), std::bad_cast);
161 BOOST_CHECK_NO_THROW(numeric_cast<uint16_t>(1L << 8));
162 BOOST_CHECK_NO_THROW(numeric_cast<int16_t>(1L << 7));
163 BOOST_CHECK_NO_THROW(numeric_cast<int16_t>((1L << 15)*-1));
165 BOOST_CHECK_NO_THROW(numeric_cast<int16_t>(1U << 8));
166 BOOST_CHECK_NO_THROW(numeric_cast<int16_t>(1U << 14));
169 BOOST_CHECK_NO_THROW(numeric_cast<uint32_t>(1));
170 BOOST_CHECK_NO_THROW(numeric_cast<uint32_t>(1 << 8));
171 BOOST_CHECK_NO_THROW(numeric_cast<uint32_t>(1L << 16));
172 BOOST_CHECK_NO_THROW(numeric_cast<uint32_t>(1LL << 31));
174 BOOST_CHECK_NO_THROW(numeric_cast<int32_t>(-1));
175 BOOST_CHECK_NO_THROW(numeric_cast<int32_t>((1L << 8)*-1));
176 BOOST_CHECK_NO_THROW(numeric_cast<int32_t>((1L << 16)*-1));
177 BOOST_CHECK_NO_THROW(numeric_cast<int32_t>((1LL << 31)*-1));
179 BOOST_CHECK_NO_THROW(numeric_cast<int32_t>(1U));
180 BOOST_CHECK_NO_THROW(numeric_cast<int32_t>(1U << 8));
181 BOOST_CHECK_NO_THROW(numeric_cast<int32_t>(1U << 16));
182 BOOST_CHECK_NO_THROW(numeric_cast<int32_t>(1U << 30));
184 float float_max = std::numeric_limits<float>::max();
185 float float_min = std::numeric_limits<float>::lowest();
186 auto int8_max = std::numeric_limits<int8_t>::max();
187 auto int16_max = std::numeric_limits<int16_t>::max();
188 auto int32_max = std::numeric_limits<int32_t>::max();
189 auto int8_min = std::numeric_limits<int8_t>::lowest();
190 auto int16_min = std::numeric_limits<int16_t>::lowest();
191 auto int32_min = std::numeric_limits<int32_t>::lowest();
192 auto uint8_max = std::numeric_limits<uint8_t>::max();
193 auto uint16_max = std::numeric_limits<uint16_t>::max();
194 auto uint32_max = std::numeric_limits<uint32_t>::max();
195 auto double_max = std::numeric_limits<double>::max();
198 BOOST_CHECK_NO_THROW(numeric_cast<int32_t>(1.324f));
199 BOOST_CHECK(1 == numeric_cast<int32_t>(1.324f));
200 BOOST_CHECK_NO_THROW(numeric_cast<int32_t>(-1.0f));
201 BOOST_CHECK(-1 == numeric_cast<int32_t>(-1.0f));
203 BOOST_CHECK_NO_THROW(numeric_cast<int8_t>(static_cast<float>(int8_max)));
204 BOOST_CHECK_NO_THROW(numeric_cast<int16_t>(static_cast<float>(int16_max)));
205 BOOST_CHECK_NO_THROW(numeric_cast<int32_t>(static_cast<float>(int32_max)));
207 BOOST_CHECK_THROW(numeric_cast<int8_t>(float_max), std::bad_cast);
208 BOOST_CHECK_THROW(numeric_cast<int16_t>(float_max), std::bad_cast);
209 BOOST_CHECK_THROW(numeric_cast<int32_t>(float_max), std::bad_cast);
211 BOOST_CHECK_THROW(numeric_cast<int8_t>(float_min), std::bad_cast);
212 BOOST_CHECK_THROW(numeric_cast<int16_t>(float_min), std::bad_cast);
213 BOOST_CHECK_THROW(numeric_cast<int32_t>(float_min), std::bad_cast);
216 BOOST_CHECK_NO_THROW(numeric_cast<float>(1));
217 BOOST_CHECK(1.0 == numeric_cast<float>(1));
218 BOOST_CHECK_NO_THROW(numeric_cast<float>(-1));
219 BOOST_CHECK(-1.0 == numeric_cast<float>(-1));
221 BOOST_CHECK_NO_THROW(numeric_cast<float>(int8_max));
222 BOOST_CHECK_NO_THROW(numeric_cast<float>(int16_max));
223 BOOST_CHECK_NO_THROW(numeric_cast<float>(int32_max));
225 BOOST_CHECK_NO_THROW(numeric_cast<float>(int8_min));
226 BOOST_CHECK_NO_THROW(numeric_cast<float>(int16_min));
227 BOOST_CHECK_NO_THROW(numeric_cast<float>(int32_min));
230 BOOST_CHECK_NO_THROW(numeric_cast<float>(1U));
231 BOOST_CHECK(1.0 == numeric_cast<float>(1U));
233 BOOST_CHECK_NO_THROW(numeric_cast<float>(uint8_max));
234 BOOST_CHECK_NO_THROW(numeric_cast<float>(uint16_max));
235 BOOST_CHECK_NO_THROW(numeric_cast<float>(uint32_max));
238 BOOST_CHECK_NO_THROW(numeric_cast<uint32_t>(1.43243f));
239 BOOST_CHECK(1 == numeric_cast<uint32_t>(1.43243f));
241 BOOST_CHECK_THROW(numeric_cast<uint32_t>(-1.1f), std::bad_cast);
242 BOOST_CHECK_THROW(numeric_cast<uint32_t>(float_max), std::bad_cast);
245 BOOST_CHECK_THROW(numeric_cast<int32_t>(double_max), std::bad_cast);
246 BOOST_CHECK_THROW(numeric_cast<int32_t>(double_max), std::bad_cast);
247 BOOST_CHECK_THROW(numeric_cast<float>(double_max), std::bad_cast);
248 BOOST_CHECK_NO_THROW(numeric_cast<double>(int32_max));
249 BOOST_CHECK_NO_THROW(numeric_cast<long double>(int32_max));
Copyright (c) 2020 ARM Limited.