Skip to content

Commit 87e377f

Browse files
committed
More tests and fixes
1 parent 423dceb commit 87e377f

3 files changed

Lines changed: 530 additions & 2 deletions

File tree

include/details/xnode_builtins.h

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#define __XNODE_BUILTINS_H__
1212

1313
#include <string>
14+
#include <cmath>
1415
#include "xnode_type_ext.h"
1516

1617
/// \file xnode_builtins.h
@@ -2204,11 +2205,21 @@ class xnode_caster<bool, xnode_def_cast_policy> : xnode_caster_base {
22042205
break;
22052206
}
22062207
case xnode_type_code<float>::value: {
2207-
output = static_cast<ValueType>(xnode_get_scalar<float>(storage) != 0.0f);
2208+
float value = xnode_get_scalar<float>(storage);
2209+
if (!std::isnan(value)) {
2210+
output = static_cast<ValueType>(value != 0.0f);
2211+
} else {
2212+
result = false;
2213+
}
22082214
break;
22092215
}
22102216
case xnode_type_code<double>::value: {
2211-
output = static_cast<ValueType>(xnode_get_scalar<double>(storage) != 0.0);
2217+
double value = xnode_get_scalar<double>(storage);
2218+
if (!std::isnan(value)) {
2219+
output = static_cast<ValueType>(value != 0.0);
2220+
} else {
2221+
result = false;
2222+
}
22122223
break;
22132224
}
22142225
// -- signed integers --

test/cunit.h

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
#include <string>
1414
#include <stdexcept>
15+
#include <sstream>
1516

1617
/// \file cunit.h
1718
/// Unit testing utility functions
@@ -47,6 +48,27 @@ inline void AssertTrue(bool assertion, const std::string &message) {
4748
Assert(assertion, message);
4849
}
4950

51+
template <typename T, typename U>
52+
inline void AssertEquals(T expected, U actual, const std::string &message) {
53+
if (!(expected == actual)) {
54+
std::ostringstream oss;
55+
oss << "assertion equals failed: [" << message << "] expected: [" << expected << "] actual: [" << actual << "]";
56+
throw std::runtime_error(oss.str());
57+
}
58+
}
59+
60+
template <typename T, typename U>
61+
inline void AssertEquals(T expected, U actual, const char *message = NULL) {
62+
if (!(expected == actual)) {
63+
std::ostringstream oss;
64+
oss << "assertion equals failed: ";
65+
if (message != NULL)
66+
oss << "[" << message << "] ";
67+
oss << "expected: [" << expected << "] actual: [" << actual << "]";
68+
throw std::runtime_error(oss.str());
69+
}
70+
}
71+
5072
template <typename Func>
5173
inline void AssertThrows(Func assertion, const char *message = NULL)
5274
{

0 commit comments

Comments
 (0)