summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2016-01-28 18:34:20 -0800
committerAlon Zakai <alonzakai@gmail.com>2016-02-02 19:20:44 -0800
commitd467c8f522d7ed8e495b548a753b5f599f7778fa (patch)
tree4d077f875bdd6e8be476d215c5e44f591096c4e9 /src
parentedc07c0cb8e66f8ca33de759b02cf1d3171b5df9 (diff)
downloadbinaryen-d467c8f522d7ed8e495b548a753b5f599f7778fa.tar.gz
binaryen-d467c8f522d7ed8e495b548a753b5f599f7778fa.tar.bz2
binaryen-d467c8f522d7ed8e495b548a753b5f599f7778fa.zip
in assert tests, verify nans are identical
Diffstat (limited to 'src')
-rw-r--r--src/binaryen-shell.cpp17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/binaryen-shell.cpp b/src/binaryen-shell.cpp
index 58815f94a..f969eeb9e 100644
--- a/src/binaryen-shell.cpp
+++ b/src/binaryen-shell.cpp
@@ -175,6 +175,19 @@ struct Invocation {
}
};
+static void verify_result(Literal a, Literal b) {
+ if (a == b) return;
+ // accept equal nans if equal in all bits
+ assert(a.type == b.type);
+ if (a.type == f32) {
+ assert(a.reinterpreti32() == b.reinterpreti32());
+ } else if (a.type == f64) {
+ assert(a.reinterpreti64() == b.reinterpreti64());
+ } else {
+ abort();
+ }
+}
+
static void run_asserts(size_t* i, bool* checked, AllocatingModule* wasm,
Element* root,
std::unique_ptr<SExpressionWasmBuilder>* builder,
@@ -251,11 +264,11 @@ static void run_asserts(size_t* i, bool* checked, AllocatingModule* wasm,
->dyn_cast<Const>()
->value;
std::cerr << "seen " << result << ", expected " << expected << '\n';
- assert(expected == result);
+ verify_result(expected, result);
} else {
Literal expected;
std::cerr << "seen " << result << ", expected " << expected << '\n';
- assert(expected == result);
+ verify_result(expected, result);
}
}
if (id == ASSERT_TRAP) assert(trapped);