| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | // Copyright Contributors to the OpenVDB Project | ||
| 2 | // SPDX-License-Identifier: MPL-2.0 | ||
| 3 | // | ||
| 4 | /// @file Math.h | ||
| 5 | /// @brief General-purpose arithmetic and comparison routines, most of which | ||
| 6 | /// accept arbitrary value types (or at least arbitrary numeric value types) | ||
| 7 | |||
| 8 | #ifndef OPENVDB_MATH_HAS_BEEN_INCLUDED | ||
| 9 | #define OPENVDB_MATH_HAS_BEEN_INCLUDED | ||
| 10 | |||
| 11 | #include <openvdb/Platform.h> | ||
| 12 | #include <openvdb/version.h> | ||
| 13 | #include <boost/numeric/conversion/conversion_traits.hpp> | ||
| 14 | #include <algorithm> // for std::max() | ||
| 15 | #include <cassert> | ||
| 16 | #include <cmath> // for std::ceil(), std::fabs(), std::pow(), std::sqrt(), etc. | ||
| 17 | #include <cstdlib> // for abs(int) | ||
| 18 | #include <cstring> // for memcpy | ||
| 19 | #include <random> | ||
| 20 | #include <string> | ||
| 21 | #include <type_traits> // for std::is_arithmetic | ||
| 22 | |||
| 23 | |||
| 24 | // Compile pragmas | ||
| 25 | |||
| 26 | // Intel(r) compiler fires remark #1572: floating-point equality and inequality | ||
| 27 | // comparisons are unrealiable when == or != is used with floating point operands. | ||
| 28 | #if defined(__INTEL_COMPILER) | ||
| 29 | #define OPENVDB_NO_FP_EQUALITY_WARNING_BEGIN \ | ||
| 30 | _Pragma("warning (push)") \ | ||
| 31 | _Pragma("warning (disable:1572)") | ||
| 32 | #define OPENVDB_NO_FP_EQUALITY_WARNING_END \ | ||
| 33 | _Pragma("warning (pop)") | ||
| 34 | #elif defined(__clang__) | ||
| 35 | #define OPENVDB_NO_FP_EQUALITY_WARNING_BEGIN \ | ||
| 36 | PRAGMA(clang diagnostic push) \ | ||
| 37 | PRAGMA(clang diagnostic ignored "-Wfloat-equal") | ||
| 38 | #define OPENVDB_NO_FP_EQUALITY_WARNING_END \ | ||
| 39 | PRAGMA(clang diagnostic pop) | ||
| 40 | #else | ||
| 41 | // For GCC, #pragma GCC diagnostic ignored "-Wfloat-equal" | ||
| 42 | // isn't working until gcc 4.2+, | ||
| 43 | // Trying | ||
| 44 | // #pragma GCC system_header | ||
| 45 | // creates other problems, most notably "warning: will never be executed" | ||
| 46 | // in from templates, unsure of how to work around. | ||
| 47 | // If necessary, could use integer based comparisons for equality | ||
| 48 | #define OPENVDB_NO_FP_EQUALITY_WARNING_BEGIN | ||
| 49 | #define OPENVDB_NO_FP_EQUALITY_WARNING_END | ||
| 50 | #endif | ||
| 51 | |||
| 52 | |||
| 53 | #ifdef OPENVDB_IS_POD | ||
| 54 | #undef OPENVDB_IS_POD | ||
| 55 | #endif | ||
| 56 | #define OPENVDB_IS_POD(Type) \ | ||
| 57 | static_assert(std::is_standard_layout<Type>::value, \ | ||
| 58 | #Type" must be a POD type (satisfy StandardLayoutType.)"); \ | ||
| 59 | static_assert(std::is_trivial<Type>::value, \ | ||
| 60 | #Type" must be a POD type (satisfy TrivialType.)"); | ||
| 61 | |||
| 62 | namespace openvdb { | ||
| 63 | OPENVDB_USE_VERSION_NAMESPACE | ||
| 64 | namespace OPENVDB_VERSION_NAME { | ||
| 65 | |||
| 66 | /// @brief Return the value of type T that corresponds to zero. | ||
| 67 | /// @note A zeroVal<T>() specialization must be defined for each @c ValueType T | ||
| 68 | /// that cannot be constructed using the form @c T(0). For example, @c std::string(0) | ||
| 69 | /// treats 0 as @c nullptr and throws a @c std::logic_error. | ||
| 70 |
85/396✓ Branch 1 taken 367 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✓ Branch 5 taken 1 times.
✓ Branch 6 taken 512 times.
✓ Branch 7 taken 554 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 22 times.
✓ Branch 10 taken 26 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 22 times.
✓ Branch 13 taken 77 times.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 39 times.
✓ Branch 17 taken 3 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 24 times.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✓ Branch 22 taken 3 times.
✗ Branch 23 not taken.
✓ Branch 24 taken 21 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
✓ Branch 32 taken 884 times.
✗ Branch 33 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 50 times.
✓ Branch 36 taken 2 times.
✓ Branch 37 taken 28 times.
✗ Branch 38 not taken.
✓ Branch 39 taken 3 times.
✓ Branch 40 taken 76 times.
✗ Branch 41 not taken.
✓ Branch 42 taken 16 times.
✓ Branch 43 taken 9 times.
✓ Branch 44 taken 1 times.
✓ Branch 45 taken 6 times.
✗ Branch 46 not taken.
✓ Branch 47 taken 1 times.
✗ Branch 48 not taken.
✗ Branch 49 not taken.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✗ Branch 52 not taken.
✓ Branch 53 taken 1 times.
✗ Branch 54 not taken.
✓ Branch 55 taken 8 times.
✓ Branch 56 taken 1 times.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✗ Branch 63 not taken.
✗ Branch 64 not taken.
✗ Branch 65 not taken.
✗ Branch 66 not taken.
✗ Branch 67 not taken.
✗ Branch 68 not taken.
✓ Branch 69 taken 4 times.
✗ Branch 70 not taken.
✗ Branch 71 not taken.
✗ Branch 72 not taken.
✗ Branch 73 not taken.
✗ Branch 74 not taken.
✗ Branch 75 not taken.
✗ Branch 76 not taken.
✗ Branch 77 not taken.
✗ Branch 78 not taken.
✓ Branch 79 taken 6 times.
✗ Branch 80 not taken.
✗ Branch 81 not taken.
✗ Branch 82 not taken.
✓ Branch 83 taken 1 times.
✗ Branch 84 not taken.
✗ Branch 85 not taken.
✓ Branch 86 taken 2 times.
✗ Branch 87 not taken.
✓ Branch 88 taken 32 times.
✓ Branch 89 taken 1 times.
✗ Branch 90 not taken.
✓ Branch 91 taken 1 times.
✓ Branch 92 taken 17 times.
✗ Branch 93 not taken.
✓ Branch 94 taken 1 times.
✓ Branch 95 taken 1 times.
✗ Branch 96 not taken.
✓ Branch 97 taken 1 times.
✓ Branch 98 taken 1 times.
✗ Branch 99 not taken.
✓ Branch 100 taken 513 times.
✓ Branch 101 taken 1 times.
✗ Branch 102 not taken.
✓ Branch 103 taken 513 times.
✓ Branch 104 taken 1 times.
✗ Branch 105 not taken.
✓ Branch 106 taken 1 times.
✗ Branch 107 not taken.
✗ Branch 108 not taken.
✓ Branch 109 taken 1 times.
✗ Branch 110 not taken.
✗ Branch 111 not taken.
✓ Branch 112 taken 513 times.
✗ Branch 113 not taken.
✗ Branch 114 not taken.
✓ Branch 115 taken 1 times.
✗ Branch 116 not taken.
✓ Branch 117 taken 17 times.
✓ Branch 118 taken 513 times.
✗ Branch 119 not taken.
✓ Branch 120 taken 16 times.
✓ Branch 121 taken 1 times.
✗ Branch 122 not taken.
✓ Branch 123 taken 16 times.
✓ Branch 124 taken 1 times.
✗ Branch 125 not taken.
✗ Branch 126 not taken.
✓ Branch 127 taken 4 times.
✗ Branch 128 not taken.
✓ Branch 129 taken 24 times.
✗ Branch 130 not taken.
✓ Branch 131 taken 52 times.
✓ Branch 132 taken 25 times.
✗ Branch 133 not taken.
✗ Branch 134 not taken.
✗ Branch 135 not taken.
✗ Branch 136 not taken.
✗ Branch 137 not taken.
✓ Branch 138 taken 24 times.
✗ Branch 139 not taken.
✗ Branch 140 not taken.
✓ Branch 141 taken 78 times.
✗ Branch 142 not taken.
✗ Branch 143 not taken.
✗ Branch 144 not taken.
✗ Branch 145 not taken.
✗ Branch 146 not taken.
✗ Branch 147 not taken.
✗ Branch 148 not taken.
✗ Branch 149 not taken.
✗ Branch 150 not taken.
✗ Branch 151 not taken.
✗ Branch 152 not taken.
✗ Branch 153 not taken.
✗ Branch 154 not taken.
✗ Branch 155 not taken.
✗ Branch 156 not taken.
✗ Branch 157 not taken.
✗ Branch 158 not taken.
✗ Branch 159 not taken.
✗ Branch 160 not taken.
✗ Branch 161 not taken.
✗ Branch 162 not taken.
✗ Branch 163 not taken.
✗ Branch 164 not taken.
✗ Branch 165 not taken.
✗ Branch 166 not taken.
✗ Branch 167 not taken.
✗ Branch 168 not taken.
✗ Branch 169 not taken.
✗ Branch 170 not taken.
✗ Branch 171 not taken.
✗ Branch 172 not taken.
✗ Branch 173 not taken.
✗ Branch 174 not taken.
✗ Branch 175 not taken.
✗ Branch 176 not taken.
✗ Branch 177 not taken.
✗ Branch 178 not taken.
✗ Branch 179 not taken.
✗ Branch 180 not taken.
✗ Branch 181 not taken.
✗ Branch 182 not taken.
✗ Branch 183 not taken.
✗ Branch 184 not taken.
✗ Branch 185 not taken.
✓ Branch 186 taken 1 times.
✗ Branch 187 not taken.
✗ Branch 188 not taken.
✓ Branch 189 taken 1 times.
✗ Branch 190 not taken.
✗ Branch 191 not taken.
✓ Branch 192 taken 1 times.
✗ Branch 193 not taken.
✗ Branch 194 not taken.
✓ Branch 195 taken 1 times.
✗ Branch 196 not taken.
✗ Branch 197 not taken.
✓ Branch 198 taken 1 times.
✗ Branch 199 not taken.
✗ Branch 200 not taken.
✓ Branch 201 taken 1 times.
✗ Branch 202 not taken.
✗ Branch 203 not taken.
✓ Branch 204 taken 1 times.
✗ Branch 205 not taken.
✗ Branch 206 not taken.
✗ Branch 207 not taken.
✗ Branch 208 not taken.
✓ Branch 210 taken 1 times.
✗ Branch 211 not taken.
✗ Branch 212 not taken.
✗ Branch 213 not taken.
✓ Branch 214 taken 1 times.
✗ Branch 215 not taken.
✗ Branch 216 not taken.
✗ Branch 217 not taken.
✗ Branch 218 not taken.
✗ Branch 219 not taken.
✗ Branch 220 not taken.
✓ Branch 221 taken 1 times.
✗ Branch 222 not taken.
✗ Branch 223 not taken.
✗ Branch 224 not taken.
✓ Branch 225 taken 1 times.
✗ Branch 226 not taken.
✗ Branch 227 not taken.
✓ Branch 228 taken 13 times.
✗ Branch 229 not taken.
✗ Branch 230 not taken.
✓ Branch 231 taken 1 times.
✗ Branch 232 not taken.
✗ Branch 233 not taken.
✗ Branch 234 not taken.
✗ Branch 235 not taken.
✗ Branch 236 not taken.
✗ Branch 237 not taken.
✗ Branch 238 not taken.
✗ Branch 239 not taken.
✗ Branch 240 not taken.
✗ Branch 241 not taken.
✗ Branch 242 not taken.
✗ Branch 243 not taken.
✗ Branch 244 not taken.
✗ Branch 245 not taken.
✗ Branch 246 not taken.
✗ Branch 247 not taken.
✗ Branch 249 not taken.
✗ Branch 250 not taken.
✗ Branch 252 not taken.
✗ Branch 253 not taken.
✗ Branch 254 not taken.
✗ Branch 255 not taken.
✗ Branch 256 not taken.
✗ Branch 257 not taken.
✗ Branch 258 not taken.
✗ Branch 259 not taken.
✗ Branch 260 not taken.
✗ Branch 261 not taken.
✗ Branch 262 not taken.
✗ Branch 263 not taken.
✗ Branch 264 not taken.
✗ Branch 265 not taken.
✗ Branch 267 not taken.
✗ Branch 268 not taken.
✗ Branch 269 not taken.
✗ Branch 270 not taken.
✗ Branch 271 not taken.
✗ Branch 272 not taken.
✗ Branch 273 not taken.
✗ Branch 274 not taken.
✓ Branch 276 taken 1 times.
✗ Branch 277 not taken.
✗ Branch 279 not taken.
✗ Branch 280 not taken.
✗ Branch 281 not taken.
✗ Branch 282 not taken.
✗ Branch 283 not taken.
✗ Branch 284 not taken.
✗ Branch 285 not taken.
✗ Branch 286 not taken.
✗ Branch 287 not taken.
✗ Branch 288 not taken.
✗ Branch 289 not taken.
✗ Branch 290 not taken.
✗ Branch 291 not taken.
✗ Branch 292 not taken.
✗ Branch 293 not taken.
✗ Branch 294 not taken.
✗ Branch 295 not taken.
✗ Branch 296 not taken.
✗ Branch 297 not taken.
✗ Branch 298 not taken.
✗ Branch 300 not taken.
✗ Branch 301 not taken.
✗ Branch 302 not taken.
✗ Branch 303 not taken.
✗ Branch 304 not taken.
✗ Branch 306 not taken.
✗ Branch 307 not taken.
✗ Branch 309 not taken.
✗ Branch 310 not taken.
✗ Branch 311 not taken.
✗ Branch 312 not taken.
✗ Branch 313 not taken.
✗ Branch 314 not taken.
✗ Branch 315 not taken.
✗ Branch 316 not taken.
✗ Branch 317 not taken.
✗ Branch 318 not taken.
✗ Branch 319 not taken.
✗ Branch 320 not taken.
✗ Branch 321 not taken.
✗ Branch 322 not taken.
✗ Branch 323 not taken.
✓ Branch 324 taken 5 times.
✗ Branch 325 not taken.
✗ Branch 326 not taken.
✗ Branch 327 not taken.
✗ Branch 328 not taken.
✗ Branch 329 not taken.
✗ Branch 330 not taken.
✗ Branch 331 not taken.
✗ Branch 333 not taken.
✗ Branch 334 not taken.
✗ Branch 336 not taken.
✓ Branch 337 taken 114 times.
✗ Branch 338 not taken.
✗ Branch 339 not taken.
✗ Branch 340 not taken.
✗ Branch 341 not taken.
✗ Branch 342 not taken.
✓ Branch 343 taken 112 times.
✗ Branch 344 not taken.
✗ Branch 345 not taken.
✗ Branch 346 not taken.
✗ Branch 347 not taken.
✗ Branch 348 not taken.
✓ Branch 349 taken 130 times.
✗ Branch 350 not taken.
✗ Branch 351 not taken.
✗ Branch 352 not taken.
✗ Branch 353 not taken.
✗ Branch 354 not taken.
✓ Branch 355 taken 188 times.
✗ Branch 356 not taken.
✗ Branch 357 not taken.
✗ Branch 358 not taken.
✗ Branch 359 not taken.
✗ Branch 360 not taken.
✓ Branch 361 taken 98 times.
✗ Branch 362 not taken.
✗ Branch 363 not taken.
✗ Branch 364 not taken.
✗ Branch 365 not taken.
✗ Branch 366 not taken.
✓ Branch 367 taken 98 times.
✗ Branch 368 not taken.
✗ Branch 369 not taken.
✗ Branch 370 not taken.
✗ Branch 371 not taken.
✗ Branch 372 not taken.
✓ Branch 373 taken 98 times.
✗ Branch 374 not taken.
✗ Branch 375 not taken.
✗ Branch 376 not taken.
✗ Branch 377 not taken.
✗ Branch 378 not taken.
✗ Branch 379 not taken.
✗ Branch 381 not taken.
✗ Branch 382 not taken.
✗ Branch 384 not taken.
✗ Branch 385 not taken.
✗ Branch 387 not taken.
✗ Branch 388 not taken.
✗ Branch 390 not taken.
✗ Branch 391 not taken.
✗ Branch 393 not taken.
✗ Branch 394 not taken.
✗ Branch 396 not taken.
✗ Branch 397 not taken.
✓ Branch 399 taken 722 times.
✗ Branch 400 not taken.
✗ Branch 402 not taken.
✗ Branch 403 not taken.
✗ Branch 405 not taken.
✗ Branch 406 not taken.
✗ Branch 408 not taken.
✗ Branch 409 not taken.
✗ Branch 411 not taken.
✗ Branch 412 not taken.
✗ Branch 414 not taken.
✗ Branch 415 not taken.
✗ Branch 417 not taken.
✗ Branch 418 not taken.
✗ Branch 420 not taken.
✗ Branch 421 not taken.
|
5676550 | template<typename T> inline T zeroVal() { return T(0); } |
| 71 | /// Return the @c std::string value that corresponds to zero. | ||
| 72 |
19/132✓ Branch 1 taken 5 times.
✓ Branch 2 taken 7 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 5 times.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 103 times.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 times.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 90 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 90 times.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 34 not taken.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✗ Branch 51 not taken.
✗ Branch 52 not taken.
✗ Branch 53 not taken.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✗ Branch 63 not taken.
✗ Branch 64 not taken.
✗ Branch 65 not taken.
✗ Branch 66 not taken.
✗ Branch 67 not taken.
✗ Branch 68 not taken.
✗ Branch 69 not taken.
✗ Branch 70 not taken.
✗ Branch 71 not taken.
✗ Branch 72 not taken.
✗ Branch 73 not taken.
✗ Branch 74 not taken.
✗ Branch 75 not taken.
✗ Branch 76 not taken.
✗ Branch 77 not taken.
✗ Branch 78 not taken.
✗ Branch 79 not taken.
✗ Branch 80 not taken.
✗ Branch 81 not taken.
✗ Branch 82 not taken.
✗ Branch 83 not taken.
✗ Branch 84 not taken.
✗ Branch 85 not taken.
✗ Branch 86 not taken.
✗ Branch 87 not taken.
✗ Branch 88 not taken.
✗ Branch 89 not taken.
✗ Branch 90 not taken.
✗ Branch 91 not taken.
✗ Branch 92 not taken.
✗ Branch 93 not taken.
✗ Branch 94 not taken.
✗ Branch 95 not taken.
✗ Branch 96 not taken.
✗ Branch 97 not taken.
✓ Branch 98 taken 2 times.
✗ Branch 99 not taken.
✗ Branch 100 not taken.
✗ Branch 101 not taken.
✓ Branch 102 taken 1 times.
✗ Branch 103 not taken.
✗ Branch 104 not taken.
✗ Branch 105 not taken.
✗ Branch 106 not taken.
✗ Branch 107 not taken.
✗ Branch 108 not taken.
✗ Branch 109 not taken.
✗ Branch 110 not taken.
✓ Branch 111 taken 182 times.
✗ Branch 112 not taken.
✗ Branch 113 not taken.
✓ Branch 114 taken 1 times.
✗ Branch 115 not taken.
✗ Branch 116 not taken.
✗ Branch 117 not taken.
✓ Branch 118 taken 438 times.
✗ Branch 119 not taken.
✗ Branch 120 not taken.
✓ Branch 121 taken 256 times.
✗ Branch 122 not taken.
✗ Branch 123 not taken.
✗ Branch 124 not taken.
✗ Branch 125 not taken.
✓ Branch 127 taken 180 times.
✗ Branch 128 not taken.
✗ Branch 130 not taken.
✗ Branch 131 not taken.
✗ Branch 133 not taken.
✗ Branch 134 not taken.
✓ Branch 136 taken 12 times.
✗ Branch 137 not taken.
✓ Branch 139 taken 12 times.
✗ Branch 140 not taken.
✗ Branch 143 not taken.
✗ Branch 144 not taken.
✗ Branch 147 not taken.
✗ Branch 148 not taken.
|
1286 | template<> inline std::string zeroVal<std::string>() { return ""; } |
| 73 | /// Return the @c bool value that corresponds to zero. | ||
| 74 | template<> inline bool zeroVal<bool>() { return false; } | ||
| 75 | |||
| 76 | namespace math { | ||
| 77 | |||
| 78 | /// @todo These won't be needed if we eliminate StringGrids. | ||
| 79 | //@{ | ||
| 80 | /// @brief Needed to support the <tt>(zeroVal<ValueType>() + val)</tt> idiom | ||
| 81 | /// when @c ValueType is @c std::string | ||
| 82 | inline std::string operator+(const std::string& s, bool) { return s; } | ||
| 83 | inline std::string operator+(const std::string& s, int) { return s; } | ||
| 84 | ✗ | inline std::string operator+(const std::string& s, float) { return s; } | |
| 85 | inline std::string operator+(const std::string& s, double) { return s; } | ||
| 86 | //@} | ||
| 87 | |||
| 88 | /// @brief Componentwise adder for POD types. | ||
| 89 | template<typename Type1, typename Type2> | ||
| 90 | inline auto cwiseAdd(const Type1& v, const Type2 s) | ||
| 91 | { | ||
| 92 | OPENVDB_NO_TYPE_CONVERSION_WARNING_BEGIN | ||
| 93 | 2 | return v + s; | |
| 94 | OPENVDB_NO_TYPE_CONVERSION_WARNING_END | ||
| 95 | } | ||
| 96 | |||
| 97 | /// @brief Componentwise less than for POD types. | ||
| 98 | template<typename Type1, typename Type2> | ||
| 99 | inline bool cwiseLessThan(const Type1& a, const Type2& b) | ||
| 100 | { | ||
| 101 | OPENVDB_NO_TYPE_CONVERSION_WARNING_BEGIN | ||
| 102 |
9/117✗ Branch 0 not taken.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 4 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 30 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 518 times.
✗ Branch 29 not taken.
✓ Branch 30 taken 420738 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 34 not taken.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✓ Branch 46 taken 1 times.
✓ Branch 47 taken 2 times.
✗ Branch 48 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✗ Branch 51 not taken.
✗ Branch 52 not taken.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✗ Branch 63 not taken.
✗ Branch 64 not taken.
✗ Branch 65 not taken.
✗ Branch 66 not taken.
✗ Branch 67 not taken.
✗ Branch 68 not taken.
✗ Branch 69 not taken.
✗ Branch 70 not taken.
✗ Branch 71 not taken.
✗ Branch 72 not taken.
✗ Branch 73 not taken.
✗ Branch 74 not taken.
✗ Branch 75 not taken.
✗ Branch 76 not taken.
✗ Branch 77 not taken.
✗ Branch 78 not taken.
✗ Branch 79 not taken.
✗ Branch 80 not taken.
✗ Branch 81 not taken.
✗ Branch 82 not taken.
✗ Branch 83 not taken.
✗ Branch 84 not taken.
✗ Branch 85 not taken.
✗ Branch 86 not taken.
✗ Branch 87 not taken.
✗ Branch 88 not taken.
✗ Branch 89 not taken.
✗ Branch 90 not taken.
✗ Branch 91 not taken.
✗ Branch 93 not taken.
✗ Branch 94 not taken.
✗ Branch 95 not taken.
✗ Branch 96 not taken.
✗ Branch 97 not taken.
✗ Branch 98 not taken.
✗ Branch 99 not taken.
✗ Branch 100 not taken.
✗ Branch 101 not taken.
✗ Branch 102 not taken.
✗ Branch 103 not taken.
✗ Branch 106 not taken.
✗ Branch 107 not taken.
✗ Branch 108 not taken.
✗ Branch 109 not taken.
✗ Branch 110 not taken.
✗ Branch 111 not taken.
✗ Branch 112 not taken.
✗ Branch 113 not taken.
✗ Branch 117 not taken.
✗ Branch 118 not taken.
✗ Branch 119 not taken.
✗ Branch 120 not taken.
✗ Branch 121 not taken.
✗ Branch 122 not taken.
|
421310 | return a < b; |
| 103 | OPENVDB_NO_TYPE_CONVERSION_WARNING_END | ||
| 104 | } | ||
| 105 | |||
| 106 | /// @brief Componentwise greater than for POD types. | ||
| 107 | template<typename Type1, typename Type2> | ||
| 108 | inline bool cwiseGreaterThan(const Type1& a, const Type2& b) | ||
| 109 | { | ||
| 110 | OPENVDB_NO_TYPE_CONVERSION_WARNING_BEGIN | ||
| 111 |
55/135✓ Branch 0 taken 1533 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 4 times.
✓ Branch 8 taken 1 times.
✓ Branch 9 taken 8192 times.
✓ Branch 10 taken 30 times.
✓ Branch 11 taken 65536 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 1 times.
✓ Branch 17 taken 101 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 1 times.
✓ Branch 20 taken 1 times.
✓ Branch 21 taken 1023 times.
✗ Branch 22 not taken.
✓ Branch 23 taken 273 times.
✓ Branch 24 taken 1 times.
✓ Branch 25 taken 1 times.
✓ Branch 26 taken 52532 times.
✓ Branch 27 taken 104283 times.
✓ Branch 28 taken 177473 times.
✓ Branch 29 taken 99 times.
✓ Branch 30 taken 1604154 times.
✓ Branch 31 taken 104283 times.
✓ Branch 32 taken 1033990 times.
✓ Branch 33 taken 1 times.
✓ Branch 34 taken 1103931 times.
✓ Branch 35 taken 4151 times.
✓ Branch 36 taken 1087225 times.
✓ Branch 37 taken 1 times.
✓ Branch 38 taken 1459961 times.
✓ Branch 39 taken 1 times.
✗ Branch 40 not taken.
✓ Branch 41 taken 1 times.
✗ Branch 42 not taken.
✓ Branch 43 taken 1 times.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✓ Branch 47 taken 3 times.
✓ Branch 48 taken 1 times.
✗ Branch 49 not taken.
✓ Branch 50 taken 1 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✓ Branch 54 taken 1 times.
✗ Branch 55 not taken.
✓ Branch 56 taken 1 times.
✗ Branch 57 not taken.
✓ Branch 58 taken 1 times.
✗ Branch 59 not taken.
✓ Branch 60 taken 1 times.
✗ Branch 61 not taken.
✓ Branch 62 taken 1 times.
✗ Branch 63 not taken.
✓ Branch 64 taken 1 times.
✗ Branch 65 not taken.
✓ Branch 66 taken 1 times.
✗ Branch 67 not taken.
✓ Branch 68 taken 1 times.
✗ Branch 69 not taken.
✓ Branch 70 taken 1 times.
✗ Branch 71 not taken.
✓ Branch 72 taken 1 times.
✗ Branch 73 not taken.
✓ Branch 74 taken 1 times.
✗ Branch 75 not taken.
✓ Branch 76 taken 1 times.
✗ Branch 77 not taken.
✓ Branch 78 taken 1 times.
✗ Branch 79 not taken.
✗ Branch 80 not taken.
✗ Branch 81 not taken.
✗ Branch 82 not taken.
✗ Branch 83 not taken.
✗ Branch 84 not taken.
✗ Branch 85 not taken.
✗ Branch 86 not taken.
✗ Branch 87 not taken.
✗ Branch 88 not taken.
✗ Branch 89 not taken.
✗ Branch 90 not taken.
✗ Branch 91 not taken.
✗ Branch 92 not taken.
✗ Branch 93 not taken.
✗ Branch 94 not taken.
✗ Branch 95 not taken.
✗ Branch 96 not taken.
✗ Branch 97 not taken.
✗ Branch 98 not taken.
✗ Branch 99 not taken.
✗ Branch 100 not taken.
✗ Branch 101 not taken.
✗ Branch 102 not taken.
✗ Branch 103 not taken.
✗ Branch 104 not taken.
✗ Branch 105 not taken.
✗ Branch 106 not taken.
✗ Branch 107 not taken.
✗ Branch 108 not taken.
✗ Branch 109 not taken.
✗ Branch 110 not taken.
✗ Branch 111 not taken.
✗ Branch 112 not taken.
✗ Branch 113 not taken.
✗ Branch 114 not taken.
✗ Branch 115 not taken.
✗ Branch 116 not taken.
✗ Branch 117 not taken.
✗ Branch 118 not taken.
✗ Branch 119 not taken.
✗ Branch 120 not taken.
✗ Branch 121 not taken.
✗ Branch 122 not taken.
✗ Branch 123 not taken.
✗ Branch 124 not taken.
✓ Branch 125 taken 65520 times.
✗ Branch 126 not taken.
✓ Branch 127 taken 130081770 times.
✗ Branch 128 not taken.
✗ Branch 129 not taken.
✗ Branch 130 not taken.
✗ Branch 131 not taken.
✗ Branch 132 not taken.
✗ Branch 133 not taken.
✗ Branch 134 not taken.
|
136956259 | return a > b; |
| 112 | OPENVDB_NO_TYPE_CONVERSION_WARNING_END | ||
| 113 | } | ||
| 114 | |||
| 115 | |||
| 116 | |||
| 117 | /// @brief Pi constant taken from Boost to match old behaviour | ||
| 118 | /// @note Available in C++20 | ||
| 119 | template <typename T> inline constexpr T pi() { return 3.141592653589793238462643383279502884e+00; } | ||
| 120 | template <> inline constexpr float pi() { return 3.141592653589793238462643383279502884e+00F; } | ||
| 121 | template <> inline constexpr double pi() { return 3.141592653589793238462643383279502884e+00; } | ||
| 122 | template <> inline constexpr long double pi() { return 3.141592653589793238462643383279502884e+00L; } | ||
| 123 | |||
| 124 | |||
| 125 | /// @brief Return the unary negation of the given value. | ||
| 126 | /// @note A negative<T>() specialization must be defined for each ValueType T | ||
| 127 | /// for which unary negation is not defined. | ||
| 128 | template<typename T> inline T negative(const T& val) | ||
| 129 | { | ||
| 130 | // disable unary minus on unsigned warning | ||
| 131 | #if defined(_MSC_VER) | ||
| 132 | #pragma warning(push) | ||
| 133 | #pragma warning(disable:4146) | ||
| 134 | #endif | ||
| 135 |
17/146✓ Branch 0 taken 4032 times.
✓ Branch 1 taken 1 times.
✓ Branch 2 taken 17000 times.
✓ Branch 3 taken 6224 times.
✓ Branch 4 taken 2065 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 4145 times.
✓ Branch 7 taken 2 times.
✓ Branch 8 taken 2179 times.
✓ Branch 9 taken 3 times.
✓ Branch 10 taken 2252 times.
✓ Branch 11 taken 18 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✓ Branch 14 taken 98770 times.
✓ Branch 15 taken 214065 times.
✓ Branch 16 taken 85 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 6 times.
✗ Branch 22 not taken.
✓ Branch 23 taken 36 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 34 not taken.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✗ Branch 51 not taken.
✗ Branch 52 not taken.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✗ Branch 63 not taken.
✗ Branch 64 not taken.
✗ Branch 65 not taken.
✗ Branch 66 not taken.
✗ Branch 67 not taken.
✗ Branch 68 not taken.
✗ Branch 69 not taken.
✗ Branch 70 not taken.
✗ Branch 71 not taken.
✗ Branch 72 not taken.
✗ Branch 73 not taken.
✗ Branch 74 not taken.
✗ Branch 75 not taken.
✗ Branch 76 not taken.
✗ Branch 77 not taken.
✗ Branch 78 not taken.
✗ Branch 79 not taken.
✗ Branch 80 not taken.
✗ Branch 81 not taken.
✗ Branch 82 not taken.
✓ Branch 83 taken 1 times.
✗ Branch 84 not taken.
✗ Branch 85 not taken.
✗ Branch 86 not taken.
✗ Branch 87 not taken.
✗ Branch 88 not taken.
✗ Branch 89 not taken.
✗ Branch 90 not taken.
✗ Branch 91 not taken.
✗ Branch 92 not taken.
✗ Branch 93 not taken.
✗ Branch 94 not taken.
✗ Branch 95 not taken.
✗ Branch 96 not taken.
✗ Branch 97 not taken.
✗ Branch 98 not taken.
✗ Branch 99 not taken.
✗ Branch 100 not taken.
✗ Branch 101 not taken.
✗ Branch 102 not taken.
✗ Branch 103 not taken.
✗ Branch 104 not taken.
✗ Branch 105 not taken.
✗ Branch 106 not taken.
✗ Branch 107 not taken.
✗ Branch 108 not taken.
✗ Branch 109 not taken.
✗ Branch 110 not taken.
✗ Branch 111 not taken.
✗ Branch 112 not taken.
✗ Branch 113 not taken.
✗ Branch 114 not taken.
✗ Branch 115 not taken.
✗ Branch 116 not taken.
✗ Branch 117 not taken.
✗ Branch 118 not taken.
✗ Branch 119 not taken.
✗ Branch 120 not taken.
✗ Branch 121 not taken.
✗ Branch 122 not taken.
✗ Branch 123 not taken.
✗ Branch 124 not taken.
✗ Branch 125 not taken.
✗ Branch 126 not taken.
✗ Branch 127 not taken.
✗ Branch 128 not taken.
✗ Branch 129 not taken.
✗ Branch 130 not taken.
✗ Branch 131 not taken.
✗ Branch 132 not taken.
✗ Branch 133 not taken.
✗ Branch 134 not taken.
✗ Branch 135 not taken.
✗ Branch 136 not taken.
✗ Branch 137 not taken.
✗ Branch 139 not taken.
✗ Branch 140 not taken.
✗ Branch 141 not taken.
✗ Branch 142 not taken.
✗ Branch 144 not taken.
✗ Branch 145 not taken.
✗ Branch 146 not taken.
✗ Branch 147 not taken.
|
1631131 | return T(-val); |
| 136 | #if defined(_MSC_VER) | ||
| 137 | #pragma warning(pop) | ||
| 138 | #endif | ||
| 139 | } | ||
| 140 | /// Return the negation of the given boolean. | ||
| 141 | ✗ | template<> inline bool negative(const bool& val) { return !val; } | |
| 142 | /// Return the "negation" of the given string. | ||
| 143 |
1/24✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✗ Branch 34 not taken.
✗ Branch 35 not taken.
|
1 | template<> inline std::string negative(const std::string& val) { return val; } |
| 144 | |||
| 145 | |||
| 146 | //@{ | ||
| 147 | /// Tolerance for floating-point comparison | ||
| 148 | template<typename T> struct Tolerance { static T value() { return zeroVal<T>(); } }; | ||
| 149 | template<> struct Tolerance<float> { static float value() { return 1e-8f; } }; | ||
| 150 | template<> struct Tolerance<double> { static double value() { return 1e-15; } }; | ||
| 151 | //@} | ||
| 152 | |||
| 153 | //@{ | ||
| 154 | /// Delta for small floating-point offsets | ||
| 155 | template<typename T> struct Delta { static T value() { return zeroVal<T>(); } }; | ||
| 156 | template<> struct Delta<float> { static float value() { return 1e-5f; } }; | ||
| 157 | template<> struct Delta<double> { static double value() { return 1e-9; } }; | ||
| 158 | //@} | ||
| 159 | |||
| 160 | |||
| 161 | // ==========> Random Values <================== | ||
| 162 | |||
| 163 | /// @brief Simple generator of random numbers over the range [0, 1) | ||
| 164 | /// @details Thread-safe as long as each thread has its own Rand01 instance | ||
| 165 | template<typename FloatType = double, typename EngineType = std::mt19937> | ||
| 166 | class Rand01 | ||
| 167 | { | ||
| 168 | private: | ||
| 169 | EngineType mEngine; | ||
| 170 | std::uniform_real_distribution<FloatType> mRand; | ||
| 171 | |||
| 172 | public: | ||
| 173 | using ValueType = FloatType; | ||
| 174 | |||
| 175 | /// @brief Initialize the generator. | ||
| 176 | /// @param engine random number generator | ||
| 177 |
4/8✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 11 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
|
14 | Rand01(const EngineType& engine): mEngine(engine) {} |
| 178 | |||
| 179 | /// @brief Initialize the generator. | ||
| 180 | /// @param seed seed value for the random number generator | ||
| 181 | 68 | Rand01(unsigned int seed): mEngine(static_cast<typename EngineType::result_type>(seed)) {} | |
| 182 | |||
| 183 | /// Set the seed value for the random number generator | ||
| 184 | void setSeed(unsigned int seed) | ||
| 185 | { | ||
| 186 | mEngine.seed(static_cast<typename EngineType::result_type>(seed)); | ||
| 187 | } | ||
| 188 | |||
| 189 | /// Return a const reference to the random number generator. | ||
| 190 | const EngineType& engine() const { return mEngine; } | ||
| 191 | |||
| 192 | /// Return a uniformly distributed random number in the range [0, 1). | ||
| 193 | 14938625 | FloatType operator()() { return mRand(mEngine); } | |
| 194 | }; | ||
| 195 | |||
| 196 | using Random01 = Rand01<double, std::mt19937>; | ||
| 197 | |||
| 198 | |||
| 199 | /// @brief Simple random integer generator | ||
| 200 | /// @details Thread-safe as long as each thread has its own RandInt instance | ||
| 201 | template<typename IntType = int, typename EngineType = std::mt19937> | ||
| 202 | class RandInt | ||
| 203 | { | ||
| 204 | private: | ||
| 205 | using Distr = std::uniform_int_distribution<IntType>; | ||
| 206 | EngineType mEngine; | ||
| 207 | Distr mRand; | ||
| 208 | |||
| 209 | public: | ||
| 210 | /// @brief Initialize the generator. | ||
| 211 | /// @param engine random number generator | ||
| 212 | /// @param imin,imax generate integers that are uniformly distributed over [imin, imax] | ||
| 213 | 11 | RandInt(const EngineType& engine, IntType imin, IntType imax): | |
| 214 | mEngine(engine), | ||
| 215 |
1/2✓ Branch 0 taken 11 times.
✗ Branch 1 not taken.
|
22 | mRand(std::min(imin, imax), std::max(imin, imax)) |
| 216 | {} | ||
| 217 | |||
| 218 | /// @brief Initialize the generator. | ||
| 219 | /// @param seed seed value for the random number generator | ||
| 220 | /// @param imin,imax generate integers that are uniformly distributed over [imin, imax] | ||
| 221 | 4 | RandInt(unsigned int seed, IntType imin, IntType imax): | |
| 222 | mEngine(static_cast<typename EngineType::result_type>(seed)), | ||
| 223 |
27/47✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 3 taken 1 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 1 times.
✓ Branch 9 taken 1 times.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✓ Branch 13 taken 1 times.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 1 times.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 1 times.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 1 times.
✓ Branch 33 taken 1 times.
✗ Branch 34 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 1 times.
✓ Branch 39 taken 1 times.
✗ Branch 40 not taken.
✗ Branch 42 not taken.
✓ Branch 43 taken 1 times.
✓ Branch 45 taken 1 times.
✗ Branch 46 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 1 times.
✓ Branch 51 taken 1 times.
✗ Branch 52 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 1 times.
✓ Branch 57 taken 1 times.
✗ Branch 58 not taken.
✗ Branch 60 not taken.
✓ Branch 61 taken 5 times.
✓ Branch 63 taken 5 times.
✗ Branch 64 not taken.
|
34 | mRand(std::min(imin, imax), std::max(imin, imax)) |
| 224 | {} | ||
| 225 | |||
| 226 | /// Change the range over which integers are distributed to [imin, imax]. | ||
| 227 | void setRange(IntType imin, IntType imax) | ||
| 228 | { | ||
| 229 | 2 | mRand = Distr(std::min(imin, imax), std::max(imin, imax)); | |
| 230 | } | ||
| 231 | |||
| 232 | /// Set the seed value for the random number generator | ||
| 233 | void setSeed(unsigned int seed) | ||
| 234 | { | ||
| 235 | mEngine.seed(static_cast<typename EngineType::result_type>(seed)); | ||
| 236 | } | ||
| 237 | |||
| 238 | /// Return a const reference to the random number generator. | ||
| 239 | const EngineType& engine() const { return mEngine; } | ||
| 240 | |||
| 241 | /// Return a randomly-generated integer in the current range. | ||
| 242 | IntType operator()() { return mRand(mEngine); } | ||
| 243 | |||
| 244 | /// @brief Return a randomly-generated integer in the new range [imin, imax], | ||
| 245 | /// without changing the current range. | ||
| 246 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 100 times.
|
100 | IntType operator()(IntType imin, IntType imax) |
| 247 | { | ||
| 248 |
1/2✓ Branch 0 taken 100 times.
✗ Branch 1 not taken.
|
100 | const IntType lo = std::min(imin, imax), hi = std::max(imin, imax); |
| 249 | 100 | return mRand(mEngine, typename Distr::param_type(lo, hi)); | |
| 250 | } | ||
| 251 | }; | ||
| 252 | |||
| 253 | using RandomInt = RandInt<int, std::mt19937>; | ||
| 254 | |||
| 255 | |||
| 256 | // ==========> Clamp <================== | ||
| 257 | |||
| 258 | /// Return @a x clamped to [@a min, @a max] | ||
| 259 | template<typename Type> | ||
| 260 | inline Type | ||
| 261 | 5964 | Clamp(Type x, Type min, Type max) | |
| 262 | { | ||
| 263 |
1/11✗ Branch 0 not taken.
✓ Branch 1 taken 655949 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
|
658931 | assert( !(min>max) ); |
| 264 |
7/60✓ Branch 0 taken 366400 times.
✓ Branch 1 taken 289549 times.
✓ Branch 2 taken 56932 times.
✓ Branch 3 taken 309468 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 34 not taken.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✗ Branch 51 not taken.
✗ Branch 52 not taken.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
|
658933 | return x > min ? x < max ? x : max : min; |
| 265 | } | ||
| 266 | |||
| 267 | |||
| 268 | /// Return @a x clamped to [0, 1] | ||
| 269 | template<typename Type> | ||
| 270 | inline Type | ||
| 271 | Clamp01(Type x) { return x > Type(0) ? x < Type(1) ? x : Type(1) : Type(0); } | ||
| 272 | |||
| 273 | |||
| 274 | /// Return @c true if @a x is outside [0,1] | ||
| 275 | template<typename Type> | ||
| 276 | inline bool | ||
| 277 | ClampTest01(Type &x) | ||
| 278 | { | ||
| 279 | if (x >= Type(0) && x <= Type(1)) return false; | ||
| 280 | x = x < Type(0) ? Type(0) : Type(1); | ||
| 281 | return true; | ||
| 282 | } | ||
| 283 | |||
| 284 | /// @brief Return 0 if @a x < @a 0, 1 if @a x > 1 or else (3 − 2 @a x) @a x². | ||
| 285 | template<typename Type> | ||
| 286 | inline Type | ||
| 287 | SmoothUnitStep(Type x) | ||
| 288 | { | ||
| 289 | ✗ | return x > 0 ? x < 1 ? (3-2*x)*x*x : Type(1) : Type(0); | |
| 290 | } | ||
| 291 | |||
| 292 | /// @brief Return 0 if @a x < @a min, 1 if @a x > @a max or else (3 − 2 @a t) @a t², | ||
| 293 | /// where @a t = (@a x − @a min)/(@a max − @a min). | ||
| 294 | template<typename Type> | ||
| 295 | inline Type | ||
| 296 | SmoothUnitStep(Type x, Type min, Type max) | ||
| 297 | { | ||
| 298 | assert(min < max); | ||
| 299 | return SmoothUnitStep((x-min)/(max-min)); | ||
| 300 | } | ||
| 301 | |||
| 302 | |||
| 303 | // ==========> Absolute Value <================== | ||
| 304 | |||
| 305 | |||
| 306 | //@{ | ||
| 307 | /// Return the absolute value of the given quantity. | ||
| 308 |
1/3✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
492830 | inline int32_t Abs(int32_t i) { return std::abs(i); } |
| 309 | inline int64_t Abs(int64_t i) | ||
| 310 | { | ||
| 311 | static_assert(sizeof(decltype(std::abs(i))) == sizeof(int64_t), | ||
| 312 | "std::abs(int64) broken"); | ||
| 313 | return std::abs(i); | ||
| 314 | } | ||
| 315 | inline float Abs(float x) { return std::fabs(x); } | ||
| 316 |
24/250✓ Branch 0 taken 5861665 times.
✓ Branch 1 taken 369903035 times.
✓ Branch 2 taken 509 times.
✓ Branch 3 taken 3 times.
✓ Branch 4 taken 55 times.
✓ Branch 5 taken 75534891 times.
✓ Branch 6 taken 8 times.
✓ Branch 7 taken 3 times.
✓ Branch 8 taken 8 times.
✓ Branch 9 taken 4 times.
✓ Branch 10 taken 13 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 2441734 times.
✓ Branch 13 taken 7166300 times.
✓ Branch 14 taken 9640106 times.
✓ Branch 15 taken 9475644 times.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✓ Branch 20 taken 21779 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 21779 times.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 21780 times.
✗ Branch 26 not taken.
✓ Branch 27 taken 1910 times.
✗ Branch 28 not taken.
✓ Branch 29 taken 1910 times.
✗ Branch 30 not taken.
✓ Branch 31 taken 1910 times.
✗ Branch 32 not taken.
✓ Branch 33 taken 1 times.
✗ Branch 34 not taken.
✓ Branch 35 taken 2 times.
✗ Branch 36 not taken.
✓ Branch 37 taken 7 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✗ Branch 51 not taken.
✗ Branch 52 not taken.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✗ Branch 63 not taken.
✗ Branch 64 not taken.
✗ Branch 65 not taken.
✗ Branch 66 not taken.
✗ Branch 67 not taken.
✗ Branch 68 not taken.
✗ Branch 69 not taken.
✗ Branch 70 not taken.
✗ Branch 71 not taken.
✗ Branch 72 not taken.
✗ Branch 73 not taken.
✗ Branch 74 not taken.
✗ Branch 75 not taken.
✗ Branch 76 not taken.
✗ Branch 77 not taken.
✗ Branch 78 not taken.
✗ Branch 79 not taken.
✗ Branch 80 not taken.
✗ Branch 81 not taken.
✗ Branch 82 not taken.
✗ Branch 83 not taken.
✗ Branch 84 not taken.
✗ Branch 85 not taken.
✗ Branch 86 not taken.
✗ Branch 87 not taken.
✗ Branch 88 not taken.
✗ Branch 89 not taken.
✗ Branch 90 not taken.
✗ Branch 91 not taken.
✗ Branch 92 not taken.
✗ Branch 93 not taken.
✗ Branch 94 not taken.
✗ Branch 95 not taken.
✗ Branch 96 not taken.
✗ Branch 97 not taken.
✗ Branch 98 not taken.
✗ Branch 99 not taken.
✗ Branch 100 not taken.
✗ Branch 101 not taken.
✗ Branch 102 not taken.
✗ Branch 103 not taken.
✗ Branch 104 not taken.
✗ Branch 105 not taken.
✗ Branch 106 not taken.
✗ Branch 107 not taken.
✗ Branch 108 not taken.
✗ Branch 109 not taken.
✗ Branch 110 not taken.
✗ Branch 111 not taken.
✗ Branch 112 not taken.
✗ Branch 113 not taken.
✗ Branch 114 not taken.
✗ Branch 115 not taken.
✗ Branch 116 not taken.
✗ Branch 117 not taken.
✗ Branch 118 not taken.
✗ Branch 119 not taken.
✗ Branch 120 not taken.
✗ Branch 121 not taken.
✗ Branch 122 not taken.
✗ Branch 123 not taken.
✗ Branch 124 not taken.
✗ Branch 125 not taken.
✗ Branch 126 not taken.
✗ Branch 127 not taken.
✗ Branch 128 not taken.
✗ Branch 129 not taken.
✗ Branch 130 not taken.
✗ Branch 131 not taken.
✗ Branch 132 not taken.
✗ Branch 133 not taken.
✗ Branch 134 not taken.
✗ Branch 135 not taken.
✗ Branch 136 not taken.
✗ Branch 137 not taken.
✗ Branch 138 not taken.
✗ Branch 139 not taken.
✗ Branch 140 not taken.
✗ Branch 141 not taken.
✗ Branch 142 not taken.
✗ Branch 143 not taken.
✗ Branch 144 not taken.
✗ Branch 145 not taken.
✗ Branch 146 not taken.
✗ Branch 147 not taken.
✗ Branch 148 not taken.
✗ Branch 149 not taken.
✗ Branch 150 not taken.
✗ Branch 151 not taken.
✗ Branch 152 not taken.
✗ Branch 153 not taken.
✗ Branch 154 not taken.
✗ Branch 155 not taken.
✗ Branch 156 not taken.
✗ Branch 157 not taken.
✗ Branch 158 not taken.
✗ Branch 159 not taken.
✗ Branch 160 not taken.
✗ Branch 161 not taken.
✗ Branch 162 not taken.
✗ Branch 163 not taken.
✗ Branch 164 not taken.
✗ Branch 165 not taken.
✗ Branch 166 not taken.
✗ Branch 167 not taken.
✗ Branch 168 not taken.
✗ Branch 169 not taken.
✗ Branch 170 not taken.
✗ Branch 171 not taken.
✗ Branch 172 not taken.
✗ Branch 173 not taken.
✗ Branch 174 not taken.
✗ Branch 175 not taken.
✗ Branch 176 not taken.
✗ Branch 177 not taken.
✗ Branch 178 not taken.
✗ Branch 179 not taken.
✗ Branch 180 not taken.
✗ Branch 181 not taken.
✗ Branch 182 not taken.
✗ Branch 183 not taken.
✗ Branch 184 not taken.
✗ Branch 185 not taken.
✗ Branch 186 not taken.
✗ Branch 187 not taken.
✗ Branch 188 not taken.
✗ Branch 189 not taken.
✗ Branch 190 not taken.
✗ Branch 191 not taken.
✗ Branch 192 not taken.
✗ Branch 193 not taken.
✗ Branch 194 not taken.
✗ Branch 195 not taken.
✗ Branch 196 not taken.
✗ Branch 197 not taken.
✗ Branch 198 not taken.
✗ Branch 199 not taken.
✗ Branch 200 not taken.
✗ Branch 201 not taken.
✗ Branch 202 not taken.
✗ Branch 203 not taken.
✗ Branch 204 not taken.
✗ Branch 205 not taken.
✗ Branch 206 not taken.
✗ Branch 207 not taken.
✗ Branch 208 not taken.
✗ Branch 209 not taken.
✗ Branch 210 not taken.
✗ Branch 211 not taken.
✗ Branch 212 not taken.
✗ Branch 213 not taken.
✗ Branch 214 not taken.
✗ Branch 215 not taken.
✗ Branch 216 not taken.
✗ Branch 217 not taken.
✗ Branch 218 not taken.
✗ Branch 219 not taken.
✗ Branch 220 not taken.
✗ Branch 221 not taken.
✗ Branch 222 not taken.
✗ Branch 223 not taken.
✗ Branch 224 not taken.
✗ Branch 225 not taken.
✗ Branch 226 not taken.
✗ Branch 227 not taken.
✗ Branch 228 not taken.
✗ Branch 229 not taken.
✗ Branch 230 not taken.
✗ Branch 231 not taken.
✗ Branch 232 not taken.
✗ Branch 233 not taken.
✗ Branch 234 not taken.
✗ Branch 235 not taken.
✗ Branch 236 not taken.
✗ Branch 237 not taken.
✗ Branch 238 not taken.
✗ Branch 239 not taken.
✗ Branch 240 not taken.
✗ Branch 241 not taken.
✗ Branch 242 not taken.
✗ Branch 243 not taken.
✗ Branch 244 not taken.
✗ Branch 245 not taken.
✗ Branch 246 not taken.
✗ Branch 247 not taken.
✗ Branch 248 not taken.
✗ Branch 249 not taken.
|
688485135 | inline double Abs(double x) { return std::fabs(x); } |
| 317 | inline long double Abs(long double x) { return std::fabs(x); } | ||
| 318 | inline uint32_t Abs(uint32_t i) { return i; } | ||
| 319 | inline uint64_t Abs(uint64_t i) { return i; } | ||
| 320 | inline bool Abs(bool b) { return b; } | ||
| 321 | // On systems like macOS and FreeBSD, size_t and uint64_t are different types | ||
| 322 | template <typename T> | ||
| 323 | inline typename std::enable_if<std::is_same<T, size_t>::value, T>::type | ||
| 324 | Abs(T i) { return i; } | ||
| 325 | //@} | ||
| 326 | |||
| 327 | |||
| 328 | //////////////////////////////////////// | ||
| 329 | |||
| 330 | |||
| 331 | // ==========> Value Comparison <================== | ||
| 332 | |||
| 333 | |||
| 334 | /// Return @c true if @a x is exactly equal to zero. | ||
| 335 | template<typename Type> | ||
| 336 | inline bool | ||
| 337 | 2 | isZero(const Type& x) | |
| 338 | { | ||
| 339 | OPENVDB_NO_FP_EQUALITY_WARNING_BEGIN | ||
| 340 |
9/16✓ Branch 0 taken 9 times.
✓ Branch 1 taken 1000 times.
✓ Branch 2 taken 1009 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 5 times.
✓ Branch 5 taken 1000 times.
✓ Branch 6 taken 1001 times.
✓ Branch 7 taken 26 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✓ Branch 15 taken 26 times.
|
4078 | return x == zeroVal<Type>(); |
| 341 | OPENVDB_NO_FP_EQUALITY_WARNING_END | ||
| 342 | } | ||
| 343 | |||
| 344 | |||
| 345 | /// @brief Return @c true if @a x is equal to zero to within | ||
| 346 | /// the default floating-point comparison tolerance. | ||
| 347 | template<typename Type> | ||
| 348 | inline bool | ||
| 349 | isApproxZero(const Type& x) | ||
| 350 | { | ||
| 351 | const Type tolerance = Type(zeroVal<Type>() + Tolerance<Type>::value()); | ||
| 352 |
40/1152✓ Branch 0 taken 24924 times.
✓ Branch 1 taken 24247 times.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 24919 times.
✓ Branch 4 taken 24921 times.
✓ Branch 5 taken 24242 times.
✓ Branch 6 taken 3 times.
✓ Branch 7 taken 24918 times.
✓ Branch 8 taken 103884 times.
✓ Branch 9 taken 104973 times.
✓ Branch 10 taken 150 times.
✓ Branch 11 taken 103734 times.
✓ Branch 12 taken 103884 times.
✓ Branch 13 taken 104972 times.
✓ Branch 14 taken 150 times.
✓ Branch 15 taken 103734 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 7 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 12 times.
✓ Branch 25 taken 17 times.
✓ Branch 26 taken 12 times.
✓ Branch 27 taken 20 times.
✓ Branch 28 taken 8 times.
✓ Branch 29 taken 4 times.
✗ Branch 30 not taken.
✓ Branch 31 taken 8 times.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 34 not taken.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✗ Branch 51 not taken.
✗ Branch 52 not taken.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✗ Branch 63 not taken.
✗ Branch 64 not taken.
✗ Branch 65 not taken.
✗ Branch 66 not taken.
✗ Branch 67 not taken.
✗ Branch 68 not taken.
✗ Branch 69 not taken.
✗ Branch 70 not taken.
✗ Branch 71 not taken.
✗ Branch 72 not taken.
✗ Branch 73 not taken.
✗ Branch 74 not taken.
✗ Branch 75 not taken.
✗ Branch 76 not taken.
✗ Branch 77 not taken.
✗ Branch 78 not taken.
✗ Branch 79 not taken.
✗ Branch 80 not taken.
✗ Branch 81 not taken.
✗ Branch 82 not taken.
✗ Branch 83 not taken.
✓ Branch 84 taken 98930 times.
✓ Branch 85 taken 122092 times.
✓ Branch 86 taken 2 times.
✓ Branch 87 taken 98928 times.
✓ Branch 88 taken 98930 times.
✓ Branch 89 taken 122092 times.
✓ Branch 90 taken 2 times.
✓ Branch 91 taken 98928 times.
✓ Branch 92 taken 98930 times.
✓ Branch 93 taken 122092 times.
✓ Branch 94 taken 2 times.
✓ Branch 95 taken 98928 times.
✗ Branch 96 not taken.
✗ Branch 97 not taken.
✗ Branch 98 not taken.
✗ Branch 99 not taken.
✗ Branch 100 not taken.
✗ Branch 101 not taken.
✗ Branch 102 not taken.
✗ Branch 103 not taken.
✓ Branch 104 taken 98930 times.
✓ Branch 105 taken 122092 times.
✓ Branch 106 taken 98928 times.
✓ Branch 107 taken 2 times.
✗ Branch 108 not taken.
✗ Branch 109 not taken.
✗ Branch 110 not taken.
✗ Branch 111 not taken.
✗ Branch 112 not taken.
✗ Branch 113 not taken.
✗ Branch 114 not taken.
✗ Branch 115 not taken.
✗ Branch 116 not taken.
✗ Branch 117 not taken.
✗ Branch 118 not taken.
✗ Branch 119 not taken.
✗ Branch 120 not taken.
✗ Branch 121 not taken.
✗ Branch 122 not taken.
✗ Branch 123 not taken.
✗ Branch 124 not taken.
✗ Branch 125 not taken.
✗ Branch 126 not taken.
✗ Branch 127 not taken.
✗ Branch 128 not taken.
✗ Branch 129 not taken.
✗ Branch 130 not taken.
✗ Branch 131 not taken.
✗ Branch 132 not taken.
✗ Branch 133 not taken.
✗ Branch 134 not taken.
✗ Branch 135 not taken.
✗ Branch 136 not taken.
✗ Branch 137 not taken.
✗ Branch 138 not taken.
✗ Branch 139 not taken.
✗ Branch 140 not taken.
✗ Branch 141 not taken.
✗ Branch 142 not taken.
✗ Branch 143 not taken.
✗ Branch 144 not taken.
✗ Branch 145 not taken.
✗ Branch 146 not taken.
✗ Branch 147 not taken.
✗ Branch 148 not taken.
✗ Branch 149 not taken.
✗ Branch 150 not taken.
✗ Branch 151 not taken.
✗ Branch 152 not taken.
✗ Branch 153 not taken.
✗ Branch 154 not taken.
✗ Branch 155 not taken.
✗ Branch 156 not taken.
✗ Branch 157 not taken.
✗ Branch 158 not taken.
✗ Branch 159 not taken.
✗ Branch 160 not taken.
✗ Branch 161 not taken.
✗ Branch 162 not taken.
✗ Branch 163 not taken.
✗ Branch 164 not taken.
✗ Branch 165 not taken.
✗ Branch 166 not taken.
✗ Branch 167 not taken.
✗ Branch 168 not taken.
✗ Branch 169 not taken.
✗ Branch 170 not taken.
✗ Branch 171 not taken.
✗ Branch 172 not taken.
✗ Branch 173 not taken.
✗ Branch 174 not taken.
✗ Branch 175 not taken.
✗ Branch 176 not taken.
✗ Branch 177 not taken.
✗ Branch 178 not taken.
✗ Branch 179 not taken.
✗ Branch 180 not taken.
✗ Branch 181 not taken.
✗ Branch 182 not taken.
✗ Branch 183 not taken.
✗ Branch 184 not taken.
✗ Branch 185 not taken.
✗ Branch 186 not taken.
✗ Branch 187 not taken.
✗ Branch 188 not taken.
✗ Branch 189 not taken.
✗ Branch 190 not taken.
✗ Branch 191 not taken.
✗ Branch 192 not taken.
✗ Branch 193 not taken.
✗ Branch 194 not taken.
✗ Branch 195 not taken.
✗ Branch 196 not taken.
✗ Branch 197 not taken.
✗ Branch 198 not taken.
✗ Branch 199 not taken.
✗ Branch 200 not taken.
✗ Branch 201 not taken.
✗ Branch 202 not taken.
✗ Branch 203 not taken.
✗ Branch 204 not taken.
✗ Branch 205 not taken.
✗ Branch 206 not taken.
✗ Branch 207 not taken.
✗ Branch 208 not taken.
✗ Branch 209 not taken.
✗ Branch 210 not taken.
✗ Branch 211 not taken.
✗ Branch 212 not taken.
✗ Branch 213 not taken.
✗ Branch 214 not taken.
✗ Branch 215 not taken.
✗ Branch 216 not taken.
✗ Branch 217 not taken.
✗ Branch 218 not taken.
✗ Branch 219 not taken.
✗ Branch 220 not taken.
✗ Branch 221 not taken.
✗ Branch 222 not taken.
✗ Branch 223 not taken.
✗ Branch 224 not taken.
✗ Branch 225 not taken.
✗ Branch 226 not taken.
✗ Branch 227 not taken.
✗ Branch 228 not taken.
✗ Branch 229 not taken.
✗ Branch 230 not taken.
✗ Branch 231 not taken.
✗ Branch 232 not taken.
✗ Branch 233 not taken.
✗ Branch 234 not taken.
✗ Branch 235 not taken.
✗ Branch 236 not taken.
✗ Branch 237 not taken.
✗ Branch 238 not taken.
✗ Branch 239 not taken.
✗ Branch 240 not taken.
✗ Branch 241 not taken.
✗ Branch 242 not taken.
✗ Branch 243 not taken.
✗ Branch 244 not taken.
✗ Branch 245 not taken.
✗ Branch 246 not taken.
✗ Branch 247 not taken.
✗ Branch 248 not taken.
✗ Branch 249 not taken.
✗ Branch 250 not taken.
✗ Branch 251 not taken.
✗ Branch 252 not taken.
✗ Branch 253 not taken.
✗ Branch 254 not taken.
✗ Branch 255 not taken.
✗ Branch 256 not taken.
✗ Branch 257 not taken.
✗ Branch 258 not taken.
✗ Branch 259 not taken.
✗ Branch 260 not taken.
✗ Branch 261 not taken.
✗ Branch 262 not taken.
✗ Branch 263 not taken.
✗ Branch 264 not taken.
✗ Branch 265 not taken.
✗ Branch 266 not taken.
✗ Branch 267 not taken.
✗ Branch 268 not taken.
✗ Branch 269 not taken.
✗ Branch 270 not taken.
✗ Branch 271 not taken.
✗ Branch 272 not taken.
✗ Branch 273 not taken.
✗ Branch 274 not taken.
✗ Branch 275 not taken.
✗ Branch 276 not taken.
✗ Branch 277 not taken.
✗ Branch 278 not taken.
✗ Branch 279 not taken.
✗ Branch 280 not taken.
✗ Branch 281 not taken.
✗ Branch 282 not taken.
✗ Branch 283 not taken.
✗ Branch 284 not taken.
✗ Branch 285 not taken.
✗ Branch 286 not taken.
✗ Branch 287 not taken.
✗ Branch 288 not taken.
✗ Branch 289 not taken.
✗ Branch 290 not taken.
✗ Branch 291 not taken.
✗ Branch 292 not taken.
✗ Branch 293 not taken.
✗ Branch 294 not taken.
✗ Branch 295 not taken.
✗ Branch 296 not taken.
✗ Branch 297 not taken.
✗ Branch 298 not taken.
✗ Branch 299 not taken.
✗ Branch 300 not taken.
✗ Branch 301 not taken.
✗ Branch 302 not taken.
✗ Branch 303 not taken.
✗ Branch 304 not taken.
✗ Branch 305 not taken.
✗ Branch 306 not taken.
✗ Branch 307 not taken.
✗ Branch 308 not taken.
✗ Branch 309 not taken.
✗ Branch 310 not taken.
✗ Branch 311 not taken.
✗ Branch 312 not taken.
✗ Branch 313 not taken.
✗ Branch 314 not taken.
✗ Branch 315 not taken.
✗ Branch 316 not taken.
✗ Branch 317 not taken.
✗ Branch 318 not taken.
✗ Branch 319 not taken.
✗ Branch 320 not taken.
✗ Branch 321 not taken.
✗ Branch 322 not taken.
✗ Branch 323 not taken.
✗ Branch 324 not taken.
✗ Branch 325 not taken.
✗ Branch 326 not taken.
✗ Branch 327 not taken.
✗ Branch 328 not taken.
✗ Branch 329 not taken.
✗ Branch 330 not taken.
✗ Branch 331 not taken.
✗ Branch 332 not taken.
✗ Branch 333 not taken.
✗ Branch 334 not taken.
✗ Branch 335 not taken.
✗ Branch 336 not taken.
✗ Branch 337 not taken.
✗ Branch 338 not taken.
✗ Branch 339 not taken.
✗ Branch 340 not taken.
✗ Branch 341 not taken.
✗ Branch 342 not taken.
✗ Branch 343 not taken.
✗ Branch 344 not taken.
✗ Branch 345 not taken.
✗ Branch 346 not taken.
✗ Branch 347 not taken.
✗ Branch 348 not taken.
✗ Branch 349 not taken.
✗ Branch 350 not taken.
✗ Branch 351 not taken.
✗ Branch 352 not taken.
✗ Branch 353 not taken.
✗ Branch 354 not taken.
✗ Branch 355 not taken.
✗ Branch 356 not taken.
✗ Branch 357 not taken.
✗ Branch 358 not taken.
✗ Branch 359 not taken.
✗ Branch 360 not taken.
✗ Branch 361 not taken.
✗ Branch 362 not taken.
✗ Branch 363 not taken.
✗ Branch 364 not taken.
✗ Branch 365 not taken.
✗ Branch 366 not taken.
✗ Branch 367 not taken.
✗ Branch 368 not taken.
✗ Branch 369 not taken.
✗ Branch 370 not taken.
✗ Branch 371 not taken.
✗ Branch 372 not taken.
✗ Branch 373 not taken.
✗ Branch 374 not taken.
✗ Branch 375 not taken.
✗ Branch 376 not taken.
✗ Branch 377 not taken.
✗ Branch 378 not taken.
✗ Branch 379 not taken.
✗ Branch 380 not taken.
✗ Branch 381 not taken.
✗ Branch 382 not taken.
✗ Branch 383 not taken.
✗ Branch 384 not taken.
✗ Branch 385 not taken.
✗ Branch 386 not taken.
✗ Branch 387 not taken.
✗ Branch 388 not taken.
✗ Branch 389 not taken.
✗ Branch 390 not taken.
✗ Branch 391 not taken.
✗ Branch 392 not taken.
✗ Branch 393 not taken.
✗ Branch 394 not taken.
✗ Branch 395 not taken.
✗ Branch 396 not taken.
✗ Branch 397 not taken.
✗ Branch 398 not taken.
✗ Branch 399 not taken.
✗ Branch 400 not taken.
✗ Branch 401 not taken.
✗ Branch 402 not taken.
✗ Branch 403 not taken.
✗ Branch 404 not taken.
✗ Branch 405 not taken.
✗ Branch 406 not taken.
✗ Branch 407 not taken.
✗ Branch 408 not taken.
✗ Branch 409 not taken.
✗ Branch 410 not taken.
✗ Branch 411 not taken.
✗ Branch 412 not taken.
✗ Branch 413 not taken.
✗ Branch 414 not taken.
✗ Branch 415 not taken.
✗ Branch 416 not taken.
✗ Branch 417 not taken.
✗ Branch 418 not taken.
✗ Branch 419 not taken.
✗ Branch 420 not taken.
✗ Branch 421 not taken.
✗ Branch 422 not taken.
✗ Branch 423 not taken.
✗ Branch 424 not taken.
✗ Branch 425 not taken.
✗ Branch 426 not taken.
✗ Branch 427 not taken.
✗ Branch 428 not taken.
✗ Branch 429 not taken.
✗ Branch 430 not taken.
✗ Branch 431 not taken.
✗ Branch 432 not taken.
✗ Branch 433 not taken.
✗ Branch 434 not taken.
✗ Branch 435 not taken.
✗ Branch 436 not taken.
✗ Branch 437 not taken.
✗ Branch 438 not taken.
✗ Branch 439 not taken.
✗ Branch 440 not taken.
✗ Branch 441 not taken.
✗ Branch 442 not taken.
✗ Branch 443 not taken.
✗ Branch 444 not taken.
✗ Branch 445 not taken.
✗ Branch 446 not taken.
✗ Branch 447 not taken.
✗ Branch 448 not taken.
✗ Branch 449 not taken.
✗ Branch 450 not taken.
✗ Branch 451 not taken.
✗ Branch 452 not taken.
✗ Branch 453 not taken.
✗ Branch 454 not taken.
✗ Branch 455 not taken.
✗ Branch 456 not taken.
✗ Branch 457 not taken.
✗ Branch 458 not taken.
✗ Branch 459 not taken.
✗ Branch 460 not taken.
✗ Branch 461 not taken.
✗ Branch 462 not taken.
✗ Branch 463 not taken.
✗ Branch 464 not taken.
✗ Branch 465 not taken.
✗ Branch 466 not taken.
✗ Branch 467 not taken.
✗ Branch 468 not taken.
✗ Branch 469 not taken.
✗ Branch 470 not taken.
✗ Branch 471 not taken.
✗ Branch 472 not taken.
✗ Branch 473 not taken.
✗ Branch 474 not taken.
✗ Branch 475 not taken.
✗ Branch 476 not taken.
✗ Branch 477 not taken.
✗ Branch 478 not taken.
✗ Branch 479 not taken.
✗ Branch 480 not taken.
✗ Branch 481 not taken.
✗ Branch 482 not taken.
✗ Branch 483 not taken.
✗ Branch 484 not taken.
✗ Branch 485 not taken.
✗ Branch 486 not taken.
✗ Branch 487 not taken.
✗ Branch 488 not taken.
✗ Branch 489 not taken.
✗ Branch 490 not taken.
✗ Branch 491 not taken.
✗ Branch 492 not taken.
✗ Branch 493 not taken.
✗ Branch 494 not taken.
✗ Branch 495 not taken.
✗ Branch 496 not taken.
✗ Branch 497 not taken.
✗ Branch 498 not taken.
✗ Branch 499 not taken.
✗ Branch 500 not taken.
✗ Branch 501 not taken.
✗ Branch 502 not taken.
✗ Branch 503 not taken.
✗ Branch 504 not taken.
✗ Branch 505 not taken.
✗ Branch 506 not taken.
✗ Branch 507 not taken.
✗ Branch 508 not taken.
✗ Branch 509 not taken.
✗ Branch 510 not taken.
✗ Branch 511 not taken.
✗ Branch 512 not taken.
✗ Branch 513 not taken.
✗ Branch 514 not taken.
✗ Branch 515 not taken.
✗ Branch 516 not taken.
✗ Branch 517 not taken.
✗ Branch 518 not taken.
✗ Branch 519 not taken.
✗ Branch 520 not taken.
✗ Branch 521 not taken.
✗ Branch 522 not taken.
✗ Branch 523 not taken.
✗ Branch 524 not taken.
✗ Branch 525 not taken.
✗ Branch 526 not taken.
✗ Branch 527 not taken.
✗ Branch 528 not taken.
✗ Branch 529 not taken.
✗ Branch 530 not taken.
✗ Branch 531 not taken.
✗ Branch 532 not taken.
✗ Branch 533 not taken.
✗ Branch 534 not taken.
✗ Branch 535 not taken.
✗ Branch 536 not taken.
✗ Branch 537 not taken.
✗ Branch 538 not taken.
✗ Branch 539 not taken.
✗ Branch 540 not taken.
✗ Branch 541 not taken.
✗ Branch 542 not taken.
✗ Branch 543 not taken.
✗ Branch 544 not taken.
✗ Branch 545 not taken.
✗ Branch 546 not taken.
✗ Branch 547 not taken.
✗ Branch 548 not taken.
✗ Branch 549 not taken.
✗ Branch 550 not taken.
✗ Branch 551 not taken.
✗ Branch 552 not taken.
✗ Branch 553 not taken.
✗ Branch 554 not taken.
✗ Branch 555 not taken.
✗ Branch 556 not taken.
✗ Branch 557 not taken.
✗ Branch 558 not taken.
✗ Branch 559 not taken.
✗ Branch 560 not taken.
✗ Branch 561 not taken.
✗ Branch 562 not taken.
✗ Branch 563 not taken.
✗ Branch 564 not taken.
✗ Branch 565 not taken.
✗ Branch 566 not taken.
✗ Branch 567 not taken.
✗ Branch 568 not taken.
✗ Branch 569 not taken.
✗ Branch 570 not taken.
✗ Branch 571 not taken.
✗ Branch 572 not taken.
✗ Branch 573 not taken.
✗ Branch 574 not taken.
✗ Branch 575 not taken.
✗ Branch 576 not taken.
✗ Branch 577 not taken.
✗ Branch 578 not taken.
✗ Branch 579 not taken.
✗ Branch 580 not taken.
✗ Branch 581 not taken.
✗ Branch 582 not taken.
✗ Branch 583 not taken.
✗ Branch 584 not taken.
✗ Branch 585 not taken.
✗ Branch 586 not taken.
✗ Branch 587 not taken.
✗ Branch 588 not taken.
✗ Branch 589 not taken.
✗ Branch 590 not taken.
✗ Branch 591 not taken.
✗ Branch 592 not taken.
✗ Branch 593 not taken.
✗ Branch 594 not taken.
✗ Branch 595 not taken.
✗ Branch 596 not taken.
✗ Branch 597 not taken.
✗ Branch 598 not taken.
✗ Branch 599 not taken.
✗ Branch 600 not taken.
✗ Branch 601 not taken.
✗ Branch 602 not taken.
✗ Branch 603 not taken.
✗ Branch 604 not taken.
✗ Branch 605 not taken.
✗ Branch 606 not taken.
✗ Branch 607 not taken.
✗ Branch 608 not taken.
✗ Branch 609 not taken.
✗ Branch 610 not taken.
✗ Branch 611 not taken.
✗ Branch 612 not taken.
✗ Branch 613 not taken.
✗ Branch 614 not taken.
✗ Branch 615 not taken.
✗ Branch 616 not taken.
✗ Branch 617 not taken.
✗ Branch 618 not taken.
✗ Branch 619 not taken.
✗ Branch 620 not taken.
✗ Branch 621 not taken.
✗ Branch 622 not taken.
✗ Branch 623 not taken.
✗ Branch 624 not taken.
✗ Branch 625 not taken.
✗ Branch 626 not taken.
✗ Branch 627 not taken.
✗ Branch 628 not taken.
✗ Branch 629 not taken.
✗ Branch 630 not taken.
✗ Branch 631 not taken.
✗ Branch 632 not taken.
✗ Branch 633 not taken.
✗ Branch 634 not taken.
✗ Branch 635 not taken.
✗ Branch 636 not taken.
✗ Branch 637 not taken.
✗ Branch 638 not taken.
✗ Branch 639 not taken.
✗ Branch 640 not taken.
✗ Branch 641 not taken.
✗ Branch 642 not taken.
✗ Branch 643 not taken.
✗ Branch 644 not taken.
✗ Branch 645 not taken.
✗ Branch 646 not taken.
✗ Branch 647 not taken.
✗ Branch 648 not taken.
✗ Branch 649 not taken.
✗ Branch 650 not taken.
✗ Branch 651 not taken.
✗ Branch 652 not taken.
✗ Branch 653 not taken.
✗ Branch 654 not taken.
✗ Branch 655 not taken.
✗ Branch 656 not taken.
✗ Branch 657 not taken.
✗ Branch 658 not taken.
✗ Branch 659 not taken.
✗ Branch 660 not taken.
✗ Branch 661 not taken.
✗ Branch 662 not taken.
✗ Branch 663 not taken.
✗ Branch 664 not taken.
✗ Branch 665 not taken.
✗ Branch 666 not taken.
✗ Branch 667 not taken.
✗ Branch 668 not taken.
✗ Branch 669 not taken.
✗ Branch 670 not taken.
✗ Branch 671 not taken.
✗ Branch 672 not taken.
✗ Branch 673 not taken.
✗ Branch 674 not taken.
✗ Branch 675 not taken.
✗ Branch 676 not taken.
✗ Branch 677 not taken.
✗ Branch 678 not taken.
✗ Branch 679 not taken.
✗ Branch 680 not taken.
✗ Branch 681 not taken.
✗ Branch 682 not taken.
✗ Branch 683 not taken.
✗ Branch 684 not taken.
✗ Branch 685 not taken.
✗ Branch 686 not taken.
✗ Branch 687 not taken.
✗ Branch 688 not taken.
✗ Branch 689 not taken.
✗ Branch 690 not taken.
✗ Branch 691 not taken.
✗ Branch 692 not taken.
✗ Branch 693 not taken.
✗ Branch 694 not taken.
✗ Branch 695 not taken.
✗ Branch 696 not taken.
✗ Branch 697 not taken.
✗ Branch 698 not taken.
✗ Branch 699 not taken.
✗ Branch 700 not taken.
✗ Branch 701 not taken.
✗ Branch 702 not taken.
✗ Branch 703 not taken.
✗ Branch 704 not taken.
✗ Branch 705 not taken.
✗ Branch 706 not taken.
✗ Branch 707 not taken.
✗ Branch 708 not taken.
✗ Branch 709 not taken.
✗ Branch 710 not taken.
✗ Branch 711 not taken.
✗ Branch 712 not taken.
✗ Branch 713 not taken.
✗ Branch 714 not taken.
✗ Branch 715 not taken.
✗ Branch 716 not taken.
✗ Branch 717 not taken.
✗ Branch 718 not taken.
✗ Branch 719 not taken.
✗ Branch 720 not taken.
✗ Branch 721 not taken.
✗ Branch 722 not taken.
✗ Branch 723 not taken.
✗ Branch 724 not taken.
✗ Branch 725 not taken.
✗ Branch 726 not taken.
✗ Branch 727 not taken.
✗ Branch 728 not taken.
✗ Branch 729 not taken.
✗ Branch 730 not taken.
✗ Branch 731 not taken.
✗ Branch 732 not taken.
✗ Branch 733 not taken.
✗ Branch 734 not taken.
✗ Branch 735 not taken.
✗ Branch 736 not taken.
✗ Branch 737 not taken.
✗ Branch 738 not taken.
✗ Branch 739 not taken.
✗ Branch 740 not taken.
✗ Branch 741 not taken.
✗ Branch 742 not taken.
✗ Branch 743 not taken.
✗ Branch 744 not taken.
✗ Branch 745 not taken.
✗ Branch 746 not taken.
✗ Branch 747 not taken.
✗ Branch 748 not taken.
✗ Branch 749 not taken.
✗ Branch 750 not taken.
✗ Branch 751 not taken.
✗ Branch 752 not taken.
✗ Branch 753 not taken.
✗ Branch 754 not taken.
✗ Branch 755 not taken.
✗ Branch 756 not taken.
✗ Branch 757 not taken.
✗ Branch 758 not taken.
✗ Branch 759 not taken.
✗ Branch 760 not taken.
✗ Branch 761 not taken.
✗ Branch 762 not taken.
✗ Branch 763 not taken.
✗ Branch 764 not taken.
✗ Branch 765 not taken.
✗ Branch 766 not taken.
✗ Branch 767 not taken.
✗ Branch 768 not taken.
✗ Branch 769 not taken.
✗ Branch 770 not taken.
✗ Branch 771 not taken.
✗ Branch 772 not taken.
✗ Branch 773 not taken.
✗ Branch 774 not taken.
✗ Branch 775 not taken.
✗ Branch 776 not taken.
✗ Branch 777 not taken.
✗ Branch 778 not taken.
✗ Branch 779 not taken.
✗ Branch 780 not taken.
✗ Branch 781 not taken.
✗ Branch 782 not taken.
✗ Branch 783 not taken.
✗ Branch 784 not taken.
✗ Branch 785 not taken.
✗ Branch 786 not taken.
✗ Branch 787 not taken.
✗ Branch 788 not taken.
✗ Branch 789 not taken.
✗ Branch 790 not taken.
✗ Branch 791 not taken.
✗ Branch 792 not taken.
✗ Branch 793 not taken.
✗ Branch 794 not taken.
✗ Branch 795 not taken.
✗ Branch 796 not taken.
✗ Branch 797 not taken.
✗ Branch 798 not taken.
✗ Branch 799 not taken.
✗ Branch 800 not taken.
✗ Branch 801 not taken.
✗ Branch 802 not taken.
✗ Branch 803 not taken.
✗ Branch 804 not taken.
✗ Branch 805 not taken.
✗ Branch 806 not taken.
✗ Branch 807 not taken.
✗ Branch 808 not taken.
✗ Branch 809 not taken.
✗ Branch 810 not taken.
✗ Branch 811 not taken.
✗ Branch 812 not taken.
✗ Branch 813 not taken.
✗ Branch 814 not taken.
✗ Branch 815 not taken.
✗ Branch 816 not taken.
✗ Branch 817 not taken.
✗ Branch 818 not taken.
✗ Branch 819 not taken.
✗ Branch 820 not taken.
✗ Branch 821 not taken.
✗ Branch 822 not taken.
✗ Branch 823 not taken.
✗ Branch 824 not taken.
✗ Branch 825 not taken.
✗ Branch 826 not taken.
✗ Branch 827 not taken.
✗ Branch 828 not taken.
✗ Branch 829 not taken.
✗ Branch 830 not taken.
✗ Branch 831 not taken.
✗ Branch 832 not taken.
✗ Branch 833 not taken.
✗ Branch 834 not taken.
✗ Branch 835 not taken.
✗ Branch 836 not taken.
✗ Branch 837 not taken.
✗ Branch 838 not taken.
✗ Branch 839 not taken.
✗ Branch 840 not taken.
✗ Branch 841 not taken.
✗ Branch 842 not taken.
✗ Branch 843 not taken.
✗ Branch 844 not taken.
✗ Branch 845 not taken.
✗ Branch 846 not taken.
✗ Branch 847 not taken.
✗ Branch 848 not taken.
✗ Branch 849 not taken.
✗ Branch 850 not taken.
✗ Branch 851 not taken.
✗ Branch 852 not taken.
✗ Branch 853 not taken.
✗ Branch 854 not taken.
✗ Branch 855 not taken.
✗ Branch 856 not taken.
✗ Branch 857 not taken.
✗ Branch 858 not taken.
✗ Branch 859 not taken.
✗ Branch 860 not taken.
✗ Branch 861 not taken.
✗ Branch 862 not taken.
✗ Branch 863 not taken.
✗ Branch 864 not taken.
✗ Branch 865 not taken.
✗ Branch 866 not taken.
✗ Branch 867 not taken.
✗ Branch 868 not taken.
✗ Branch 869 not taken.
✗ Branch 870 not taken.
✗ Branch 871 not taken.
✗ Branch 872 not taken.
✗ Branch 873 not taken.
✗ Branch 874 not taken.
✗ Branch 875 not taken.
✗ Branch 876 not taken.
✗ Branch 877 not taken.
✗ Branch 878 not taken.
✗ Branch 879 not taken.
✗ Branch 880 not taken.
✗ Branch 881 not taken.
✗ Branch 882 not taken.
✗ Branch 883 not taken.
✗ Branch 884 not taken.
✗ Branch 885 not taken.
✗ Branch 886 not taken.
✗ Branch 887 not taken.
✗ Branch 888 not taken.
✗ Branch 889 not taken.
✗ Branch 890 not taken.
✗ Branch 891 not taken.
✗ Branch 892 not taken.
✗ Branch 893 not taken.
✗ Branch 894 not taken.
✗ Branch 895 not taken.
✗ Branch 896 not taken.
✗ Branch 897 not taken.
✗ Branch 898 not taken.
✗ Branch 899 not taken.
✗ Branch 900 not taken.
✗ Branch 901 not taken.
✗ Branch 902 not taken.
✗ Branch 903 not taken.
✗ Branch 904 not taken.
✗ Branch 905 not taken.
✗ Branch 906 not taken.
✗ Branch 907 not taken.
✗ Branch 908 not taken.
✗ Branch 909 not taken.
✗ Branch 910 not taken.
✗ Branch 911 not taken.
✗ Branch 912 not taken.
✗ Branch 913 not taken.
✗ Branch 914 not taken.
✗ Branch 915 not taken.
✗ Branch 916 not taken.
✗ Branch 917 not taken.
✗ Branch 918 not taken.
✗ Branch 919 not taken.
✗ Branch 920 not taken.
✗ Branch 921 not taken.
✗ Branch 922 not taken.
✗ Branch 923 not taken.
✗ Branch 924 not taken.
✗ Branch 925 not taken.
✗ Branch 926 not taken.
✗ Branch 927 not taken.
✗ Branch 928 not taken.
✗ Branch 929 not taken.
✗ Branch 930 not taken.
✗ Branch 931 not taken.
✗ Branch 932 not taken.
✗ Branch 933 not taken.
✗ Branch 934 not taken.
✗ Branch 935 not taken.
✗ Branch 936 not taken.
✗ Branch 937 not taken.
✗ Branch 938 not taken.
✗ Branch 939 not taken.
✗ Branch 940 not taken.
✗ Branch 941 not taken.
✗ Branch 942 not taken.
✗ Branch 943 not taken.
✗ Branch 944 not taken.
✗ Branch 945 not taken.
✗ Branch 946 not taken.
✗ Branch 947 not taken.
✗ Branch 948 not taken.
✗ Branch 949 not taken.
✗ Branch 950 not taken.
✗ Branch 951 not taken.
✗ Branch 952 not taken.
✗ Branch 953 not taken.
✗ Branch 954 not taken.
✗ Branch 955 not taken.
✗ Branch 956 not taken.
✗ Branch 957 not taken.
✗ Branch 958 not taken.
✗ Branch 959 not taken.
✗ Branch 960 not taken.
✗ Branch 961 not taken.
✗ Branch 962 not taken.
✗ Branch 963 not taken.
✗ Branch 964 not taken.
✗ Branch 965 not taken.
✗ Branch 966 not taken.
✗ Branch 967 not taken.
✗ Branch 968 not taken.
✗ Branch 969 not taken.
✗ Branch 970 not taken.
✗ Branch 971 not taken.
✗ Branch 972 not taken.
✗ Branch 973 not taken.
✗ Branch 974 not taken.
✗ Branch 975 not taken.
✗ Branch 976 not taken.
✗ Branch 977 not taken.
✗ Branch 978 not taken.
✗ Branch 979 not taken.
✗ Branch 980 not taken.
✗ Branch 981 not taken.
✗ Branch 982 not taken.
✗ Branch 983 not taken.
✗ Branch 984 not taken.
✗ Branch 985 not taken.
✗ Branch 986 not taken.
✗ Branch 987 not taken.
✗ Branch 988 not taken.
✗ Branch 989 not taken.
✗ Branch 990 not taken.
✗ Branch 991 not taken.
✗ Branch 992 not taken.
✗ Branch 993 not taken.
✗ Branch 994 not taken.
✗ Branch 995 not taken.
✗ Branch 996 not taken.
✗ Branch 997 not taken.
✗ Branch 998 not taken.
✗ Branch 999 not taken.
✗ Branch 1000 not taken.
✗ Branch 1001 not taken.
✗ Branch 1002 not taken.
✗ Branch 1003 not taken.
✗ Branch 1004 not taken.
✗ Branch 1005 not taken.
✗ Branch 1006 not taken.
✗ Branch 1007 not taken.
✗ Branch 1008 not taken.
✗ Branch 1009 not taken.
✗ Branch 1010 not taken.
✗ Branch 1011 not taken.
✗ Branch 1012 not taken.
✗ Branch 1013 not taken.
✗ Branch 1014 not taken.
✗ Branch 1015 not taken.
✗ Branch 1016 not taken.
✗ Branch 1017 not taken.
✗ Branch 1018 not taken.
✗ Branch 1019 not taken.
✗ Branch 1020 not taken.
✗ Branch 1021 not taken.
✗ Branch 1022 not taken.
✗ Branch 1023 not taken.
✗ Branch 1024 not taken.
✗ Branch 1025 not taken.
✗ Branch 1026 not taken.
✗ Branch 1027 not taken.
✗ Branch 1028 not taken.
✗ Branch 1029 not taken.
✗ Branch 1030 not taken.
✗ Branch 1031 not taken.
✗ Branch 1032 not taken.
✗ Branch 1033 not taken.
✗ Branch 1034 not taken.
✗ Branch 1035 not taken.
✗ Branch 1036 not taken.
✗ Branch 1037 not taken.
✗ Branch 1038 not taken.
✗ Branch 1039 not taken.
✗ Branch 1040 not taken.
✗ Branch 1041 not taken.
✗ Branch 1042 not taken.
✗ Branch 1043 not taken.
✗ Branch 1044 not taken.
✗ Branch 1045 not taken.
✗ Branch 1046 not taken.
✗ Branch 1047 not taken.
✗ Branch 1048 not taken.
✗ Branch 1049 not taken.
✗ Branch 1050 not taken.
✗ Branch 1051 not taken.
✗ Branch 1052 not taken.
✗ Branch 1053 not taken.
✗ Branch 1054 not taken.
✗ Branch 1055 not taken.
✗ Branch 1056 not taken.
✗ Branch 1057 not taken.
✗ Branch 1058 not taken.
✗ Branch 1059 not taken.
✗ Branch 1060 not taken.
✗ Branch 1061 not taken.
✗ Branch 1062 not taken.
✗ Branch 1063 not taken.
✗ Branch 1064 not taken.
✗ Branch 1065 not taken.
✗ Branch 1066 not taken.
✗ Branch 1067 not taken.
✗ Branch 1068 not taken.
✗ Branch 1069 not taken.
✗ Branch 1070 not taken.
✗ Branch 1071 not taken.
✗ Branch 1072 not taken.
✗ Branch 1073 not taken.
✗ Branch 1074 not taken.
✗ Branch 1075 not taken.
✗ Branch 1076 not taken.
✗ Branch 1077 not taken.
✗ Branch 1078 not taken.
✗ Branch 1079 not taken.
✗ Branch 1080 not taken.
✗ Branch 1081 not taken.
✗ Branch 1082 not taken.
✗ Branch 1083 not taken.
✗ Branch 1084 not taken.
✗ Branch 1085 not taken.
✗ Branch 1086 not taken.
✗ Branch 1087 not taken.
✗ Branch 1088 not taken.
✗ Branch 1089 not taken.
✗ Branch 1090 not taken.
✗ Branch 1091 not taken.
✗ Branch 1092 not taken.
✗ Branch 1093 not taken.
✗ Branch 1094 not taken.
✗ Branch 1095 not taken.
✗ Branch 1096 not taken.
✗ Branch 1097 not taken.
✗ Branch 1098 not taken.
✗ Branch 1099 not taken.
✗ Branch 1100 not taken.
✗ Branch 1101 not taken.
✗ Branch 1102 not taken.
✗ Branch 1103 not taken.
✗ Branch 1104 not taken.
✗ Branch 1105 not taken.
✗ Branch 1106 not taken.
✗ Branch 1107 not taken.
✗ Branch 1108 not taken.
✗ Branch 1109 not taken.
✗ Branch 1110 not taken.
✗ Branch 1111 not taken.
✗ Branch 1112 not taken.
✗ Branch 1113 not taken.
✗ Branch 1114 not taken.
✗ Branch 1115 not taken.
✗ Branch 1116 not taken.
✗ Branch 1117 not taken.
✗ Branch 1118 not taken.
✗ Branch 1119 not taken.
✗ Branch 1120 not taken.
✗ Branch 1121 not taken.
✗ Branch 1122 not taken.
✗ Branch 1123 not taken.
✗ Branch 1124 not taken.
✗ Branch 1125 not taken.
✗ Branch 1126 not taken.
✗ Branch 1127 not taken.
✗ Branch 1128 not taken.
✗ Branch 1129 not taken.
✗ Branch 1130 not taken.
✗ Branch 1131 not taken.
✗ Branch 1132 not taken.
✗ Branch 1133 not taken.
✗ Branch 1134 not taken.
✗ Branch 1135 not taken.
✗ Branch 1136 not taken.
✗ Branch 1137 not taken.
✗ Branch 1138 not taken.
✗ Branch 1139 not taken.
✗ Branch 1140 not taken.
✗ Branch 1141 not taken.
✗ Branch 1142 not taken.
✗ Branch 1143 not taken.
✗ Branch 1144 not taken.
✗ Branch 1145 not taken.
✗ Branch 1146 not taken.
✗ Branch 1147 not taken.
✗ Branch 1148 not taken.
✗ Branch 1149 not taken.
✗ Branch 1150 not taken.
✗ Branch 1151 not taken.
|
1400203 | return !(x > tolerance) && !(x < -tolerance); |
| 353 | } | ||
| 354 | |||
| 355 | /// Return @c true if @a x is equal to zero to within the given tolerance. | ||
| 356 | template<typename Type> | ||
| 357 | inline bool | ||
| 358 | isApproxZero(const Type& x, const Type& tolerance) | ||
| 359 | { | ||
| 360 |
21/480✓ Branch 0 taken 10 times.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
✓ Branch 12 taken 1 times.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 1 times.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 1 times.
✓ Branch 28 taken 1 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 34 not taken.
✗ Branch 35 not taken.
✓ Branch 36 taken 1 times.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✓ Branch 39 taken 1 times.
✓ Branch 40 taken 7 times.
✓ Branch 41 taken 1 times.
✗ Branch 42 not taken.
✓ Branch 43 taken 7 times.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✗ Branch 51 not taken.
✗ Branch 52 not taken.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✗ Branch 63 not taken.
✗ Branch 64 not taken.
✗ Branch 65 not taken.
✗ Branch 66 not taken.
✗ Branch 67 not taken.
✗ Branch 68 not taken.
✗ Branch 69 not taken.
✗ Branch 70 not taken.
✗ Branch 71 not taken.
✗ Branch 72 not taken.
✗ Branch 73 not taken.
✗ Branch 74 not taken.
✗ Branch 75 not taken.
✗ Branch 76 not taken.
✗ Branch 77 not taken.
✗ Branch 78 not taken.
✗ Branch 79 not taken.
✗ Branch 80 not taken.
✗ Branch 81 not taken.
✗ Branch 82 not taken.
✗ Branch 83 not taken.
✗ Branch 84 not taken.
✗ Branch 85 not taken.
✗ Branch 86 not taken.
✗ Branch 87 not taken.
✗ Branch 88 not taken.
✗ Branch 89 not taken.
✗ Branch 90 not taken.
✗ Branch 91 not taken.
✗ Branch 92 not taken.
✗ Branch 93 not taken.
✗ Branch 94 not taken.
✗ Branch 95 not taken.
✗ Branch 96 not taken.
✗ Branch 97 not taken.
✗ Branch 98 not taken.
✗ Branch 99 not taken.
✗ Branch 100 not taken.
✗ Branch 101 not taken.
✗ Branch 102 not taken.
✗ Branch 103 not taken.
✗ Branch 104 not taken.
✗ Branch 105 not taken.
✗ Branch 106 not taken.
✗ Branch 107 not taken.
✗ Branch 108 not taken.
✗ Branch 109 not taken.
✗ Branch 110 not taken.
✗ Branch 111 not taken.
✗ Branch 112 not taken.
✗ Branch 113 not taken.
✗ Branch 114 not taken.
✗ Branch 115 not taken.
✗ Branch 116 not taken.
✗ Branch 117 not taken.
✗ Branch 118 not taken.
✗ Branch 119 not taken.
✗ Branch 120 not taken.
✗ Branch 121 not taken.
✗ Branch 122 not taken.
✗ Branch 123 not taken.
✗ Branch 124 not taken.
✗ Branch 125 not taken.
✗ Branch 126 not taken.
✗ Branch 127 not taken.
✗ Branch 128 not taken.
✗ Branch 129 not taken.
✗ Branch 130 not taken.
✗ Branch 131 not taken.
✗ Branch 132 not taken.
✗ Branch 133 not taken.
✗ Branch 134 not taken.
✗ Branch 135 not taken.
✗ Branch 136 not taken.
✗ Branch 137 not taken.
✗ Branch 138 not taken.
✗ Branch 139 not taken.
✗ Branch 140 not taken.
✗ Branch 141 not taken.
✗ Branch 142 not taken.
✗ Branch 143 not taken.
✗ Branch 144 not taken.
✗ Branch 145 not taken.
✗ Branch 146 not taken.
✗ Branch 147 not taken.
✗ Branch 148 not taken.
✗ Branch 149 not taken.
✗ Branch 150 not taken.
✗ Branch 151 not taken.
✗ Branch 152 not taken.
✗ Branch 153 not taken.
✗ Branch 154 not taken.
✗ Branch 155 not taken.
✗ Branch 156 not taken.
✗ Branch 157 not taken.
✗ Branch 158 not taken.
✗ Branch 159 not taken.
✗ Branch 160 not taken.
✗ Branch 161 not taken.
✗ Branch 162 not taken.
✗ Branch 163 not taken.
✗ Branch 164 not taken.
✗ Branch 165 not taken.
✗ Branch 166 not taken.
✗ Branch 167 not taken.
✗ Branch 168 not taken.
✗ Branch 169 not taken.
✗ Branch 170 not taken.
✗ Branch 171 not taken.
✗ Branch 172 not taken.
✗ Branch 173 not taken.
✗ Branch 174 not taken.
✗ Branch 175 not taken.
✗ Branch 176 not taken.
✗ Branch 177 not taken.
✗ Branch 178 not taken.
✗ Branch 179 not taken.
✗ Branch 180 not taken.
✗ Branch 181 not taken.
✗ Branch 182 not taken.
✗ Branch 183 not taken.
✗ Branch 184 not taken.
✗ Branch 185 not taken.
✗ Branch 186 not taken.
✗ Branch 187 not taken.
✗ Branch 188 not taken.
✗ Branch 189 not taken.
✗ Branch 190 not taken.
✗ Branch 191 not taken.
✗ Branch 192 not taken.
✗ Branch 193 not taken.
✗ Branch 194 not taken.
✗ Branch 195 not taken.
✗ Branch 196 not taken.
✗ Branch 197 not taken.
✗ Branch 198 not taken.
✗ Branch 199 not taken.
✗ Branch 200 not taken.
✗ Branch 201 not taken.
✗ Branch 202 not taken.
✗ Branch 203 not taken.
✗ Branch 204 not taken.
✗ Branch 205 not taken.
✗ Branch 206 not taken.
✗ Branch 207 not taken.
✗ Branch 208 not taken.
✗ Branch 209 not taken.
✗ Branch 210 not taken.
✗ Branch 211 not taken.
✗ Branch 212 not taken.
✗ Branch 213 not taken.
✗ Branch 214 not taken.
✗ Branch 215 not taken.
✗ Branch 216 not taken.
✗ Branch 217 not taken.
✗ Branch 218 not taken.
✗ Branch 219 not taken.
✗ Branch 220 not taken.
✗ Branch 221 not taken.
✗ Branch 222 not taken.
✗ Branch 223 not taken.
✗ Branch 224 not taken.
✗ Branch 225 not taken.
✗ Branch 226 not taken.
✗ Branch 227 not taken.
✗ Branch 228 not taken.
✗ Branch 229 not taken.
✗ Branch 230 not taken.
✗ Branch 231 not taken.
✗ Branch 232 not taken.
✗ Branch 233 not taken.
✗ Branch 234 not taken.
✗ Branch 235 not taken.
✗ Branch 236 not taken.
✗ Branch 237 not taken.
✗ Branch 238 not taken.
✗ Branch 239 not taken.
✗ Branch 240 not taken.
✗ Branch 241 not taken.
✗ Branch 242 not taken.
✗ Branch 243 not taken.
✗ Branch 244 not taken.
✗ Branch 245 not taken.
✗ Branch 246 not taken.
✗ Branch 247 not taken.
✗ Branch 248 not taken.
✗ Branch 249 not taken.
✗ Branch 250 not taken.
✗ Branch 251 not taken.
✗ Branch 252 not taken.
✗ Branch 253 not taken.
✗ Branch 254 not taken.
✗ Branch 255 not taken.
✗ Branch 256 not taken.
✗ Branch 257 not taken.
✗ Branch 258 not taken.
✗ Branch 259 not taken.
✗ Branch 260 not taken.
✗ Branch 261 not taken.
✗ Branch 262 not taken.
✗ Branch 263 not taken.
✗ Branch 264 not taken.
✗ Branch 265 not taken.
✗ Branch 266 not taken.
✗ Branch 267 not taken.
✗ Branch 268 not taken.
✗ Branch 269 not taken.
✗ Branch 270 not taken.
✗ Branch 271 not taken.
✗ Branch 272 not taken.
✗ Branch 273 not taken.
✗ Branch 274 not taken.
✗ Branch 275 not taken.
✗ Branch 276 not taken.
✗ Branch 277 not taken.
✗ Branch 278 not taken.
✗ Branch 279 not taken.
✗ Branch 280 not taken.
✗ Branch 281 not taken.
✗ Branch 282 not taken.
✗ Branch 283 not taken.
✗ Branch 284 not taken.
✗ Branch 285 not taken.
✗ Branch 286 not taken.
✗ Branch 287 not taken.
✗ Branch 288 not taken.
✗ Branch 289 not taken.
✗ Branch 290 not taken.
✗ Branch 291 not taken.
✗ Branch 292 not taken.
✗ Branch 293 not taken.
✗ Branch 294 not taken.
✗ Branch 295 not taken.
✗ Branch 296 not taken.
✗ Branch 297 not taken.
✗ Branch 298 not taken.
✗ Branch 299 not taken.
✗ Branch 300 not taken.
✗ Branch 301 not taken.
✗ Branch 302 not taken.
✗ Branch 303 not taken.
✗ Branch 304 not taken.
✗ Branch 305 not taken.
✗ Branch 306 not taken.
✗ Branch 307 not taken.
✗ Branch 308 not taken.
✗ Branch 309 not taken.
✗ Branch 310 not taken.
✗ Branch 311 not taken.
✗ Branch 312 not taken.
✗ Branch 313 not taken.
✗ Branch 314 not taken.
✗ Branch 315 not taken.
✗ Branch 316 not taken.
✗ Branch 317 not taken.
✗ Branch 318 not taken.
✗ Branch 319 not taken.
✗ Branch 320 not taken.
✗ Branch 321 not taken.
✗ Branch 322 not taken.
✗ Branch 323 not taken.
✗ Branch 324 not taken.
✗ Branch 325 not taken.
✗ Branch 326 not taken.
✗ Branch 327 not taken.
✗ Branch 328 not taken.
✗ Branch 329 not taken.
✗ Branch 330 not taken.
✗ Branch 331 not taken.
✗ Branch 332 not taken.
✗ Branch 333 not taken.
✗ Branch 334 not taken.
✗ Branch 335 not taken.
✗ Branch 336 not taken.
✗ Branch 337 not taken.
✗ Branch 338 not taken.
✗ Branch 339 not taken.
✗ Branch 340 not taken.
✗ Branch 341 not taken.
✗ Branch 342 not taken.
✗ Branch 343 not taken.
✗ Branch 344 not taken.
✗ Branch 345 not taken.
✗ Branch 346 not taken.
✗ Branch 347 not taken.
✗ Branch 348 not taken.
✗ Branch 349 not taken.
✗ Branch 350 not taken.
✗ Branch 351 not taken.
✗ Branch 352 not taken.
✗ Branch 353 not taken.
✗ Branch 354 not taken.
✗ Branch 355 not taken.
✗ Branch 356 not taken.
✗ Branch 357 not taken.
✗ Branch 358 not taken.
✗ Branch 359 not taken.
✗ Branch 360 not taken.
✗ Branch 361 not taken.
✗ Branch 362 not taken.
✗ Branch 363 not taken.
✗ Branch 364 not taken.
✗ Branch 365 not taken.
✗ Branch 366 not taken.
✗ Branch 367 not taken.
✗ Branch 368 not taken.
✗ Branch 369 not taken.
✗ Branch 370 not taken.
✗ Branch 371 not taken.
✗ Branch 372 not taken.
✗ Branch 373 not taken.
✗ Branch 374 not taken.
✗ Branch 375 not taken.
✗ Branch 376 not taken.
✗ Branch 377 not taken.
✗ Branch 378 not taken.
✗ Branch 379 not taken.
✗ Branch 380 not taken.
✗ Branch 381 not taken.
✗ Branch 382 not taken.
✗ Branch 383 not taken.
✗ Branch 384 not taken.
✗ Branch 385 not taken.
✗ Branch 386 not taken.
✗ Branch 387 not taken.
✗ Branch 388 not taken.
✗ Branch 389 not taken.
✗ Branch 390 not taken.
✗ Branch 391 not taken.
✗ Branch 392 not taken.
✗ Branch 393 not taken.
✗ Branch 394 not taken.
✗ Branch 395 not taken.
✗ Branch 396 not taken.
✗ Branch 397 not taken.
✗ Branch 398 not taken.
✗ Branch 399 not taken.
✗ Branch 400 not taken.
✗ Branch 401 not taken.
✗ Branch 402 not taken.
✗ Branch 403 not taken.
✗ Branch 404 not taken.
✗ Branch 405 not taken.
✗ Branch 406 not taken.
✗ Branch 407 not taken.
✗ Branch 408 not taken.
✗ Branch 409 not taken.
✗ Branch 410 not taken.
✗ Branch 411 not taken.
✗ Branch 412 not taken.
✗ Branch 413 not taken.
✗ Branch 414 not taken.
✗ Branch 415 not taken.
✗ Branch 416 not taken.
✗ Branch 417 not taken.
✗ Branch 418 not taken.
✗ Branch 419 not taken.
✗ Branch 420 not taken.
✗ Branch 421 not taken.
✗ Branch 422 not taken.
✗ Branch 423 not taken.
✗ Branch 424 not taken.
✗ Branch 425 not taken.
✗ Branch 426 not taken.
✗ Branch 427 not taken.
✗ Branch 428 not taken.
✗ Branch 429 not taken.
✗ Branch 430 not taken.
✗ Branch 431 not taken.
✗ Branch 432 not taken.
✗ Branch 433 not taken.
✗ Branch 434 not taken.
✗ Branch 435 not taken.
✗ Branch 436 not taken.
✗ Branch 437 not taken.
✗ Branch 438 not taken.
✗ Branch 439 not taken.
✗ Branch 440 not taken.
✗ Branch 441 not taken.
✗ Branch 442 not taken.
✗ Branch 443 not taken.
✗ Branch 444 not taken.
✗ Branch 445 not taken.
✗ Branch 446 not taken.
✗ Branch 447 not taken.
✗ Branch 448 not taken.
✗ Branch 449 not taken.
✗ Branch 450 not taken.
✗ Branch 451 not taken.
✗ Branch 452 not taken.
✗ Branch 453 not taken.
✗ Branch 454 not taken.
✗ Branch 455 not taken.
✗ Branch 456 not taken.
✗ Branch 457 not taken.
✗ Branch 458 not taken.
✗ Branch 459 not taken.
✗ Branch 460 not taken.
✗ Branch 461 not taken.
✗ Branch 462 not taken.
✗ Branch 463 not taken.
✗ Branch 464 not taken.
✗ Branch 465 not taken.
✗ Branch 466 not taken.
✗ Branch 467 not taken.
✗ Branch 468 not taken.
✗ Branch 469 not taken.
✗ Branch 470 not taken.
✗ Branch 471 not taken.
✗ Branch 472 not taken.
✗ Branch 473 not taken.
✗ Branch 474 not taken.
✗ Branch 475 not taken.
✗ Branch 476 not taken.
✗ Branch 477 not taken.
✗ Branch 478 not taken.
✗ Branch 479 not taken.
|
33 | return !(x > tolerance) && !(x < -tolerance); |
| 361 | } | ||
| 362 | |||
| 363 | |||
| 364 | /// Return @c true if @a x is less than zero. | ||
| 365 | template<typename Type> | ||
| 366 | inline bool | ||
| 367 |
4/25✗ Branch 0 not taken.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 18 times.
✓ Branch 6 taken 163 times.
✓ Branch 7 taken 704 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 18 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
|
903 | isNegative(const Type& x) { return x < zeroVal<Type>(); } |
| 368 | |||
| 369 | // Return false, since bool values are never less than zero. | ||
| 370 | template<> inline bool isNegative<bool>(const bool&) { return false; } | ||
| 371 | |||
| 372 | |||
| 373 | /// Return @c true if @a x is finite. | ||
| 374 | inline bool | ||
| 375 | isFinite(const float x) { return std::isfinite(x); } | ||
| 376 | |||
| 377 | /// Return @c true if @a x is finite. | ||
| 378 | template<typename Type, typename std::enable_if<std::is_arithmetic<Type>::value, int>::type = 0> | ||
| 379 | inline bool | ||
| 380 | ✗ | isFinite(const Type& x) { return std::isfinite(static_cast<double>(x)); } | |
| 381 | |||
| 382 | |||
| 383 | /// Return @c true if @a x is an infinity value (either positive infinity or negative infinity). | ||
| 384 | inline bool | ||
| 385 | isInfinite(const float x) { return std::isinf(x); } | ||
| 386 | |||
| 387 | /// Return @c true if @a x is an infinity value (either positive infinity or negative infinity). | ||
| 388 | template<typename Type, typename std::enable_if<std::is_arithmetic<Type>::value, int>::type = 0> | ||
| 389 | inline bool | ||
| 390 | isInfinite(const Type& x) { return std::isinf(static_cast<double>(x)); } | ||
| 391 | |||
| 392 | |||
| 393 | /// Return @c true if @a x is a NaN (Not-A-Number) value. | ||
| 394 | inline bool | ||
| 395 | isNan(const float x) { return std::isnan(x); } | ||
| 396 | |||
| 397 | /// Return @c true if @a x is a NaN (Not-A-Number) value. | ||
| 398 | template<typename Type, typename std::enable_if<std::is_arithmetic<Type>::value, int>::type = 0> | ||
| 399 | inline bool | ||
| 400 | isNan(const Type& x) { return std::isnan(static_cast<double>(x)); } | ||
| 401 | |||
| 402 | |||
| 403 | /// Return @c true if @a a is equal to @a b to within the given tolerance. | ||
| 404 | template<typename Type> | ||
| 405 | inline bool | ||
| 406 |
0/2✗ Branch 0 not taken.
✗ Branch 1 not taken.
|
377268 | isApproxEqual(const Type& a, const Type& b, const Type& tolerance) |
| 407 | { | ||
| 408 |
180/386✓ Branch 0 taken 262848 times.
✓ Branch 1 taken 4151 times.
✓ Branch 2 taken 1612 times.
✓ Branch 3 taken 1 times.
✓ Branch 4 taken 21076 times.
✓ Branch 5 taken 5901 times.
✓ Branch 6 taken 20961 times.
✓ Branch 7 taken 116 times.
✓ Branch 8 taken 21021 times.
✓ Branch 9 taken 6 times.
✓ Branch 10 taken 53306 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 52602 times.
✓ Branch 13 taken 104281 times.
✓ Branch 14 taken 5456079 times.
✓ Branch 15 taken 1059053 times.
✓ Branch 16 taken 1111492 times.
✓ Branch 17 taken 104285 times.
✓ Branch 18 taken 12354 times.
✓ Branch 19 taken 24576 times.
✓ Branch 20 taken 82 times.
✓ Branch 21 taken 24576 times.
✓ Branch 22 taken 589827 times.
✓ Branch 23 taken 263936 times.
✓ Branch 24 taken 153563 times.
✓ Branch 25 taken 163851 times.
✓ Branch 26 taken 55250 times.
✓ Branch 27 taken 10 times.
✓ Branch 28 taken 55244 times.
✓ Branch 29 taken 1 times.
✓ Branch 30 taken 1427 times.
✓ Branch 31 taken 20 times.
✓ Branch 32 taken 21 times.
✓ Branch 33 taken 3427 times.
✓ Branch 34 taken 6154 times.
✓ Branch 35 taken 3 times.
✓ Branch 36 taken 20 times.
✓ Branch 37 taken 5 times.
✓ Branch 38 taken 23 times.
✓ Branch 39 taken 4 times.
✓ Branch 40 taken 20 times.
✓ Branch 41 taken 1130889 times.
✓ Branch 42 taken 48420 times.
✓ Branch 43 taken 3371979 times.
✓ Branch 44 taken 48420 times.
✓ Branch 45 taken 3323594 times.
✓ Branch 46 taken 39 times.
✓ Branch 47 taken 1033993 times.
✓ Branch 48 taken 191305 times.
✓ Branch 49 taken 1033996 times.
✓ Branch 50 taken 19 times.
✓ Branch 51 taken 1130886 times.
✓ Branch 52 taken 4374 times.
✓ Branch 53 taken 2909260 times.
✓ Branch 54 taken 110 times.
✓ Branch 55 taken 1004276 times.
✓ Branch 56 taken 35 times.
✓ Branch 57 taken 1000075 times.
✓ Branch 58 taken 1913555 times.
✓ Branch 59 taken 1000000 times.
✓ Branch 60 taken 1959482 times.
✓ Branch 61 taken 10732 times.
✓ Branch 62 taken 10748 times.
✓ Branch 63 taken 1913540 times.
✓ Branch 64 taken 5408 times.
✓ Branch 65 taken 214 times.
✓ Branch 66 taken 47 times.
✓ Branch 67 taken 1 times.
✓ Branch 68 taken 32783 times.
✓ Branch 69 taken 52 times.
✓ Branch 70 taken 21 times.
✓ Branch 71 taken 17 times.
✓ Branch 72 taken 1363 times.
✓ Branch 73 taken 72 times.
✓ Branch 74 taken 16 times.
✓ Branch 75 taken 19 times.
✓ Branch 76 taken 24 times.
✓ Branch 77 taken 11 times.
✓ Branch 78 taken 1474122 times.
✓ Branch 79 taken 912385 times.
✓ Branch 80 taken 765638 times.
✓ Branch 81 taken 716677 times.
✓ Branch 82 taken 523606 times.
✓ Branch 83 taken 242037 times.
✓ Branch 84 taken 509779 times.
✓ Branch 85 taken 13849 times.
✓ Branch 86 taken 416469 times.
✓ Branch 87 taken 158866 times.
✓ Branch 88 taken 326626 times.
✓ Branch 89 taken 89865 times.
✓ Branch 90 taken 326625 times.
✓ Branch 91 taken 2 times.
✓ Branch 92 taken 327448 times.
✓ Branch 93 taken 8 times.
✓ Branch 94 taken 36 times.
✓ Branch 95 taken 327401 times.
✓ Branch 96 taken 166 times.
✓ Branch 97 taken 8209 times.
✓ Branch 98 taken 162 times.
✓ Branch 99 taken 65557 times.
✓ Branch 100 taken 19881 times.
✓ Branch 101 taken 2049 times.
✓ Branch 102 taken 26 times.
✓ Branch 103 taken 1912 times.
✓ Branch 104 taken 19 times.
✓ Branch 105 taken 4100 times.
✓ Branch 106 taken 19 times.
✓ Branch 107 taken 32769 times.
✓ Branch 108 taken 16 times.
✓ Branch 109 taken 1 times.
✓ Branch 110 taken 65 times.
✓ Branch 111 taken 1 times.
✓ Branch 112 taken 16 times.
✓ Branch 113 taken 49 times.
✗ Branch 114 not taken.
✓ Branch 115 taken 1 times.
✗ Branch 116 not taken.
✗ Branch 117 not taken.
✗ Branch 118 not taken.
✗ Branch 119 not taken.
✗ Branch 120 not taken.
✗ Branch 121 not taken.
✓ Branch 122 taken 49 times.
✗ Branch 123 not taken.
✓ Branch 124 taken 3330845 times.
✓ Branch 125 taken 50 times.
✓ Branch 126 taken 3326941 times.
✓ Branch 127 taken 3904 times.
✓ Branch 128 taken 3326941 times.
✗ Branch 129 not taken.
✗ Branch 130 not taken.
✗ Branch 131 not taken.
✓ Branch 132 taken 5 times.
✓ Branch 133 taken 294833 times.
✓ Branch 134 taken 224977 times.
✓ Branch 135 taken 652140 times.
✓ Branch 136 taken 5 times.
✓ Branch 137 taken 294881 times.
✓ Branch 138 taken 4 times.
✓ Branch 139 taken 294832 times.
✓ Branch 140 taken 210501 times.
✓ Branch 141 taken 737302 times.
✓ Branch 142 taken 4 times.
✓ Branch 143 taken 331665 times.
✗ Branch 144 not taken.
✗ Branch 145 not taken.
✗ Branch 146 not taken.
✗ Branch 147 not taken.
✗ Branch 148 not taken.
✗ Branch 149 not taken.
✗ Branch 150 not taken.
✗ Branch 151 not taken.
✓ Branch 152 taken 2 times.
✓ Branch 153 taken 1021 times.
✓ Branch 154 taken 2 times.
✗ Branch 155 not taken.
✓ Branch 156 taken 2 times.
✓ Branch 157 taken 289 times.
✗ Branch 158 not taken.
✗ Branch 159 not taken.
✓ Branch 160 taken 1 times.
✓ Branch 161 taken 1023 times.
✗ Branch 162 not taken.
✗ Branch 163 not taken.
✓ Branch 164 taken 1 times.
✓ Branch 165 taken 510 times.
✗ Branch 166 not taken.
✗ Branch 167 not taken.
✗ Branch 168 not taken.
✗ Branch 169 not taken.
✗ Branch 170 not taken.
✓ Branch 171 taken 99 times.
✗ Branch 172 not taken.
✗ Branch 173 not taken.
✗ Branch 174 not taken.
✗ Branch 175 not taken.
✓ Branch 176 taken 360374 times.
✗ Branch 177 not taken.
✗ Branch 178 not taken.
✗ Branch 179 not taken.
✗ Branch 180 not taken.
✗ Branch 181 not taken.
✗ Branch 182 not taken.
✗ Branch 183 not taken.
✗ Branch 184 not taken.
✓ Branch 185 taken 273 times.
✗ Branch 186 not taken.
✗ Branch 187 not taken.
✓ Branch 188 taken 1 times.
✓ Branch 189 taken 1 times.
✗ Branch 190 not taken.
✓ Branch 191 taken 398 times.
✓ Branch 192 taken 36855 times.
✗ Branch 193 not taken.
✓ Branch 194 taken 36855 times.
✗ Branch 195 not taken.
✓ Branch 196 taken 36855 times.
✗ Branch 197 not taken.
✗ Branch 198 not taken.
✓ Branch 199 taken 36855 times.
✓ Branch 200 taken 36855 times.
✗ Branch 201 not taken.
✓ Branch 202 taken 36855 times.
✗ Branch 203 not taken.
✓ Branch 204 taken 36855 times.
✗ Branch 205 not taken.
✗ Branch 206 not taken.
✓ Branch 207 taken 36855 times.
✓ Branch 208 taken 36855 times.
✗ Branch 209 not taken.
✓ Branch 210 taken 36855 times.
✗ Branch 211 not taken.
✓ Branch 212 taken 36855 times.
✗ Branch 213 not taken.
✗ Branch 214 not taken.
✓ Branch 215 taken 36855 times.
✓ Branch 216 taken 36856 times.
✓ Branch 217 taken 1 times.
✓ Branch 218 taken 36855 times.
✗ Branch 219 not taken.
✓ Branch 220 taken 36855 times.
✗ Branch 221 not taken.
✓ Branch 222 taken 1225719 times.
✗ Branch 223 not taken.
✓ Branch 224 taken 5345271 times.
✗ Branch 225 not taken.
✓ Branch 226 taken 36855 times.
✗ Branch 227 not taken.
✓ Branch 228 taken 36855 times.
✗ Branch 229 not taken.
✓ Branch 230 taken 36855 times.
✗ Branch 231 not taken.
✓ Branch 232 taken 36855 times.
✗ Branch 233 not taken.
✓ Branch 234 taken 49140 times.
✗ Branch 235 not taken.
✓ Branch 236 taken 49140 times.
✗ Branch 237 not taken.
✓ Branch 238 taken 49140 times.
✗ Branch 239 not taken.
✓ Branch 240 taken 49140 times.
✗ Branch 241 not taken.
✓ Branch 242 taken 49140 times.
✗ Branch 243 not taken.
✓ Branch 244 taken 49140 times.
✗ Branch 245 not taken.
✓ Branch 246 taken 32760 times.
✗ Branch 247 not taken.
✓ Branch 248 taken 65520 times.
✗ Branch 249 not taken.
✓ Branch 250 taken 65520 times.
✗ Branch 251 not taken.
✓ Branch 252 taken 130081770 times.
✗ Branch 253 not taken.
✓ Branch 254 taken 114660 times.
✗ Branch 255 not taken.
✗ Branch 256 not taken.
✗ Branch 257 not taken.
✗ Branch 258 not taken.
✗ Branch 259 not taken.
✗ Branch 260 not taken.
✗ Branch 261 not taken.
✗ Branch 262 not taken.
✗ Branch 263 not taken.
✗ Branch 264 not taken.
✗ Branch 265 not taken.
✗ Branch 266 not taken.
✗ Branch 267 not taken.
✗ Branch 268 not taken.
✗ Branch 269 not taken.
✗ Branch 270 not taken.
✗ Branch 271 not taken.
✗ Branch 272 not taken.
✗ Branch 273 not taken.
✗ Branch 274 not taken.
✗ Branch 275 not taken.
✗ Branch 276 not taken.
✗ Branch 277 not taken.
✗ Branch 278 not taken.
✗ Branch 279 not taken.
✗ Branch 280 not taken.
✗ Branch 281 not taken.
✗ Branch 282 not taken.
✗ Branch 283 not taken.
✗ Branch 284 not taken.
✗ Branch 285 not taken.
✗ Branch 286 not taken.
✗ Branch 287 not taken.
✗ Branch 288 not taken.
✗ Branch 289 not taken.
✗ Branch 290 not taken.
✗ Branch 291 not taken.
✗ Branch 292 not taken.
✗ Branch 293 not taken.
✗ Branch 294 not taken.
✗ Branch 295 not taken.
✗ Branch 296 not taken.
✗ Branch 297 not taken.
✗ Branch 298 not taken.
✗ Branch 299 not taken.
✗ Branch 300 not taken.
✗ Branch 301 not taken.
✗ Branch 302 not taken.
✗ Branch 303 not taken.
✗ Branch 304 not taken.
✗ Branch 305 not taken.
✗ Branch 306 not taken.
✗ Branch 307 not taken.
✗ Branch 308 not taken.
✗ Branch 309 not taken.
✗ Branch 310 not taken.
✗ Branch 311 not taken.
✗ Branch 312 not taken.
✗ Branch 313 not taken.
✗ Branch 314 not taken.
✗ Branch 315 not taken.
✗ Branch 316 not taken.
✗ Branch 317 not taken.
✗ Branch 318 not taken.
✗ Branch 319 not taken.
✗ Branch 320 not taken.
✗ Branch 321 not taken.
✗ Branch 322 not taken.
✗ Branch 323 not taken.
✗ Branch 324 not taken.
✗ Branch 325 not taken.
✗ Branch 326 not taken.
✗ Branch 327 not taken.
✗ Branch 328 not taken.
✗ Branch 329 not taken.
✗ Branch 330 not taken.
✗ Branch 331 not taken.
✗ Branch 332 not taken.
✗ Branch 333 not taken.
✗ Branch 334 not taken.
✗ Branch 335 not taken.
✗ Branch 336 not taken.
✗ Branch 337 not taken.
✗ Branch 338 not taken.
✗ Branch 339 not taken.
✗ Branch 340 not taken.
✗ Branch 341 not taken.
✗ Branch 342 not taken.
✗ Branch 343 not taken.
✗ Branch 344 not taken.
✗ Branch 345 not taken.
✗ Branch 346 not taken.
✗ Branch 347 not taken.
✗ Branch 348 not taken.
✗ Branch 349 not taken.
✗ Branch 350 not taken.
✗ Branch 351 not taken.
✗ Branch 352 not taken.
✗ Branch 353 not taken.
✗ Branch 354 not taken.
✗ Branch 355 not taken.
✗ Branch 356 not taken.
✗ Branch 357 not taken.
✗ Branch 358 not taken.
✗ Branch 359 not taken.
✗ Branch 360 not taken.
✗ Branch 361 not taken.
✗ Branch 362 not taken.
✗ Branch 363 not taken.
✗ Branch 364 not taken.
✗ Branch 365 not taken.
✗ Branch 366 not taken.
✗ Branch 367 not taken.
✗ Branch 368 not taken.
✗ Branch 369 not taken.
✗ Branch 370 not taken.
✗ Branch 371 not taken.
✗ Branch 372 not taken.
✗ Branch 373 not taken.
✗ Branch 374 not taken.
✗ Branch 375 not taken.
✗ Branch 376 not taken.
✗ Branch 377 not taken.
✗ Branch 378 not taken.
✗ Branch 379 not taken.
✗ Branch 380 not taken.
✗ Branch 381 not taken.
✗ Branch 383 not taken.
✗ Branch 384 not taken.
✗ Branch 385 not taken.
✗ Branch 386 not taken.
|
171978330 | return !cwiseGreaterThan(Abs(a - b), tolerance); |
| 409 | } | ||
| 410 | |||
| 411 | /// @brief Return @c true if @a a is equal to @a b to within | ||
| 412 | /// the default floating-point comparison tolerance. | ||
| 413 | template<typename Type> | ||
| 414 | inline bool | ||
| 415 | ✗ | isApproxEqual(const Type& a, const Type& b) | |
| 416 | { | ||
| 417 | ✗ | const Type tolerance = Type(zeroVal<Type>() + Tolerance<Type>::value()); | |
| 418 | ✗ | return isApproxEqual(a, b, tolerance); | |
| 419 | } | ||
| 420 | |||
| 421 | #define OPENVDB_EXACT_IS_APPROX_EQUAL(T) \ | ||
| 422 | template<> inline bool isApproxEqual<T>(const T& a, const T& b) { return a == b; } \ | ||
| 423 | template<> inline bool isApproxEqual<T>(const T& a, const T& b, const T&) { return a == b; } \ | ||
| 424 | /**/ | ||
| 425 | |||
| 426 |
8/48✗ Branch 0 not taken.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 49140 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 449 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 294836 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 9 times.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
✓ Branch 32 taken 262080 times.
✗ Branch 33 not taken.
✗ Branch 34 not taken.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✓ Branch 44 taken 2097088 times.
✗ Branch 45 not taken.
✓ Branch 46 taken 210 times.
✗ Branch 47 not taken.
|
2703814 | OPENVDB_EXACT_IS_APPROX_EQUAL(bool) |
| 427 |
2/12✗ Branch 0 not taken.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 45 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 45045 times.
✗ Branch 11 not taken.
|
45090 | OPENVDB_EXACT_IS_APPROX_EQUAL(std::string) |
| 428 | |||
| 429 | |||
| 430 | /// @brief Return @c true if @a a is larger than @a b to within | ||
| 431 | /// the given tolerance, i.e., if @a b - @a a < @a tolerance. | ||
| 432 | template<typename Type> | ||
| 433 | inline bool | ||
| 434 | isApproxLarger(const Type& a, const Type& b, const Type& tolerance) | ||
| 435 | { | ||
| 436 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 617583 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 8 times.
|
617591 | return (b - a < tolerance); |
| 437 | } | ||
| 438 | |||
| 439 | |||
| 440 | /// @brief Return @c true if @a a is exactly equal to @a b. | ||
| 441 | template<typename T0, typename T1> | ||
| 442 | inline bool | ||
| 443 | isExactlyEqual(const T0& a, const T1& b) | ||
| 444 | { | ||
| 445 | OPENVDB_NO_FP_EQUALITY_WARNING_BEGIN | ||
| 446 |
249/1266✓ Branch 0 taken 188779072 times.
✓ Branch 1 taken 6704638 times.
✓ Branch 2 taken 301593060 times.
✓ Branch 3 taken 324080 times.
✓ Branch 4 taken 335131526 times.
✓ Branch 5 taken 49381 times.
✓ Branch 6 taken 335129705 times.
✓ Branch 7 taken 39179 times.
✓ Branch 8 taken 2130 times.
✓ Branch 9 taken 5 times.
✓ Branch 10 taken 2118 times.
✓ Branch 11 taken 2190 times.
✓ Branch 12 taken 275516 times.
✓ Branch 13 taken 6936771 times.
✓ Branch 14 taken 3 times.
✓ Branch 15 taken 273223 times.
✓ Branch 16 taken 4146 times.
✓ Branch 17 taken 13391 times.
✓ Branch 18 taken 2184 times.
✓ Branch 19 taken 2149 times.
✓ Branch 20 taken 3497 times.
✓ Branch 21 taken 1 times.
✓ Branch 22 taken 25999 times.
✓ Branch 23 taken 2145 times.
✓ Branch 24 taken 368579 times.
✓ Branch 25 taken 266035 times.
✓ Branch 26 taken 17437 times.
✓ Branch 27 taken 545137 times.
✓ Branch 28 taken 10 times.
✓ Branch 29 taken 17357 times.
✓ Branch 30 taken 5 times.
✓ Branch 31 taken 57 times.
✓ Branch 32 taken 4 times.
✓ Branch 33 taken 85 times.
✓ Branch 34 taken 3 times.
✓ Branch 35 taken 961 times.
✓ Branch 36 taken 3159 times.
✓ Branch 37 taken 480599 times.
✓ Branch 38 taken 10738 times.
✓ Branch 39 taken 3619 times.
✗ Branch 40 not taken.
✓ Branch 41 taken 116026 times.
✓ Branch 42 taken 6 times.
✓ Branch 43 taken 36 times.
✓ Branch 44 taken 6 times.
✓ Branch 45 taken 28 times.
✓ Branch 46 taken 6 times.
✓ Branch 47 taken 36 times.
✗ Branch 48 not taken.
✓ Branch 49 taken 1 times.
✗ Branch 50 not taken.
✓ Branch 51 taken 1 times.
✗ Branch 52 not taken.
✓ Branch 53 taken 81768 times.
✗ Branch 54 not taken.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✓ Branch 57 taken 20 times.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✗ Branch 63 not taken.
✓ Branch 64 taken 335909 times.
✓ Branch 65 taken 24539 times.
✗ Branch 66 not taken.
✓ Branch 67 taken 4718304 times.
✓ Branch 68 taken 144 times.
✗ Branch 69 not taken.
✓ Branch 70 taken 29 times.
✓ Branch 71 taken 4374328 times.
✓ Branch 72 taken 5 times.
✗ Branch 73 not taken.
✓ Branch 74 taken 48 times.
✓ Branch 75 taken 14983830 times.
✓ Branch 76 taken 691 times.
✓ Branch 77 taken 70513990 times.
✓ Branch 78 taken 10 times.
✗ Branch 79 not taken.
✗ Branch 80 not taken.
✓ Branch 81 taken 851914 times.
✓ Branch 82 taken 10 times.
✗ Branch 83 not taken.
✓ Branch 84 taken 1698 times.
✓ Branch 85 taken 2105811 times.
✗ Branch 86 not taken.
✗ Branch 87 not taken.
✗ Branch 88 not taken.
✗ Branch 89 not taken.
✗ Branch 90 not taken.
✓ Branch 91 taken 3 times.
✗ Branch 92 not taken.
✗ Branch 93 not taken.
✗ Branch 94 not taken.
✓ Branch 95 taken 655320 times.
✗ Branch 96 not taken.
✗ Branch 97 not taken.
✗ Branch 98 not taken.
✓ Branch 99 taken 20 times.
✗ Branch 100 not taken.
✗ Branch 101 not taken.
✓ Branch 102 taken 9 times.
✗ Branch 103 not taken.
✗ Branch 104 not taken.
✗ Branch 105 not taken.
✗ Branch 106 not taken.
✗ Branch 107 not taken.
✗ Branch 108 not taken.
✗ Branch 109 not taken.
✗ Branch 110 not taken.
✗ Branch 111 not taken.
✓ Branch 112 taken 380 times.
✗ Branch 113 not taken.
✓ Branch 114 taken 380 times.
✗ Branch 115 not taken.
✓ Branch 116 taken 380 times.
✗ Branch 117 not taken.
✗ Branch 118 not taken.
✓ Branch 119 taken 380 times.
✗ Branch 120 not taken.
✗ Branch 121 not taken.
✓ Branch 122 taken 64 times.
✗ Branch 123 not taken.
✗ Branch 124 not taken.
✗ Branch 125 not taken.
✗ Branch 126 not taken.
✗ Branch 127 not taken.
✗ Branch 128 not taken.
✗ Branch 129 not taken.
✗ Branch 130 not taken.
✗ Branch 131 not taken.
✗ Branch 132 not taken.
✗ Branch 133 not taken.
✗ Branch 134 not taken.
✗ Branch 135 not taken.
✗ Branch 136 not taken.
✗ Branch 137 not taken.
✗ Branch 138 not taken.
✗ Branch 139 not taken.
✗ Branch 140 not taken.
✗ Branch 141 not taken.
✗ Branch 142 not taken.
✗ Branch 143 not taken.
✗ Branch 144 not taken.
✗ Branch 145 not taken.
✗ Branch 146 not taken.
✗ Branch 147 not taken.
✗ Branch 148 not taken.
✗ Branch 149 not taken.
✗ Branch 150 not taken.
✗ Branch 151 not taken.
✗ Branch 152 not taken.
✗ Branch 153 not taken.
✓ Branch 154 taken 2 times.
✗ Branch 155 not taken.
✓ Branch 156 taken 2 times.
✗ Branch 157 not taken.
✓ Branch 158 taken 1 times.
✓ Branch 159 taken 246 times.
✗ Branch 160 not taken.
✓ Branch 161 taken 7 times.
✗ Branch 162 not taken.
✗ Branch 163 not taken.
✗ Branch 164 not taken.
✗ Branch 165 not taken.
✓ Branch 166 taken 1 times.
✗ Branch 167 not taken.
✓ Branch 168 taken 1 times.
✓ Branch 169 taken 7 times.
✓ Branch 170 taken 1 times.
✓ Branch 171 taken 4393 times.
✗ Branch 172 not taken.
✗ Branch 173 not taken.
✓ Branch 174 taken 1 times.
✓ Branch 175 taken 19 times.
✗ Branch 176 not taken.
✓ Branch 177 taken 1622 times.
✗ Branch 178 not taken.
✓ Branch 179 taken 1622 times.
✗ Branch 180 not taken.
✓ Branch 181 taken 1622 times.
✗ Branch 182 not taken.
✗ Branch 183 not taken.
✗ Branch 184 not taken.
✗ Branch 185 not taken.
✗ Branch 186 not taken.
✗ Branch 187 not taken.
✗ Branch 188 not taken.
✗ Branch 189 not taken.
✗ Branch 190 not taken.
✗ Branch 191 not taken.
✗ Branch 192 not taken.
✗ Branch 193 not taken.
✗ Branch 194 not taken.
✗ Branch 195 not taken.
✗ Branch 196 not taken.
✓ Branch 197 taken 2 times.
✗ Branch 198 not taken.
✓ Branch 199 taken 2 times.
✓ Branch 200 taken 11 times.
✓ Branch 201 taken 14 times.
✗ Branch 202 not taken.
✗ Branch 203 not taken.
✗ Branch 204 not taken.
✗ Branch 205 not taken.
✗ Branch 206 not taken.
✓ Branch 207 taken 1 times.
✗ Branch 208 not taken.
✗ Branch 209 not taken.
✗ Branch 210 not taken.
✗ Branch 211 not taken.
✗ Branch 212 not taken.
✓ Branch 213 taken 42 times.
✗ Branch 214 not taken.
✓ Branch 215 taken 34 times.
✗ Branch 216 not taken.
✓ Branch 217 taken 1 times.
✗ Branch 218 not taken.
✗ Branch 219 not taken.
✓ Branch 220 taken 8 times.
✓ Branch 221 taken 631362 times.
✗ Branch 222 not taken.
✗ Branch 223 not taken.
✓ Branch 224 taken 8 times.
✓ Branch 225 taken 4876209 times.
✓ Branch 226 taken 40 times.
✓ Branch 227 taken 21139204 times.
✓ Branch 228 taken 11 times.
✓ Branch 229 taken 631359 times.
✗ Branch 230 not taken.
✓ Branch 231 taken 3 times.
✓ Branch 232 taken 13 times.
✓ Branch 233 taken 4876211 times.
✓ Branch 234 taken 40 times.
✓ Branch 235 taken 21139204 times.
✓ Branch 236 taken 8 times.
✓ Branch 237 taken 631360 times.
✗ Branch 238 not taken.
✓ Branch 239 taken 8 times.
✓ Branch 240 taken 8 times.
✓ Branch 241 taken 4876209 times.
✓ Branch 242 taken 40 times.
✓ Branch 243 taken 21139204 times.
✓ Branch 244 taken 1 times.
✗ Branch 245 not taken.
✗ Branch 246 not taken.
✗ Branch 247 not taken.
✓ Branch 248 taken 3 times.
✗ Branch 249 not taken.
✗ Branch 250 not taken.
✗ Branch 251 not taken.
✗ Branch 252 not taken.
✓ Branch 253 taken 734110 times.
✗ Branch 254 not taken.
✗ Branch 255 not taken.
✗ Branch 256 not taken.
✓ Branch 257 taken 5695151 times.
✗ Branch 258 not taken.
✓ Branch 259 taken 19025994 times.
✗ Branch 260 not taken.
✗ Branch 261 not taken.
✓ Branch 262 taken 15 times.
✓ Branch 263 taken 1 times.
✓ Branch 264 taken 15 times.
✓ Branch 265 taken 8 times.
✗ Branch 266 not taken.
✓ Branch 267 taken 2 times.
✗ Branch 268 not taken.
✗ Branch 269 not taken.
✗ Branch 270 not taken.
✗ Branch 271 not taken.
✗ Branch 272 not taken.
✗ Branch 273 not taken.
✗ Branch 274 not taken.
✗ Branch 275 not taken.
✗ Branch 276 not taken.
✗ Branch 277 not taken.
✗ Branch 278 not taken.
✗ Branch 279 not taken.
✓ Branch 280 taken 4 times.
✗ Branch 281 not taken.
✗ Branch 282 not taken.
✗ Branch 283 not taken.
✗ Branch 284 not taken.
✗ Branch 285 not taken.
✗ Branch 286 not taken.
✗ Branch 287 not taken.
✗ Branch 288 not taken.
✗ Branch 289 not taken.
✗ Branch 290 not taken.
✓ Branch 291 taken 8 times.
✗ Branch 292 not taken.
✓ Branch 293 taken 8 times.
✗ Branch 294 not taken.
✓ Branch 295 taken 8 times.
✗ Branch 296 not taken.
✓ Branch 297 taken 8 times.
✗ Branch 298 not taken.
✓ Branch 299 taken 8 times.
✗ Branch 300 not taken.
✓ Branch 301 taken 8 times.
✗ Branch 302 not taken.
✓ Branch 303 taken 8 times.
✗ Branch 304 not taken.
✓ Branch 305 taken 8 times.
✗ Branch 306 not taken.
✓ Branch 307 taken 8 times.
✗ Branch 308 not taken.
✓ Branch 309 taken 8 times.
✗ Branch 310 not taken.
✓ Branch 311 taken 8 times.
✗ Branch 312 not taken.
✓ Branch 313 taken 8 times.
✗ Branch 314 not taken.
✓ Branch 315 taken 8 times.
✗ Branch 316 not taken.
✓ Branch 317 taken 8 times.
✗ Branch 318 not taken.
✓ Branch 319 taken 8 times.
✗ Branch 320 not taken.
✓ Branch 321 taken 8 times.
✗ Branch 322 not taken.
✓ Branch 323 taken 8 times.
✗ Branch 324 not taken.
✓ Branch 325 taken 8 times.
✗ Branch 326 not taken.
✓ Branch 327 taken 8 times.
✗ Branch 328 not taken.
✓ Branch 329 taken 8 times.
✗ Branch 330 not taken.
✓ Branch 331 taken 8 times.
✗ Branch 332 not taken.
✗ Branch 333 not taken.
✗ Branch 334 not taken.
✗ Branch 335 not taken.
✗ Branch 336 not taken.
✗ Branch 337 not taken.
✗ Branch 338 not taken.
✗ Branch 339 not taken.
✗ Branch 340 not taken.
✗ Branch 341 not taken.
✗ Branch 342 not taken.
✗ Branch 343 not taken.
✗ Branch 344 not taken.
✗ Branch 345 not taken.
✗ Branch 346 not taken.
✗ Branch 347 not taken.
✗ Branch 348 not taken.
✗ Branch 349 not taken.
✗ Branch 350 not taken.
✗ Branch 351 not taken.
✗ Branch 352 not taken.
✗ Branch 353 not taken.
✗ Branch 354 not taken.
✗ Branch 355 not taken.
✗ Branch 356 not taken.
✗ Branch 357 not taken.
✗ Branch 358 not taken.
✗ Branch 359 not taken.
✗ Branch 360 not taken.
✗ Branch 361 not taken.
✗ Branch 362 not taken.
✗ Branch 363 not taken.
✗ Branch 364 not taken.
✗ Branch 365 not taken.
✗ Branch 366 not taken.
✗ Branch 367 not taken.
✗ Branch 368 not taken.
✗ Branch 369 not taken.
✗ Branch 370 not taken.
✗ Branch 371 not taken.
✗ Branch 372 not taken.
✗ Branch 373 not taken.
✗ Branch 374 not taken.
✗ Branch 375 not taken.
✗ Branch 376 not taken.
✗ Branch 377 not taken.
✗ Branch 378 not taken.
✗ Branch 379 not taken.
✗ Branch 380 not taken.
✗ Branch 381 not taken.
✗ Branch 382 not taken.
✗ Branch 383 not taken.
✗ Branch 384 not taken.
✗ Branch 385 not taken.
✗ Branch 386 not taken.
✗ Branch 387 not taken.
✗ Branch 388 not taken.
✗ Branch 389 not taken.
✗ Branch 390 not taken.
✗ Branch 391 not taken.
✗ Branch 392 not taken.
✗ Branch 393 not taken.
✗ Branch 394 not taken.
✗ Branch 395 not taken.
✗ Branch 396 not taken.
✗ Branch 397 not taken.
✗ Branch 398 not taken.
✓ Branch 399 taken 1 times.
✗ Branch 400 not taken.
✗ Branch 401 not taken.
✗ Branch 402 not taken.
✗ Branch 403 not taken.
✓ Branch 404 taken 9 times.
✗ Branch 405 not taken.
✗ Branch 406 not taken.
✗ Branch 407 not taken.
✗ Branch 408 not taken.
✗ Branch 409 not taken.
✗ Branch 410 not taken.
✗ Branch 411 not taken.
✗ Branch 412 not taken.
✗ Branch 413 not taken.
✗ Branch 414 not taken.
✗ Branch 415 not taken.
✗ Branch 416 not taken.
✗ Branch 417 not taken.
✗ Branch 418 not taken.
✗ Branch 419 not taken.
✗ Branch 420 not taken.
✗ Branch 421 not taken.
✗ Branch 422 not taken.
✗ Branch 423 not taken.
✗ Branch 424 not taken.
✗ Branch 425 not taken.
✗ Branch 426 not taken.
✗ Branch 427 not taken.
✗ Branch 428 not taken.
✗ Branch 429 not taken.
✗ Branch 430 not taken.
✗ Branch 431 not taken.
✗ Branch 432 not taken.
✗ Branch 433 not taken.
✗ Branch 434 not taken.
✗ Branch 435 not taken.
✗ Branch 436 not taken.
✗ Branch 437 not taken.
✗ Branch 438 not taken.
✗ Branch 439 not taken.
✗ Branch 440 not taken.
✗ Branch 441 not taken.
✗ Branch 442 not taken.
✗ Branch 443 not taken.
✗ Branch 444 not taken.
✗ Branch 445 not taken.
✗ Branch 446 not taken.
✗ Branch 447 not taken.
✗ Branch 448 not taken.
✗ Branch 449 not taken.
✗ Branch 450 not taken.
✗ Branch 451 not taken.
✗ Branch 452 not taken.
✗ Branch 453 not taken.
✗ Branch 454 not taken.
✗ Branch 455 not taken.
✗ Branch 456 not taken.
✗ Branch 457 not taken.
✗ Branch 458 not taken.
✗ Branch 459 not taken.
✗ Branch 460 not taken.
✗ Branch 461 not taken.
✗ Branch 462 not taken.
✗ Branch 463 not taken.
✗ Branch 464 not taken.
✗ Branch 465 not taken.
✗ Branch 466 not taken.
✗ Branch 467 not taken.
✗ Branch 468 not taken.
✗ Branch 469 not taken.
✗ Branch 470 not taken.
✗ Branch 471 not taken.
✗ Branch 472 not taken.
✗ Branch 473 not taken.
✗ Branch 474 not taken.
✗ Branch 475 not taken.
✗ Branch 476 not taken.
✗ Branch 477 not taken.
✗ Branch 478 not taken.
✗ Branch 479 not taken.
✗ Branch 480 not taken.
✗ Branch 481 not taken.
✗ Branch 482 not taken.
✗ Branch 483 not taken.
✗ Branch 484 not taken.
✗ Branch 485 not taken.
✗ Branch 486 not taken.
✗ Branch 487 not taken.
✗ Branch 488 not taken.
✗ Branch 489 not taken.
✗ Branch 490 not taken.
✗ Branch 491 not taken.
✗ Branch 492 not taken.
✗ Branch 493 not taken.
✗ Branch 494 not taken.
✗ Branch 495 not taken.
✗ Branch 496 not taken.
✗ Branch 497 not taken.
✗ Branch 498 not taken.
✗ Branch 499 not taken.
✗ Branch 500 not taken.
✗ Branch 501 not taken.
✗ Branch 502 not taken.
✗ Branch 503 not taken.
✗ Branch 504 not taken.
✗ Branch 505 not taken.
✗ Branch 506 not taken.
✗ Branch 507 not taken.
✗ Branch 508 not taken.
✗ Branch 509 not taken.
✗ Branch 510 not taken.
✗ Branch 511 not taken.
✗ Branch 512 not taken.
✗ Branch 513 not taken.
✗ Branch 514 not taken.
✗ Branch 515 not taken.
✗ Branch 516 not taken.
✗ Branch 517 not taken.
✗ Branch 518 not taken.
✗ Branch 519 not taken.
✗ Branch 520 not taken.
✗ Branch 521 not taken.
✗ Branch 522 not taken.
✗ Branch 523 not taken.
✓ Branch 524 taken 9 times.
✗ Branch 525 not taken.
✗ Branch 526 not taken.
✗ Branch 527 not taken.
✗ Branch 528 not taken.
✗ Branch 529 not taken.
✗ Branch 530 not taken.
✗ Branch 531 not taken.
✗ Branch 532 not taken.
✗ Branch 533 not taken.
✗ Branch 534 not taken.
✗ Branch 535 not taken.
✗ Branch 536 not taken.
✗ Branch 537 not taken.
✗ Branch 538 not taken.
✗ Branch 539 not taken.
✗ Branch 540 not taken.
✗ Branch 541 not taken.
✗ Branch 542 not taken.
✗ Branch 543 not taken.
✗ Branch 544 not taken.
✗ Branch 545 not taken.
✗ Branch 546 not taken.
✗ Branch 547 not taken.
✗ Branch 548 not taken.
✗ Branch 549 not taken.
✗ Branch 550 not taken.
✗ Branch 551 not taken.
✗ Branch 552 not taken.
✗ Branch 553 not taken.
✗ Branch 554 not taken.
✗ Branch 555 not taken.
✗ Branch 556 not taken.
✗ Branch 557 not taken.
✗ Branch 558 not taken.
✗ Branch 559 not taken.
✓ Branch 560 taken 9 times.
✗ Branch 561 not taken.
✗ Branch 562 not taken.
✗ Branch 563 not taken.
✗ Branch 564 not taken.
✗ Branch 565 not taken.
✗ Branch 566 not taken.
✗ Branch 567 not taken.
✗ Branch 568 not taken.
✗ Branch 569 not taken.
✗ Branch 570 not taken.
✗ Branch 571 not taken.
✗ Branch 572 not taken.
✗ Branch 573 not taken.
✗ Branch 574 not taken.
✗ Branch 575 not taken.
✗ Branch 576 not taken.
✗ Branch 577 not taken.
✗ Branch 578 not taken.
✗ Branch 579 not taken.
✗ Branch 580 not taken.
✗ Branch 581 not taken.
✗ Branch 582 not taken.
✗ Branch 583 not taken.
✗ Branch 584 not taken.
✗ Branch 585 not taken.
✗ Branch 586 not taken.
✗ Branch 587 not taken.
✗ Branch 588 not taken.
✗ Branch 589 not taken.
✗ Branch 590 not taken.
✗ Branch 591 not taken.
✗ Branch 592 not taken.
✗ Branch 593 not taken.
✗ Branch 594 not taken.
✗ Branch 595 not taken.
✗ Branch 596 not taken.
✗ Branch 597 not taken.
✗ Branch 598 not taken.
✗ Branch 599 not taken.
✗ Branch 600 not taken.
✗ Branch 601 not taken.
✗ Branch 602 not taken.
✗ Branch 603 not taken.
✗ Branch 604 not taken.
✗ Branch 605 not taken.
✗ Branch 606 not taken.
✗ Branch 607 not taken.
✗ Branch 608 not taken.
✗ Branch 609 not taken.
✗ Branch 610 not taken.
✗ Branch 611 not taken.
✗ Branch 612 not taken.
✗ Branch 613 not taken.
✗ Branch 614 not taken.
✗ Branch 615 not taken.
✗ Branch 616 not taken.
✗ Branch 617 not taken.
✗ Branch 618 not taken.
✗ Branch 619 not taken.
✗ Branch 620 not taken.
✗ Branch 621 not taken.
✗ Branch 622 not taken.
✗ Branch 623 not taken.
✗ Branch 624 not taken.
✗ Branch 625 not taken.
✗ Branch 626 not taken.
✗ Branch 627 not taken.
✗ Branch 628 not taken.
✗ Branch 629 not taken.
✗ Branch 630 not taken.
✗ Branch 631 not taken.
✗ Branch 632 not taken.
✗ Branch 633 not taken.
✗ Branch 634 not taken.
✗ Branch 635 not taken.
✗ Branch 636 not taken.
✗ Branch 637 not taken.
✗ Branch 638 not taken.
✗ Branch 639 not taken.
✗ Branch 640 not taken.
✗ Branch 641 not taken.
✗ Branch 642 not taken.
✗ Branch 643 not taken.
✗ Branch 644 not taken.
✗ Branch 645 not taken.
✗ Branch 646 not taken.
✗ Branch 647 not taken.
✗ Branch 648 not taken.
✗ Branch 649 not taken.
✗ Branch 650 not taken.
✗ Branch 651 not taken.
✗ Branch 652 not taken.
✗ Branch 653 not taken.
✗ Branch 654 not taken.
✗ Branch 655 not taken.
✗ Branch 656 not taken.
✗ Branch 657 not taken.
✗ Branch 658 not taken.
✗ Branch 659 not taken.
✗ Branch 660 not taken.
✗ Branch 661 not taken.
✗ Branch 662 not taken.
✗ Branch 663 not taken.
✗ Branch 664 not taken.
✗ Branch 665 not taken.
✗ Branch 666 not taken.
✗ Branch 667 not taken.
✗ Branch 668 not taken.
✗ Branch 669 not taken.
✗ Branch 670 not taken.
✗ Branch 671 not taken.
✗ Branch 672 not taken.
✗ Branch 673 not taken.
✗ Branch 674 not taken.
✗ Branch 675 not taken.
✗ Branch 676 not taken.
✗ Branch 677 not taken.
✗ Branch 678 not taken.
✗ Branch 679 not taken.
✗ Branch 680 not taken.
✗ Branch 681 not taken.
✗ Branch 682 not taken.
✗ Branch 683 not taken.
✗ Branch 684 not taken.
✗ Branch 685 not taken.
✗ Branch 686 not taken.
✗ Branch 687 not taken.
✗ Branch 688 not taken.
✗ Branch 689 not taken.
✗ Branch 690 not taken.
✗ Branch 691 not taken.
✗ Branch 692 not taken.
✗ Branch 693 not taken.
✗ Branch 694 not taken.
✗ Branch 695 not taken.
✗ Branch 696 not taken.
✗ Branch 697 not taken.
✗ Branch 698 not taken.
✗ Branch 699 not taken.
✗ Branch 700 not taken.
✗ Branch 701 not taken.
✗ Branch 702 not taken.
✗ Branch 703 not taken.
✗ Branch 704 not taken.
✗ Branch 705 not taken.
✗ Branch 706 not taken.
✗ Branch 707 not taken.
✗ Branch 708 not taken.
✗ Branch 709 not taken.
✗ Branch 710 not taken.
✗ Branch 711 not taken.
✗ Branch 712 not taken.
✗ Branch 713 not taken.
✗ Branch 714 not taken.
✗ Branch 715 not taken.
✗ Branch 716 not taken.
✗ Branch 717 not taken.
✗ Branch 718 not taken.
✗ Branch 719 not taken.
✗ Branch 720 not taken.
✗ Branch 721 not taken.
✗ Branch 722 not taken.
✗ Branch 723 not taken.
✗ Branch 724 not taken.
✗ Branch 725 not taken.
✗ Branch 726 not taken.
✗ Branch 727 not taken.
✗ Branch 728 not taken.
✗ Branch 729 not taken.
✗ Branch 730 not taken.
✗ Branch 731 not taken.
✗ Branch 732 not taken.
✗ Branch 733 not taken.
✗ Branch 734 not taken.
✗ Branch 735 not taken.
✗ Branch 736 not taken.
✗ Branch 737 not taken.
✗ Branch 738 not taken.
✗ Branch 739 not taken.
✗ Branch 740 not taken.
✗ Branch 741 not taken.
✗ Branch 742 not taken.
✗ Branch 743 not taken.
✗ Branch 744 not taken.
✗ Branch 745 not taken.
✗ Branch 746 not taken.
✗ Branch 747 not taken.
✗ Branch 748 not taken.
✗ Branch 749 not taken.
✗ Branch 750 not taken.
✗ Branch 751 not taken.
✗ Branch 752 not taken.
✗ Branch 753 not taken.
✗ Branch 754 not taken.
✗ Branch 755 not taken.
✗ Branch 756 not taken.
✗ Branch 757 not taken.
✗ Branch 758 not taken.
✗ Branch 759 not taken.
✗ Branch 760 not taken.
✗ Branch 761 not taken.
✗ Branch 762 not taken.
✗ Branch 763 not taken.
✗ Branch 764 not taken.
✗ Branch 765 not taken.
✗ Branch 766 not taken.
✗ Branch 767 not taken.
✗ Branch 768 not taken.
✗ Branch 769 not taken.
✗ Branch 770 not taken.
✗ Branch 771 not taken.
✗ Branch 772 not taken.
✗ Branch 773 not taken.
✗ Branch 774 not taken.
✗ Branch 775 not taken.
✗ Branch 776 not taken.
✗ Branch 777 not taken.
✗ Branch 778 not taken.
✗ Branch 779 not taken.
✗ Branch 780 not taken.
✗ Branch 781 not taken.
✗ Branch 782 not taken.
✗ Branch 783 not taken.
✗ Branch 784 not taken.
✗ Branch 785 not taken.
✗ Branch 786 not taken.
✗ Branch 787 not taken.
✗ Branch 788 not taken.
✗ Branch 789 not taken.
✗ Branch 790 not taken.
✗ Branch 791 not taken.
✗ Branch 792 not taken.
✗ Branch 793 not taken.
✗ Branch 794 not taken.
✗ Branch 795 not taken.
✗ Branch 796 not taken.
✗ Branch 797 not taken.
✗ Branch 798 not taken.
✗ Branch 799 not taken.
✗ Branch 800 not taken.
✗ Branch 801 not taken.
✗ Branch 802 not taken.
✗ Branch 803 not taken.
✗ Branch 804 not taken.
✗ Branch 805 not taken.
✗ Branch 806 not taken.
✗ Branch 807 not taken.
✗ Branch 808 not taken.
✗ Branch 809 not taken.
✗ Branch 810 not taken.
✗ Branch 811 not taken.
✗ Branch 812 not taken.
✗ Branch 813 not taken.
✗ Branch 814 not taken.
✗ Branch 815 not taken.
✗ Branch 816 not taken.
✗ Branch 817 not taken.
✗ Branch 818 not taken.
✗ Branch 819 not taken.
✗ Branch 820 not taken.
✗ Branch 821 not taken.
✗ Branch 822 not taken.
✗ Branch 823 not taken.
✗ Branch 824 not taken.
✗ Branch 825 not taken.
✗ Branch 826 not taken.
✗ Branch 827 not taken.
✗ Branch 828 not taken.
✗ Branch 829 not taken.
✗ Branch 830 not taken.
✗ Branch 831 not taken.
✗ Branch 832 not taken.
✗ Branch 833 not taken.
✗ Branch 834 not taken.
✗ Branch 835 not taken.
✗ Branch 836 not taken.
✗ Branch 837 not taken.
✗ Branch 838 not taken.
✗ Branch 839 not taken.
✗ Branch 840 not taken.
✗ Branch 841 not taken.
✗ Branch 842 not taken.
✗ Branch 843 not taken.
✗ Branch 844 not taken.
✗ Branch 845 not taken.
✗ Branch 846 not taken.
✗ Branch 847 not taken.
✗ Branch 848 not taken.
✗ Branch 849 not taken.
✗ Branch 850 not taken.
✗ Branch 851 not taken.
✗ Branch 852 not taken.
✗ Branch 853 not taken.
✗ Branch 854 not taken.
✗ Branch 855 not taken.
✗ Branch 856 not taken.
✗ Branch 857 not taken.
✗ Branch 858 not taken.
✗ Branch 859 not taken.
✗ Branch 860 not taken.
✗ Branch 861 not taken.
✗ Branch 862 not taken.
✗ Branch 863 not taken.
✗ Branch 864 not taken.
✗ Branch 865 not taken.
✗ Branch 866 not taken.
✗ Branch 867 not taken.
✗ Branch 868 not taken.
✗ Branch 869 not taken.
✗ Branch 870 not taken.
✗ Branch 871 not taken.
✗ Branch 872 not taken.
✗ Branch 873 not taken.
✗ Branch 875 not taken.
✗ Branch 876 not taken.
✗ Branch 877 not taken.
✗ Branch 878 not taken.
✗ Branch 879 not taken.
✗ Branch 880 not taken.
✗ Branch 883 not taken.
✗ Branch 884 not taken.
✗ Branch 885 not taken.
✗ Branch 886 not taken.
✗ Branch 887 not taken.
✗ Branch 888 not taken.
✗ Branch 889 not taken.
✗ Branch 890 not taken.
✗ Branch 891 not taken.
✗ Branch 892 not taken.
✗ Branch 893 not taken.
✗ Branch 894 not taken.
✗ Branch 895 not taken.
✗ Branch 896 not taken.
✗ Branch 897 not taken.
✗ Branch 898 not taken.
✗ Branch 899 not taken.
✗ Branch 900 not taken.
✗ Branch 901 not taken.
✗ Branch 902 not taken.
✗ Branch 903 not taken.
✗ Branch 904 not taken.
✗ Branch 905 not taken.
✗ Branch 906 not taken.
✗ Branch 907 not taken.
✗ Branch 908 not taken.
✗ Branch 909 not taken.
✗ Branch 910 not taken.
✗ Branch 911 not taken.
✗ Branch 912 not taken.
✗ Branch 913 not taken.
✗ Branch 914 not taken.
✗ Branch 915 not taken.
✗ Branch 916 not taken.
✗ Branch 917 not taken.
✗ Branch 918 not taken.
✗ Branch 919 not taken.
✗ Branch 920 not taken.
✗ Branch 921 not taken.
✗ Branch 922 not taken.
✗ Branch 923 not taken.
✗ Branch 924 not taken.
✗ Branch 925 not taken.
✗ Branch 926 not taken.
✗ Branch 927 not taken.
✗ Branch 928 not taken.
✗ Branch 929 not taken.
✗ Branch 930 not taken.
✗ Branch 931 not taken.
✗ Branch 932 not taken.
✗ Branch 933 not taken.
✗ Branch 934 not taken.
✗ Branch 935 not taken.
✗ Branch 936 not taken.
✗ Branch 937 not taken.
✗ Branch 938 not taken.
✗ Branch 939 not taken.
✗ Branch 940 not taken.
✗ Branch 941 not taken.
✗ Branch 942 not taken.
✗ Branch 943 not taken.
✗ Branch 944 not taken.
✗ Branch 945 not taken.
✗ Branch 946 not taken.
✗ Branch 947 not taken.
✗ Branch 948 not taken.
✗ Branch 949 not taken.
✓ Branch 950 taken 116 times.
✓ Branch 951 taken 76 times.
✓ Branch 952 taken 122 times.
✓ Branch 953 taken 82 times.
✓ Branch 954 taken 120 times.
✓ Branch 955 taken 80 times.
✓ Branch 956 taken 122 times.
✓ Branch 957 taken 82 times.
✓ Branch 958 taken 614364 times.
✓ Branch 959 taken 82 times.
✓ Branch 960 taken 614256 times.
✓ Branch 961 taken 76 times.
✓ Branch 962 taken 122 times.
✓ Branch 963 taken 74 times.
✓ Branch 964 taken 327600 times.
✓ Branch 965 taken 74 times.
✓ Branch 966 taken 122 times.
✓ Branch 967 taken 74 times.
✓ Branch 968 taken 524160 times.
✓ Branch 969 taken 74 times.
✓ Branch 970 taken 350 times.
✓ Branch 971 taken 830 times.
✓ Branch 972 taken 90 times.
✓ Branch 973 taken 44 times.
✓ Branch 974 taken 366 times.
✓ Branch 975 taken 344 times.
✓ Branch 976 taken 210 times.
✓ Branch 977 taken 144 times.
✓ Branch 978 taken 346 times.
✓ Branch 979 taken 258 times.
✓ Branch 980 taken 390 times.
✓ Branch 981 taken 320 times.
✗ Branch 982 not taken.
✗ Branch 983 not taken.
✗ Branch 984 not taken.
✗ Branch 985 not taken.
✗ Branch 986 not taken.
✗ Branch 987 not taken.
✗ Branch 988 not taken.
✗ Branch 989 not taken.
✗ Branch 990 not taken.
✗ Branch 991 not taken.
✗ Branch 992 not taken.
✗ Branch 993 not taken.
✗ Branch 994 not taken.
✗ Branch 995 not taken.
✗ Branch 996 not taken.
✗ Branch 997 not taken.
✗ Branch 998 not taken.
✗ Branch 999 not taken.
✗ Branch 1000 not taken.
✓ Branch 1001 taken 6245352 times.
✗ Branch 1002 not taken.
✓ Branch 1003 taken 6245352 times.
✗ Branch 1004 not taken.
✓ Branch 1005 taken 6245352 times.
✗ Branch 1006 not taken.
✓ Branch 1007 taken 6245352 times.
✗ Branch 1008 not taken.
✓ Branch 1009 taken 6245352 times.
✗ Branch 1010 not taken.
✓ Branch 1011 taken 6245352 times.
✗ Branch 1012 not taken.
✓ Branch 1013 taken 6245352 times.
✗ Branch 1014 not taken.
✓ Branch 1015 taken 6245352 times.
✗ Branch 1016 not taken.
✓ Branch 1017 taken 49176 times.
✗ Branch 1018 not taken.
✓ Branch 1019 taken 49176 times.
✗ Branch 1020 not taken.
✓ Branch 1021 taken 49176 times.
✗ Branch 1022 not taken.
✓ Branch 1023 taken 49176 times.
✗ Branch 1024 not taken.
✓ Branch 1025 taken 49176 times.
✗ Branch 1026 not taken.
✗ Branch 1027 not taken.
✓ Branch 1028 taken 49176 times.
✗ Branch 1029 not taken.
✗ Branch 1030 not taken.
✗ Branch 1031 not taken.
✗ Branch 1032 not taken.
✗ Branch 1033 not taken.
✗ Branch 1034 not taken.
✗ Branch 1035 not taken.
✗ Branch 1036 not taken.
✗ Branch 1037 not taken.
✗ Branch 1038 not taken.
✗ Branch 1039 not taken.
✗ Branch 1040 not taken.
✗ Branch 1041 not taken.
✗ Branch 1042 not taken.
✗ Branch 1043 not taken.
✗ Branch 1044 not taken.
✗ Branch 1045 not taken.
✗ Branch 1046 not taken.
✗ Branch 1047 not taken.
✗ Branch 1048 not taken.
✗ Branch 1049 not taken.
✗ Branch 1050 not taken.
✗ Branch 1051 not taken.
✗ Branch 1052 not taken.
✗ Branch 1053 not taken.
✗ Branch 1054 not taken.
✗ Branch 1055 not taken.
✗ Branch 1056 not taken.
✓ Branch 1057 taken 6245352 times.
✗ Branch 1058 not taken.
✓ Branch 1059 taken 6245352 times.
✗ Branch 1060 not taken.
✓ Branch 1061 taken 6245352 times.
✗ Branch 1062 not taken.
✓ Branch 1063 taken 6245352 times.
✗ Branch 1064 not taken.
✓ Branch 1065 taken 6245352 times.
✗ Branch 1066 not taken.
✓ Branch 1067 taken 6245352 times.
✗ Branch 1068 not taken.
✓ Branch 1069 taken 6245352 times.
✗ Branch 1070 not taken.
✓ Branch 1071 taken 6245352 times.
✗ Branch 1072 not taken.
✓ Branch 1073 taken 49176 times.
✗ Branch 1074 not taken.
✓ Branch 1075 taken 49176 times.
✗ Branch 1076 not taken.
✓ Branch 1077 taken 49176 times.
✗ Branch 1078 not taken.
✓ Branch 1079 taken 49176 times.
✗ Branch 1080 not taken.
✓ Branch 1081 taken 49176 times.
✗ Branch 1082 not taken.
✗ Branch 1083 not taken.
✓ Branch 1084 taken 49176 times.
✗ Branch 1085 not taken.
✗ Branch 1086 not taken.
✗ Branch 1087 not taken.
✗ Branch 1088 not taken.
✗ Branch 1089 not taken.
✗ Branch 1090 not taken.
✗ Branch 1091 not taken.
✗ Branch 1092 not taken.
✗ Branch 1093 not taken.
✗ Branch 1094 not taken.
✗ Branch 1095 not taken.
✗ Branch 1096 not taken.
✗ Branch 1097 not taken.
✗ Branch 1098 not taken.
✗ Branch 1099 not taken.
✗ Branch 1100 not taken.
✗ Branch 1101 not taken.
✗ Branch 1102 not taken.
✗ Branch 1103 not taken.
✗ Branch 1104 not taken.
✗ Branch 1105 not taken.
✗ Branch 1106 not taken.
✗ Branch 1107 not taken.
✗ Branch 1108 not taken.
✗ Branch 1109 not taken.
✗ Branch 1110 not taken.
✗ Branch 1111 not taken.
✗ Branch 1112 not taken.
✗ Branch 1113 not taken.
✗ Branch 1114 not taken.
✗ Branch 1115 not taken.
✗ Branch 1116 not taken.
✗ Branch 1117 not taken.
✗ Branch 1118 not taken.
✗ Branch 1119 not taken.
✗ Branch 1120 not taken.
✓ Branch 1121 taken 6245352 times.
✗ Branch 1122 not taken.
✓ Branch 1123 taken 6245352 times.
✗ Branch 1124 not taken.
✓ Branch 1125 taken 6245352 times.
✗ Branch 1126 not taken.
✓ Branch 1127 taken 6245352 times.
✗ Branch 1128 not taken.
✓ Branch 1129 taken 6245352 times.
✗ Branch 1130 not taken.
✓ Branch 1131 taken 6245352 times.
✗ Branch 1132 not taken.
✓ Branch 1133 taken 6245352 times.
✗ Branch 1134 not taken.
✓ Branch 1135 taken 6245352 times.
✗ Branch 1136 not taken.
✓ Branch 1137 taken 49176 times.
✗ Branch 1138 not taken.
✓ Branch 1139 taken 49176 times.
✗ Branch 1140 not taken.
✓ Branch 1141 taken 49176 times.
✗ Branch 1142 not taken.
✓ Branch 1143 taken 49176 times.
✗ Branch 1144 not taken.
✓ Branch 1145 taken 49176 times.
✗ Branch 1146 not taken.
✗ Branch 1147 not taken.
✓ Branch 1148 taken 49176 times.
✗ Branch 1149 not taken.
✗ Branch 1150 not taken.
✗ Branch 1151 not taken.
✗ Branch 1152 not taken.
✗ Branch 1153 not taken.
✗ Branch 1154 not taken.
✗ Branch 1155 not taken.
✗ Branch 1156 not taken.
✗ Branch 1157 not taken.
✗ Branch 1158 not taken.
✗ Branch 1159 not taken.
✗ Branch 1160 not taken.
✓ Branch 1161 taken 20490 times.
✓ Branch 1162 taken 28686 times.
✓ Branch 1163 taken 4098 times.
✓ Branch 1164 taken 16392 times.
✓ Branch 1165 taken 5 times.
✓ Branch 1166 taken 7 times.
✓ Branch 1167 taken 1 times.
✓ Branch 1168 taken 4 times.
✗ Branch 1169 not taken.
✗ Branch 1170 not taken.
✗ Branch 1171 not taken.
✗ Branch 1172 not taken.
✗ Branch 1173 not taken.
✗ Branch 1174 not taken.
✗ Branch 1175 not taken.
✗ Branch 1176 not taken.
✗ Branch 1177 not taken.
✗ Branch 1178 not taken.
✗ Branch 1179 not taken.
✗ Branch 1180 not taken.
✗ Branch 1181 not taken.
✗ Branch 1182 not taken.
✗ Branch 1183 not taken.
✗ Branch 1184 not taken.
✓ Branch 1185 taken 16392 times.
✓ Branch 1186 taken 32784 times.
✗ Branch 1187 not taken.
✓ Branch 1188 taken 16392 times.
✓ Branch 1189 taken 4 times.
✓ Branch 1190 taken 8 times.
✗ Branch 1191 not taken.
✓ Branch 1192 taken 4 times.
✗ Branch 1193 not taken.
✗ Branch 1194 not taken.
✗ Branch 1195 not taken.
✗ Branch 1196 not taken.
✗ Branch 1197 not taken.
✗ Branch 1198 not taken.
✗ Branch 1199 not taken.
✗ Branch 1200 not taken.
✗ Branch 1201 not taken.
✗ Branch 1202 not taken.
✗ Branch 1203 not taken.
✗ Branch 1204 not taken.
✓ Branch 1205 taken 16392 times.
✓ Branch 1206 taken 32784 times.
✗ Branch 1207 not taken.
✓ Branch 1208 taken 16392 times.
✓ Branch 1209 taken 4 times.
✓ Branch 1210 taken 8 times.
✗ Branch 1211 not taken.
✓ Branch 1212 taken 4 times.
✗ Branch 1213 not taken.
✗ Branch 1214 not taken.
✗ Branch 1215 not taken.
✗ Branch 1216 not taken.
✗ Branch 1217 not taken.
✗ Branch 1218 not taken.
✗ Branch 1219 not taken.
✗ Branch 1220 not taken.
✗ Branch 1221 not taken.
✗ Branch 1222 not taken.
✗ Branch 1223 not taken.
✗ Branch 1224 not taken.
✗ Branch 1225 not taken.
✗ Branch 1226 not taken.
✗ Branch 1227 not taken.
✗ Branch 1228 not taken.
✗ Branch 1229 not taken.
✗ Branch 1230 not taken.
✗ Branch 1231 not taken.
✗ Branch 1232 not taken.
✗ Branch 1233 not taken.
✗ Branch 1234 not taken.
✗ Branch 1235 not taken.
✗ Branch 1236 not taken.
✗ Branch 1237 not taken.
✗ Branch 1238 not taken.
✗ Branch 1239 not taken.
✗ Branch 1240 not taken.
✗ Branch 1241 not taken.
✗ Branch 1242 not taken.
✗ Branch 1243 not taken.
✗ Branch 1244 not taken.
✗ Branch 1245 not taken.
✗ Branch 1246 not taken.
✗ Branch 1247 not taken.
✗ Branch 1248 not taken.
✗ Branch 1249 not taken.
✗ Branch 1250 not taken.
✗ Branch 1251 not taken.
✗ Branch 1252 not taken.
✗ Branch 1253 not taken.
✗ Branch 1254 not taken.
✗ Branch 1255 not taken.
✗ Branch 1256 not taken.
✗ Branch 1257 not taken.
✗ Branch 1258 not taken.
✗ Branch 1259 not taken.
✗ Branch 1260 not taken.
✗ Branch 1261 not taken.
✗ Branch 1262 not taken.
✗ Branch 1263 not taken.
✗ Branch 1264 not taken.
✗ Branch 1265 not taken.
✗ Branch 1266 not taken.
✗ Branch 1267 not taken.
✗ Branch 1268 not taken.
|
1402579261 | return a == b; |
| 447 | OPENVDB_NO_FP_EQUALITY_WARNING_END | ||
| 448 | } | ||
| 449 | |||
| 450 | |||
| 451 | template<typename Type> | ||
| 452 | inline bool | ||
| 453 | isRelOrApproxEqual(const Type& a, const Type& b, const Type& absTol, const Type& relTol) | ||
| 454 | { | ||
| 455 | // First check to see if we are inside the absolute tolerance | ||
| 456 | // Necessary for numbers close to 0 | ||
| 457 |
12/18✓ Branch 0 taken 28194069 times.
✓ Branch 1 taken 30578401 times.
✓ Branch 2 taken 17995903 times.
✓ Branch 3 taken 11533914 times.
✓ Branch 4 taken 10124640 times.
✓ Branch 5 taken 1409272 times.
✓ Branch 6 taken 158881 times.
✓ Branch 7 taken 1070366 times.
✓ Branch 8 taken 376536 times.
✓ Branch 9 taken 693884 times.
✓ Branch 10 taken 292106 times.
✓ Branch 11 taken 401826 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
|
60001821 | if (!(Abs(a - b) > absTol)) return true; |
| 458 | |||
| 459 | // Next check to see if we are inside the relative tolerance | ||
| 460 | // to handle large numbers that aren't within the abs tolerance | ||
| 461 | // but could be the closest floating point representation | ||
| 462 | double relError; | ||
| 463 |
12/18✓ Branch 0 taken 10030678 times.
✓ Branch 1 taken 18163391 times.
✓ Branch 2 taken 6773286 times.
✓ Branch 3 taken 11222617 times.
✓ Branch 4 taken 3304937 times.
✓ Branch 5 taken 6819703 times.
✓ Branch 6 taken 38 times.
✓ Branch 7 taken 158843 times.
✓ Branch 8 taken 168336 times.
✓ Branch 9 taken 208200 times.
✓ Branch 10 taken 128017 times.
✓ Branch 11 taken 164089 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
|
57142135 | if (Abs(b) > Abs(a)) { |
| 464 | 20405292 | relError = Abs((a - b) / b); | |
| 465 | } else { | ||
| 466 | 36736843 | relError = Abs((a - b) / a); | |
| 467 | } | ||
| 468 |
9/18✗ Branch 0 not taken.
✓ Branch 1 taken 28194069 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 17995903 times.
✓ Branch 4 taken 10124640 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 54 times.
✓ Branch 7 taken 158827 times.
✓ Branch 8 taken 48 times.
✓ Branch 9 taken 376488 times.
✓ Branch 10 taken 292070 times.
✓ Branch 11 taken 36 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
|
57142135 | return (relError <= relTol); |
| 469 | } | ||
| 470 | |||
| 471 | template<> | ||
| 472 | inline bool | ||
| 473 | isRelOrApproxEqual(const bool& a, const bool& b, const bool&, const bool&) | ||
| 474 | { | ||
| 475 | return (a == b); | ||
| 476 | } | ||
| 477 | |||
| 478 | inline int32_t | ||
| 479 | floatToInt32(const float f) | ||
| 480 | { | ||
| 481 | // switch to std:bit_cast in C++20 | ||
| 482 | static_assert(sizeof(int32_t) == sizeof f, "`float` has an unexpected size."); | ||
| 483 | int32_t ret; | ||
| 484 | std::memcpy(&ret, &f, sizeof(int32_t)); | ||
| 485 | return ret; | ||
| 486 | } | ||
| 487 | |||
| 488 | inline int64_t | ||
| 489 | doubleToInt64(const double d) | ||
| 490 | { | ||
| 491 | // switch to std:bit_cast in C++20 | ||
| 492 | static_assert(sizeof(int64_t) == sizeof d, "`double` has an unexpected size."); | ||
| 493 | int64_t ret; | ||
| 494 | std::memcpy(&ret, &d, sizeof(int64_t)); | ||
| 495 | return ret; | ||
| 496 | } | ||
| 497 | |||
| 498 | // aUnitsInLastPlace is the allowed difference between the least significant digits | ||
| 499 | // of the numbers' floating point representation | ||
| 500 | // Please read the reference paper before trying to use isUlpsEqual | ||
| 501 | // http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm | ||
| 502 | inline bool | ||
| 503 | isUlpsEqual(const double aLeft, const double aRight, const int64_t aUnitsInLastPlace) | ||
| 504 | { | ||
| 505 | int64_t longLeft = doubleToInt64(aLeft); | ||
| 506 | // Because of 2's complement, must restore lexicographical order | ||
| 507 | if (longLeft < 0) { | ||
| 508 | longLeft = INT64_C(0x8000000000000000) - longLeft; | ||
| 509 | } | ||
| 510 | |||
| 511 | int64_t longRight = doubleToInt64(aRight); | ||
| 512 | // Because of 2's complement, must restore lexicographical order | ||
| 513 | if (longRight < 0) { | ||
| 514 | longRight = INT64_C(0x8000000000000000) - longRight; | ||
| 515 | } | ||
| 516 | |||
| 517 | int64_t difference = Abs(longLeft - longRight); | ||
| 518 | return (difference <= aUnitsInLastPlace); | ||
| 519 | } | ||
| 520 | |||
| 521 | inline bool | ||
| 522 | isUlpsEqual(const float aLeft, const float aRight, const int32_t aUnitsInLastPlace) | ||
| 523 | { | ||
| 524 | int32_t intLeft = floatToInt32(aLeft); | ||
| 525 | // Because of 2's complement, must restore lexicographical order | ||
| 526 | if (intLeft < 0) { | ||
| 527 | intLeft = 0x80000000 - intLeft; | ||
| 528 | } | ||
| 529 | |||
| 530 | int32_t intRight = floatToInt32(aRight); | ||
| 531 | // Because of 2's complement, must restore lexicographical order | ||
| 532 | if (intRight < 0) { | ||
| 533 | intRight = 0x80000000 - intRight; | ||
| 534 | } | ||
| 535 | |||
| 536 | int32_t difference = Abs(intLeft - intRight); | ||
| 537 | return (difference <= aUnitsInLastPlace); | ||
| 538 | } | ||
| 539 | |||
| 540 | |||
| 541 | //////////////////////////////////////// | ||
| 542 | |||
| 543 | |||
| 544 | // ==========> Pow <================== | ||
| 545 | |||
| 546 | /// Return @a x<sup>2</sup>. | ||
| 547 | template<typename Type> | ||
| 548 |
50/52✓ Branch 0 taken 56414571 times.
✓ Branch 1 taken 97176240 times.
✓ Branch 2 taken 1826837 times.
✓ Branch 3 taken 3172854 times.
✓ Branch 4 taken 1864185 times.
✓ Branch 5 taken 2652080 times.
✓ Branch 6 taken 2036248 times.
✓ Branch 7 taken 2986817 times.
✓ Branch 8 taken 1875655 times.
✓ Branch 9 taken 2640663 times.
✓ Branch 10 taken 2301712 times.
✓ Branch 11 taken 3317114 times.
✓ Branch 12 taken 2035854 times.
✓ Branch 13 taken 3168674 times.
✓ Branch 14 taken 2162820 times.
✓ Branch 15 taken 3167277 times.
✓ Branch 16 taken 1984043 times.
✓ Branch 17 taken 3220485 times.
✓ Branch 18 taken 2045412 times.
✓ Branch 19 taken 3191060 times.
✓ Branch 20 taken 1989540 times.
✓ Branch 21 taken 3214988 times.
✓ Branch 22 taken 2062751 times.
✓ Branch 23 taken 3257467 times.
✓ Branch 24 taken 4718475 times.
✓ Branch 25 taken 719041 times.
✓ Branch 26 taken 25846437 times.
✓ Branch 27 taken 661408 times.
✓ Branch 28 taken 559755 times.
✓ Branch 29 taken 719041 times.
✓ Branch 30 taken 812472 times.
✓ Branch 31 taken 748167 times.
✓ Branch 32 taken 559782 times.
✓ Branch 33 taken 719014 times.
✓ Branch 34 taken 620335 times.
✓ Branch 35 taken 658461 times.
✓ Branch 36 taken 272353 times.
✓ Branch 37 taken 295490 times.
✓ Branch 38 taken 285090 times.
✓ Branch 39 taken 282753 times.
✓ Branch 40 taken 272362 times.
✓ Branch 41 taken 295481 times.
✓ Branch 42 taken 285099 times.
✓ Branch 43 taken 282744 times.
✓ Branch 44 taken 272362 times.
✓ Branch 45 taken 295481 times.
✓ Branch 46 taken 285108 times.
✓ Branch 47 taken 282735 times.
✓ Branch 49 taken 7 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 10 times.
✗ Branch 53 not taken.
|
462549329 | inline Type Pow2(Type x) { return x*x; } |
| 549 | |||
| 550 | /// Return @a x<sup>3</sup>. | ||
| 551 | template<typename Type> | ||
| 552 |
12/22✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 94441 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 98 times.
✓ Branch 7 taken 47620 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 times.
✓ Branch 11 taken 6168 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 74184 times.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
|
10126071 | inline Type Pow3(Type x) { return x*x*x; } |
| 553 | |||
| 554 | /// Return @a x<sup>4</sup>. | ||
| 555 | template<typename Type> | ||
| 556 | inline Type Pow4(Type x) { return Pow2(Pow2(x)); } | ||
| 557 | |||
| 558 | /// Return @a x<sup>n</sup>. | ||
| 559 | template<typename Type> | ||
| 560 | Type | ||
| 561 | 28 | Pow(Type x, int n) | |
| 562 | { | ||
| 563 | Type ans = 1; | ||
| 564 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 28 times.
|
28 | if (n < 0) { |
| 565 | ✗ | n = -n; | |
| 566 | ✗ | x = Type(1)/x; | |
| 567 | } | ||
| 568 |
2/2✓ Branch 0 taken 121 times.
✓ Branch 1 taken 28 times.
|
149 | while (n--) ans *= x; |
| 569 | 28 | return ans; | |
| 570 | } | ||
| 571 | |||
| 572 | //@{ | ||
| 573 | /// Return @a b<sup>e</sup>. | ||
| 574 | inline float | ||
| 575 | Pow(float b, float e) | ||
| 576 | { | ||
| 577 | assert( b >= 0.0f && "Pow(float,float): base is negative" ); | ||
| 578 | return powf(b,e); | ||
| 579 | } | ||
| 580 | |||
| 581 | inline double | ||
| 582 | 133 | Pow(double b, double e) | |
| 583 | { | ||
| 584 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 133 times.
|
133 | assert( b >= 0.0 && "Pow(double,double): base is negative" ); |
| 585 | 133 | return std::pow(b,e); | |
| 586 | } | ||
| 587 | //@} | ||
| 588 | |||
| 589 | |||
| 590 | // ==========> Max <================== | ||
| 591 | |||
| 592 | /// Return the maximum of two values | ||
| 593 | template<typename Type> | ||
| 594 | inline const Type& | ||
| 595 | Max(const Type& a, const Type& b) | ||
| 596 | { | ||
| 597 | return std::max(a,b); | ||
| 598 | } | ||
| 599 | |||
| 600 | /// Return the maximum of three values | ||
| 601 | template<typename Type> | ||
| 602 | inline const Type& | ||
| 603 | Max(const Type& a, const Type& b, const Type& c) | ||
| 604 | { | ||
| 605 | return std::max(std::max(a,b), c); | ||
| 606 | } | ||
| 607 | |||
| 608 | /// Return the maximum of four values | ||
| 609 | template<typename Type> | ||
| 610 | inline const Type& | ||
| 611 | Max(const Type& a, const Type& b, const Type& c, const Type& d) | ||
| 612 | { | ||
| 613 | return std::max(std::max(a,b), std::max(c,d)); | ||
| 614 | } | ||
| 615 | |||
| 616 | /// Return the maximum of five values | ||
| 617 | template<typename Type> | ||
| 618 | inline const Type& | ||
| 619 | Max(const Type& a, const Type& b, const Type& c, const Type& d, const Type& e) | ||
| 620 | { | ||
| 621 | return std::max(std::max(a,b), Max(c,d,e)); | ||
| 622 | } | ||
| 623 | |||
| 624 | /// Return the maximum of six values | ||
| 625 | template<typename Type> | ||
| 626 | inline const Type& | ||
| 627 | Max(const Type& a, const Type& b, const Type& c, const Type& d, const Type& e, const Type& f) | ||
| 628 | { | ||
| 629 | return std::max(Max(a,b,c), Max(d,e,f)); | ||
| 630 | } | ||
| 631 | |||
| 632 | /// Return the maximum of seven values | ||
| 633 | template<typename Type> | ||
| 634 | inline const Type& | ||
| 635 | Max(const Type& a, const Type& b, const Type& c, const Type& d, | ||
| 636 | const Type& e, const Type& f, const Type& g) | ||
| 637 | { | ||
| 638 | return std::max(Max(a,b,c,d), Max(e,f,g)); | ||
| 639 | } | ||
| 640 | |||
| 641 | /// Return the maximum of eight values | ||
| 642 | template<typename Type> | ||
| 643 | inline const Type& | ||
| 644 | Max(const Type& a, const Type& b, const Type& c, const Type& d, | ||
| 645 | const Type& e, const Type& f, const Type& g, const Type& h) | ||
| 646 | { | ||
| 647 | return std::max(Max(a,b,c,d), Max(e,f,g,h)); | ||
| 648 | } | ||
| 649 | |||
| 650 | |||
| 651 | // ==========> Min <================== | ||
| 652 | |||
| 653 | /// Return the minimum of two values | ||
| 654 | template<typename Type> | ||
| 655 | inline const Type& | ||
| 656 | Min(const Type& a, const Type& b) { return std::min(a, b); } | ||
| 657 | |||
| 658 | /// Return the minimum of three values | ||
| 659 | template<typename Type> | ||
| 660 | inline const Type& | ||
| 661 | Min(const Type& a, const Type& b, const Type& c) { return std::min(std::min(a, b), c); } | ||
| 662 | |||
| 663 | /// Return the minimum of four values | ||
| 664 | template<typename Type> | ||
| 665 | inline const Type& | ||
| 666 | Min(const Type& a, const Type& b, const Type& c, const Type& d) | ||
| 667 | { | ||
| 668 | return std::min(std::min(a, b), std::min(c, d)); | ||
| 669 | } | ||
| 670 | |||
| 671 | /// Return the minimum of five values | ||
| 672 | template<typename Type> | ||
| 673 | inline const Type& | ||
| 674 | Min(const Type& a, const Type& b, const Type& c, const Type& d, const Type& e) | ||
| 675 | { | ||
| 676 | return std::min(std::min(a,b), Min(c,d,e)); | ||
| 677 | } | ||
| 678 | |||
| 679 | /// Return the minimum of six values | ||
| 680 | template<typename Type> | ||
| 681 | inline const Type& | ||
| 682 | Min(const Type& a, const Type& b, const Type& c, const Type& d, const Type& e, const Type& f) | ||
| 683 | { | ||
| 684 | return std::min(Min(a,b,c), Min(d,e,f)); | ||
| 685 | } | ||
| 686 | |||
| 687 | /// Return the minimum of seven values | ||
| 688 | template<typename Type> | ||
| 689 | inline const Type& | ||
| 690 | Min(const Type& a, const Type& b, const Type& c, const Type& d, | ||
| 691 | const Type& e, const Type& f, const Type& g) | ||
| 692 | { | ||
| 693 | return std::min(Min(a,b,c,d), Min(e,f,g)); | ||
| 694 | } | ||
| 695 | |||
| 696 | /// Return the minimum of eight values | ||
| 697 | template<typename Type> | ||
| 698 | inline const Type& | ||
| 699 | Min(const Type& a, const Type& b, const Type& c, const Type& d, | ||
| 700 | const Type& e, const Type& f, const Type& g, const Type& h) | ||
| 701 | { | ||
| 702 | return std::min(Min(a,b,c,d), Min(e,f,g,h)); | ||
| 703 | } | ||
| 704 | |||
| 705 | |||
| 706 | // ============> Exp <================== | ||
| 707 | |||
| 708 | /// Return @a e<sup>x</sup>. | ||
| 709 | template<typename Type> | ||
| 710 | inline Type Exp(const Type& x) { return std::exp(x); } | ||
| 711 | |||
| 712 | // ============> Sin <================== | ||
| 713 | |||
| 714 | //@{ | ||
| 715 | /// Return sin @a x. | ||
| 716 | inline float Sin(const float& x) { return std::sin(x); } | ||
| 717 | |||
| 718 |
5/6✓ Branch 0 taken 66424 times.
✓ Branch 1 taken 22292 times.
✓ Branch 2 taken 282894 times.
✓ Branch 3 taken 93480 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
465241 | inline double Sin(const double& x) { return std::sin(x); } |
| 719 | //@} | ||
| 720 | |||
| 721 | // ============> Cos <================== | ||
| 722 | |||
| 723 | //@{ | ||
| 724 | /// Return cos @a x. | ||
| 725 | inline float Cos(const float& x) { return std::cos(x); } | ||
| 726 | |||
| 727 | inline double Cos(const double& x) { return std::cos(x); } | ||
| 728 | //@} | ||
| 729 | |||
| 730 | |||
| 731 | //////////////////////////////////////// | ||
| 732 | |||
| 733 | |||
| 734 | /// Return the sign of the given value as an integer (either -1, 0 or 1). | ||
| 735 | template <typename Type> | ||
| 736 | inline int Sign(const Type &x) { return (zeroVal<Type>() < x) - (x < zeroVal<Type>()); } | ||
| 737 | |||
| 738 | |||
| 739 | /// @brief Return @c true if @a a and @a b have different signs. | ||
| 740 | /// @note Zero is considered a positive number. | ||
| 741 | template <typename Type> | ||
| 742 | inline bool | ||
| 743 | SignChange(const Type& a, const Type& b) | ||
| 744 | { | ||
| 745 | return ( (a<zeroVal<Type>()) ^ (b<zeroVal<Type>()) ); | ||
| 746 | } | ||
| 747 | |||
| 748 | |||
| 749 | /// @brief Return @c true if the interval [@a a, @a b] includes zero, | ||
| 750 | /// i.e., if either @a a or @a b is zero or if they have different signs. | ||
| 751 | template <typename Type> | ||
| 752 | inline bool | ||
| 753 | ZeroCrossing(const Type& a, const Type& b) | ||
| 754 | { | ||
| 755 |
6/6✓ Branch 0 taken 205861 times.
✓ Branch 1 taken 779890 times.
✓ Branch 2 taken 207730 times.
✓ Branch 3 taken 203992 times.
✓ Branch 4 taken 8 times.
✓ Branch 5 taken 5 times.
|
1397486 | return a * b <= zeroVal<Type>(); |
| 756 | } | ||
| 757 | |||
| 758 | |||
| 759 | //@{ | ||
| 760 | /// Return the square root of a floating-point value. | ||
| 761 | inline float Sqrt(float x) { return std::sqrt(x); } | ||
| 762 |
12/120✓ Branch 0 taken 119726 times.
✓ Branch 1 taken 18590 times.
✓ Branch 2 taken 339957 times.
✓ Branch 3 taken 84776 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 9030 times.
✓ Branch 7 taken 7143 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 28496 times.
✓ Branch 11 taken 14846 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✓ Branch 14 taken 6168 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✓ Branch 18 taken 2784 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✓ Branch 22 taken 53858 times.
✓ Branch 23 taken 33595 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 34 not taken.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✗ Branch 51 not taken.
✗ Branch 52 not taken.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✗ Branch 63 not taken.
✗ Branch 64 not taken.
✗ Branch 65 not taken.
✗ Branch 66 not taken.
✗ Branch 67 not taken.
✗ Branch 68 not taken.
✗ Branch 69 not taken.
✗ Branch 70 not taken.
✗ Branch 71 not taken.
✗ Branch 72 not taken.
✗ Branch 73 not taken.
✗ Branch 74 not taken.
✗ Branch 75 not taken.
✗ Branch 76 not taken.
✗ Branch 77 not taken.
✗ Branch 78 not taken.
✗ Branch 79 not taken.
✗ Branch 80 not taken.
✗ Branch 81 not taken.
✗ Branch 82 not taken.
✗ Branch 83 not taken.
✗ Branch 84 not taken.
✗ Branch 85 not taken.
✗ Branch 86 not taken.
✗ Branch 87 not taken.
✗ Branch 88 not taken.
✗ Branch 89 not taken.
✗ Branch 90 not taken.
✗ Branch 91 not taken.
✗ Branch 92 not taken.
✗ Branch 93 not taken.
✗ Branch 94 not taken.
✗ Branch 95 not taken.
✗ Branch 96 not taken.
✗ Branch 97 not taken.
✗ Branch 98 not taken.
✗ Branch 99 not taken.
✗ Branch 100 not taken.
✗ Branch 101 not taken.
✗ Branch 102 not taken.
✗ Branch 103 not taken.
✗ Branch 104 not taken.
✗ Branch 105 not taken.
✗ Branch 106 not taken.
✗ Branch 107 not taken.
✗ Branch 108 not taken.
✗ Branch 109 not taken.
✗ Branch 110 not taken.
✗ Branch 111 not taken.
✗ Branch 112 not taken.
✗ Branch 113 not taken.
✗ Branch 114 not taken.
✗ Branch 115 not taken.
✗ Branch 116 not taken.
✗ Branch 117 not taken.
✗ Branch 118 not taken.
✗ Branch 119 not taken.
|
4558990 | inline double Sqrt(double x) { return std::sqrt(x); } |
| 763 | inline long double Sqrt(long double x) { return std::sqrt(x); } | ||
| 764 | //@} | ||
| 765 | |||
| 766 | |||
| 767 | //@{ | ||
| 768 | /// Return the cube root of a floating-point value. | ||
| 769 | inline float Cbrt(float x) { return std::cbrt(x); } | ||
| 770 |
1/4✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 4 taken 5 times.
✗ Branch 5 not taken.
|
5 | inline double Cbrt(double x) { return std::cbrt(x); } |
| 771 | inline long double Cbrt(long double x) { return std::cbrt(x); } | ||
| 772 | //@} | ||
| 773 | |||
| 774 | |||
| 775 | //@{ | ||
| 776 | /// Return the remainder of @a x / @a y. | ||
| 777 | inline int Mod(int x, int y) { return (x % y); } | ||
| 778 | inline float Mod(float x, float y) { return std::fmod(x, y); } | ||
| 779 | inline double Mod(double x, double y) { return std::fmod(x, y); } | ||
| 780 | inline long double Mod(long double x, long double y) { return std::fmod(x, y); } | ||
| 781 | template<typename Type> inline Type Remainder(Type x, Type y) { return Mod(x, y); } | ||
| 782 | //@} | ||
| 783 | |||
| 784 | |||
| 785 | //@{ | ||
| 786 | /// Return @a x rounded up to the nearest integer. | ||
| 787 | inline float RoundUp(float x) { return std::ceil(x); } | ||
| 788 |
12/24✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 5 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 8 times.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
✗ Branch 31 not taken.
✓ Branch 32 taken 1 times.
✗ Branch 34 not taken.
✓ Branch 35 taken 8 times.
|
17325050 | inline double RoundUp(double x) { return std::ceil(x); } |
| 789 | inline long double RoundUp(long double x) { return std::ceil(x); } | ||
| 790 | //@} | ||
| 791 | /// Return @a x rounded up to the nearest multiple of @a base. | ||
| 792 | template<typename Type> | ||
| 793 | inline Type | ||
| 794 | RoundUp(Type x, Type base) | ||
| 795 | { | ||
| 796 | Type remainder = Remainder(x, base); | ||
| 797 | return remainder ? x-remainder+base : x; | ||
| 798 | } | ||
| 799 | |||
| 800 | |||
| 801 | //@{ | ||
| 802 | /// Return @a x rounded down to the nearest integer. | ||
| 803 | inline float RoundDown(float x) { return std::floor(x); } | ||
| 804 |
13/22✓ Branch 0 taken 2 times.
✓ Branch 1 taken 33 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 1 times.
✓ Branch 20 taken 2 times.
✓ Branch 21 taken 5 times.
|
4414853972 | inline double RoundDown(double x) { return std::floor(x); } |
| 805 | inline long double RoundDown(long double x) { return std::floor(x); } | ||
| 806 | //@} | ||
| 807 | /// Return @a x rounded down to the nearest multiple of @a base. | ||
| 808 | template<typename Type> | ||
| 809 | inline Type | ||
| 810 | RoundDown(Type x, Type base) | ||
| 811 | { | ||
| 812 | Type remainder = Remainder(x, base); | ||
| 813 | return remainder ? x-remainder : x; | ||
| 814 | } | ||
| 815 | |||
| 816 | |||
| 817 | //@{ | ||
| 818 | /// Return @a x rounded to the nearest integer. | ||
| 819 |
4/30✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
|
7 | inline float Round(float x) { return RoundDown(x + 0.5f); } |
| 820 |
3/6✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
|
4397646478 | inline double Round(double x) { return RoundDown(x + 0.5); } |
| 821 | inline long double Round(long double x) { return RoundDown(x + 0.5l); } | ||
| 822 | //@} | ||
| 823 | |||
| 824 | |||
| 825 | /// Return the euclidean remainder of @a x. | ||
| 826 | /// Note unlike % operator this will always return a positive result | ||
| 827 | template<typename Type> | ||
| 828 | inline Type | ||
| 829 | EuclideanRemainder(Type x) { return x - RoundDown(x); } | ||
| 830 | |||
| 831 | |||
| 832 | /// Return the integer part of @a x. | ||
| 833 | template<typename Type> | ||
| 834 | inline Type | ||
| 835 | IntegerPart(Type x) | ||
| 836 | { | ||
| 837 | return (x > 0 ? RoundDown(x) : RoundUp(x)); | ||
| 838 | } | ||
| 839 | |||
| 840 | /// Return the fractional part of @a x. | ||
| 841 | template<typename Type> | ||
| 842 | inline Type | ||
| 843 | FractionalPart(Type x) { return Mod(x,Type(1)); } | ||
| 844 | |||
| 845 | |||
| 846 | //@{ | ||
| 847 | /// Return the floor of @a x. | ||
| 848 |
10/22✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 7 times.
✓ Branch 21 taken 1 times.
|
93707135 | inline int Floor(float x) { return int(RoundDown(x)); } |
| 849 |
1/2✗ Branch 2 not taken.
✓ Branch 3 taken 84 times.
|
16554421 | inline int Floor(double x) { return int(RoundDown(x)); } |
| 850 | inline int Floor(long double x) { return int(RoundDown(x)); } | ||
| 851 | //@} | ||
| 852 | |||
| 853 | |||
| 854 | //@{ | ||
| 855 | /// Return the ceiling of @a x. | ||
| 856 | 80 | inline int Ceil(float x) { return int(RoundUp(x)); } | |
| 857 |
4/84✗ Branch 0 not taken.
✗ Branch 1 not taken.
✓ Branch 2 taken 34 times.
✓ Branch 3 taken 50 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 34 not taken.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✗ Branch 51 not taken.
✗ Branch 52 not taken.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 541177 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✗ Branch 63 not taken.
✗ Branch 64 not taken.
✗ Branch 65 not taken.
✗ Branch 66 not taken.
✗ Branch 67 not taken.
✗ Branch 68 not taken.
✗ Branch 69 not taken.
✗ Branch 70 not taken.
✗ Branch 71 not taken.
✗ Branch 72 not taken.
✗ Branch 73 not taken.
✗ Branch 74 not taken.
✗ Branch 75 not taken.
✗ Branch 76 not taken.
✗ Branch 77 not taken.
✗ Branch 78 not taken.
✗ Branch 79 not taken.
✗ Branch 80 not taken.
✗ Branch 81 not taken.
✗ Branch 82 not taken.
✓ Branch 83 taken 5411680 times.
|
5953194 | inline int Ceil(double x) { return int(RoundUp(x)); } |
| 858 | inline int Ceil(long double x) { return int(RoundUp(x)); } | ||
| 859 | //@} | ||
| 860 | |||
| 861 | |||
| 862 | /// Return @a x if it is greater or equal in magnitude than @a delta. Otherwise, return zero. | ||
| 863 | template<typename Type> | ||
| 864 | inline Type Chop(Type x, Type delta) { return (Abs(x) < delta ? zeroVal<Type>() : x); } | ||
| 865 | |||
| 866 | |||
| 867 | /// Return @a x truncated to the given number of decimal digits. | ||
| 868 | template<typename Type> | ||
| 869 | inline Type | ||
| 870 | 28 | Truncate(Type x, unsigned int digits) | |
| 871 | { | ||
| 872 | 28 | Type tenth = static_cast<Type>(Pow(size_t(10), digits)); | |
| 873 | 28 | return RoundDown(x*tenth+0.5)/tenth; | |
| 874 | } | ||
| 875 | |||
| 876 | //////////////////////////////////////// | ||
| 877 | |||
| 878 | |||
| 879 | /// @brief 8-bit integer values print to std::ostreams as characters. | ||
| 880 | /// Cast them so that they print as integers instead. | ||
| 881 | template<typename T> | ||
| 882 | inline auto PrintCast(const T& val) -> typename std::enable_if<!std::is_same<T, int8_t>::value | ||
| 883 | && !std::is_same<T, uint8_t>::value, const T&>::type { return val; } | ||
| 884 | inline int32_t PrintCast(int8_t val) { return int32_t(val); } | ||
| 885 | inline uint32_t PrintCast(uint8_t val) { return uint32_t(val); } | ||
| 886 | |||
| 887 | |||
| 888 | //////////////////////////////////////// | ||
| 889 | |||
| 890 | |||
| 891 | /// Return the inverse of @a x. | ||
| 892 | template<typename Type> | ||
| 893 | inline Type | ||
| 894 | Inv(Type x) | ||
| 895 | { | ||
| 896 | assert(x); | ||
| 897 | return Type(1)/x; | ||
| 898 | } | ||
| 899 | |||
| 900 | |||
| 901 | enum Axis { | ||
| 902 | X_AXIS = 0, | ||
| 903 | Y_AXIS = 1, | ||
| 904 | Z_AXIS = 2 | ||
| 905 | }; | ||
| 906 | |||
| 907 | // enum values are consistent with their historical mx analogs. | ||
| 908 | enum RotationOrder { | ||
| 909 | XYZ_ROTATION = 0, | ||
| 910 | XZY_ROTATION, | ||
| 911 | YXZ_ROTATION, | ||
| 912 | YZX_ROTATION, | ||
| 913 | ZXY_ROTATION, | ||
| 914 | ZYX_ROTATION, | ||
| 915 | XZX_ROTATION, | ||
| 916 | ZXZ_ROTATION | ||
| 917 | }; | ||
| 918 | |||
| 919 | |||
| 920 | template <typename S, typename T> | ||
| 921 | struct promote { | ||
| 922 | using type = typename boost::numeric::conversion_traits<S, T>::supertype; | ||
| 923 | }; | ||
| 924 | |||
| 925 | /// @brief Return the index [0,1,2] of the smallest value in a 3D vector. | ||
| 926 | /// @note This methods assumes operator[] exists. | ||
| 927 | /// @details The return value corresponds to the largest index of the of | ||
| 928 | /// the smallest vector components. | ||
| 929 | template<typename Vec3T> | ||
| 930 | size_t | ||
| 931 | 11774755 | MinIndex(const Vec3T& v) | |
| 932 | { | ||
| 933 | size_t r = 0; | ||
| 934 |
2/2✓ Branch 0 taken 23549510 times.
✓ Branch 1 taken 11774755 times.
|
35324265 | for (size_t i = 1; i < 3; ++i) { |
| 935 | // largest index (backwards compatibility) | ||
| 936 |
2/2✓ Branch 0 taken 22264084 times.
✓ Branch 1 taken 1285426 times.
|
23549510 | if (v[i] <= v[r]) r = i; |
| 937 | } | ||
| 938 | 11774755 | return r; | |
| 939 | } | ||
| 940 | |||
| 941 | /// @brief Return the index [0,1,2] of the largest value in a 3D vector. | ||
| 942 | /// @note This methods assumes operator[] exists. | ||
| 943 | /// @details The return value corresponds to the largest index of the of | ||
| 944 | /// the largest vector components. | ||
| 945 | template<typename Vec3T> | ||
| 946 | size_t | ||
| 947 | 67493 | MaxIndex(const Vec3T& v) | |
| 948 | { | ||
| 949 | size_t r = 0; | ||
| 950 |
2/2✓ Branch 0 taken 134986 times.
✓ Branch 1 taken 67493 times.
|
202479 | for (size_t i = 1; i < 3; ++i) { |
| 951 | // largest index (backwards compatibility) | ||
| 952 |
2/2✓ Branch 0 taken 39499 times.
✓ Branch 1 taken 95487 times.
|
134986 | if (v[i] >= v[r]) r = i; |
| 953 | } | ||
| 954 | 67493 | return r; | |
| 955 | } | ||
| 956 | |||
| 957 | } // namespace math | ||
| 958 | } // namespace OPENVDB_VERSION_NAME | ||
| 959 | } // namespace openvdb | ||
| 960 | |||
| 961 | #endif // OPENVDB_MATH_MATH_HAS_BEEN_INCLUDED | ||
| 962 |