diff options
author | Tavian Barnes <tavianator@gmail.com> | 2012-02-06 10:11:22 -0500 |
---|---|---|
committer | Tavian Barnes <tavianator@gmail.com> | 2012-02-06 10:11:22 -0500 |
commit | 22baedd972429c03c4c4d836a11f81f646ce0c92 (patch) | |
tree | cd90704829fe2484b582e010b73c642aad34a8cb /libdimension/dimension/geometry.h | |
parent | f658e4728c53b5a772b0fcd06bd2647e35e9d59c (diff) | |
download | dimension-22baedd972429c03c4c4d836a11f81f646ce0c92.tar.xz |
Add debugging tests for NaN values.
Diffstat (limited to 'libdimension/dimension/geometry.h')
-rw-r--r-- | libdimension/dimension/geometry.h | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/libdimension/dimension/geometry.h b/libdimension/dimension/geometry.h index 80da735..38afa3b 100644 --- a/libdimension/dimension/geometry.h +++ b/libdimension/dimension/geometry.h @@ -445,3 +445,39 @@ dmnsn_bounding_box_is_infinite(dmnsn_bounding_box box) { return box.min.x == -INFINITY; } + +/** Return whether a vector contains any NaN components. */ +DMNSN_INLINE bool +dmnsn_vector_isnan(dmnsn_vector v) +{ + return isnan(v.x) || isnan(v.y) || isnan(v.z); +} + +/** Return whether a matrix contains any NaN components. */ +DMNSN_INLINE bool +dmnsn_matrix_isnan(dmnsn_matrix m) +{ + size_t i, j; + for (i = 0; i < 3; ++i) { + for (j = 0; j < 4; ++j) { + if (isnan(m.n[i][j])) { + return true; + } + } + } + return false; +} + +/** Return whether a line contains any NaN entries. */ +DMNSN_INLINE bool +dmnsn_line_isnan(dmnsn_line l) +{ + return dmnsn_vector_isnan(l.x0) || dmnsn_vector_isnan(l.n); +} + +/** Return whether a bounding box has any NaN components. */ +DMNSN_INLINE bool +dmnsn_bounding_box_isnan(dmnsn_bounding_box box) +{ + return dmnsn_vector_isnan(box.min) || dmnsn_vector_isnan(box.max); +} |