| // Copyright 2006-2008 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "src/checks.h" |
| |
| #include "src/v8.h" |
| |
| namespace v8 { |
| namespace internal { |
| |
| intptr_t HeapObjectTagMask() { return kHeapObjectTagMask; } |
| |
| } } // namespace v8::internal |
| |
| |
| static bool CheckEqualsStrict(volatile double* exp, volatile double* val) { |
| v8::internal::DoubleRepresentation exp_rep(*exp); |
| v8::internal::DoubleRepresentation val_rep(*val); |
| if (std::isnan(exp_rep.value) && std::isnan(val_rep.value)) return true; |
| return exp_rep.bits == val_rep.bits; |
| } |
| |
| |
| void CheckEqualsHelper(const char* file, int line, const char* expected_source, |
| double expected, const char* value_source, |
| double value) { |
| // Force values to 64 bit memory to truncate 80 bit precision on IA32. |
| volatile double* exp = new double[1]; |
| *exp = expected; |
| volatile double* val = new double[1]; |
| *val = value; |
| if (!CheckEqualsStrict(exp, val)) { |
| V8_Fatal(file, line, |
| "CHECK_EQ(%s, %s) failed\n# Expected: %f\n# Found: %f", |
| expected_source, value_source, *exp, *val); |
| } |
| delete[] exp; |
| delete[] val; |
| } |
| |
| |
| void CheckNonEqualsHelper(const char* file, int line, |
| const char* expected_source, double expected, |
| const char* value_source, double value) { |
| // Force values to 64 bit memory to truncate 80 bit precision on IA32. |
| volatile double* exp = new double[1]; |
| *exp = expected; |
| volatile double* val = new double[1]; |
| *val = value; |
| if (CheckEqualsStrict(exp, val)) { |
| V8_Fatal(file, line, |
| "CHECK_EQ(%s, %s) failed\n# Expected: %f\n# Found: %f", |
| expected_source, value_source, *exp, *val); |
| } |
| delete[] exp; |
| delete[] val; |
| } |
| |
| |
| void CheckEqualsHelper(const char* file, |
| int line, |
| const char* expected_source, |
| v8::Handle<v8::Value> expected, |
| const char* value_source, |
| v8::Handle<v8::Value> value) { |
| if (!expected->Equals(value)) { |
| v8::String::Utf8Value value_str(value); |
| v8::String::Utf8Value expected_str(expected); |
| V8_Fatal(file, line, |
| "CHECK_EQ(%s, %s) failed\n# Expected: %s\n# Found: %s", |
| expected_source, value_source, *expected_str, *value_str); |
| } |
| } |
| |
| |
| void CheckNonEqualsHelper(const char* file, |
| int line, |
| const char* unexpected_source, |
| v8::Handle<v8::Value> unexpected, |
| const char* value_source, |
| v8::Handle<v8::Value> value) { |
| if (unexpected->Equals(value)) { |
| v8::String::Utf8Value value_str(value); |
| V8_Fatal(file, line, "CHECK_NE(%s, %s) failed\n# Value: %s", |
| unexpected_source, value_source, *value_str); |
| } |
| } |