
Previously, the relational operators where casting any value to double and comparing the results according to C++ semantics. This patch makes the relational operators in JS behave according to the standard specification. Since we don't have BigInt yet, the implementation doesn't take it into account. Moved PreferredType from Object to Value. Value::to_primitive now passes preferred_type to Object::to_primitive.
531 lines
20 KiB
JavaScript
531 lines
20 KiB
JavaScript
load("test-common.js");
|
|
|
|
try {
|
|
const vals = [
|
|
1,
|
|
2,
|
|
[],
|
|
[1],
|
|
[2],
|
|
[1, 2],
|
|
"foo",
|
|
"fooo",
|
|
"🔥",
|
|
"❤️",
|
|
"bar",
|
|
{},
|
|
{ a: 1 },
|
|
{ a: 2 },
|
|
{ b: 1 },
|
|
true,
|
|
false,
|
|
undefined,
|
|
null,
|
|
NaN,
|
|
+Infinity,
|
|
-Infinity,
|
|
];
|
|
|
|
// Each row contains: x_index, y_index, (x < y), (x > y), (x <= y), (x >= y)
|
|
// where x = vals[x_index], y = vals[y_index]
|
|
const table = [
|
|
[0, 0, false, false, true, true],
|
|
[0, 1, true, false, true, false],
|
|
[0, 2, false, true, false, true],
|
|
[0, 3, false, false, true, true],
|
|
[0, 4, true, false, true, false],
|
|
[0, 5, false, false, false, false],
|
|
[0, 6, false, false, false, false],
|
|
[0, 7, false, false, false, false],
|
|
[0, 8, false, false, false, false],
|
|
[0, 9, false, false, false, false],
|
|
[0, 10, false, false, false, false],
|
|
[0, 11, false, false, false, false],
|
|
[0, 12, false, false, false, false],
|
|
[0, 13, false, false, false, false],
|
|
[0, 14, false, false, false, false],
|
|
[0, 15, false, false, true, true],
|
|
[0, 16, false, true, false, true],
|
|
[0, 17, false, false, false, false],
|
|
[0, 18, false, true, false, true],
|
|
[0, 19, false, false, false, false],
|
|
[0, 20, true, false, true, false],
|
|
[0, 21, false, true, false, true],
|
|
[1, 0, false, true, false, true],
|
|
[1, 1, false, false, true, true],
|
|
[1, 2, false, true, false, true],
|
|
[1, 3, false, true, false, true],
|
|
[1, 4, false, false, true, true],
|
|
[1, 5, false, false, false, false],
|
|
[1, 6, false, false, false, false],
|
|
[1, 7, false, false, false, false],
|
|
[1, 8, false, false, false, false],
|
|
[1, 9, false, false, false, false],
|
|
[1, 10, false, false, false, false],
|
|
[1, 11, false, false, false, false],
|
|
[1, 12, false, false, false, false],
|
|
[1, 13, false, false, false, false],
|
|
[1, 14, false, false, false, false],
|
|
[1, 15, false, true, false, true],
|
|
[1, 16, false, true, false, true],
|
|
[1, 17, false, false, false, false],
|
|
[1, 18, false, true, false, true],
|
|
[1, 19, false, false, false, false],
|
|
[1, 20, true, false, true, false],
|
|
[1, 21, false, true, false, true],
|
|
[2, 0, true, false, true, false],
|
|
[2, 1, true, false, true, false],
|
|
[2, 2, false, false, true, true],
|
|
[2, 3, true, false, true, false],
|
|
[2, 4, true, false, true, false],
|
|
[2, 5, true, false, true, false],
|
|
[2, 6, true, false, true, false],
|
|
[2, 7, true, false, true, false],
|
|
[2, 8, true, false, true, false],
|
|
[2, 9, true, false, true, false],
|
|
[2, 10, true, false, true, false],
|
|
[2, 11, true, false, true, false],
|
|
[2, 12, true, false, true, false],
|
|
[2, 13, true, false, true, false],
|
|
[2, 14, true, false, true, false],
|
|
[2, 15, true, false, true, false],
|
|
[2, 16, false, false, true, true],
|
|
[2, 17, false, false, false, false],
|
|
[2, 18, false, false, true, true],
|
|
[2, 19, false, false, false, false],
|
|
[2, 20, true, false, true, false],
|
|
[2, 21, false, true, false, true],
|
|
[3, 0, false, false, true, true],
|
|
[3, 1, true, false, true, false],
|
|
[3, 2, false, true, false, true],
|
|
[3, 3, false, false, true, true],
|
|
[3, 4, true, false, true, false],
|
|
[3, 5, true, false, true, false],
|
|
[3, 6, true, false, true, false],
|
|
[3, 7, true, false, true, false],
|
|
[3, 8, true, false, true, false],
|
|
[3, 9, true, false, true, false],
|
|
[3, 10, true, false, true, false],
|
|
[3, 11, true, false, true, false],
|
|
[3, 12, true, false, true, false],
|
|
[3, 13, true, false, true, false],
|
|
[3, 14, true, false, true, false],
|
|
[3, 15, false, false, true, true],
|
|
[3, 16, false, true, false, true],
|
|
[3, 17, false, false, false, false],
|
|
[3, 18, false, true, false, true],
|
|
[3, 19, false, false, false, false],
|
|
[3, 20, true, false, true, false],
|
|
[3, 21, false, true, false, true],
|
|
[4, 0, false, true, false, true],
|
|
[4, 1, false, false, true, true],
|
|
[4, 2, false, true, false, true],
|
|
[4, 3, false, true, false, true],
|
|
[4, 4, false, false, true, true],
|
|
[4, 5, false, true, false, true],
|
|
[4, 6, true, false, true, false],
|
|
[4, 7, true, false, true, false],
|
|
[4, 8, true, false, true, false],
|
|
[4, 9, true, false, true, false],
|
|
[4, 10, true, false, true, false],
|
|
[4, 11, true, false, true, false],
|
|
[4, 12, true, false, true, false],
|
|
[4, 13, true, false, true, false],
|
|
[4, 14, true, false, true, false],
|
|
[4, 15, false, true, false, true],
|
|
[4, 16, false, true, false, true],
|
|
[4, 17, false, false, false, false],
|
|
[4, 18, false, true, false, true],
|
|
[4, 19, false, false, false, false],
|
|
[4, 20, true, false, true, false],
|
|
[4, 21, false, true, false, true],
|
|
[5, 0, false, false, false, false],
|
|
[5, 1, false, false, false, false],
|
|
[5, 2, false, true, false, true],
|
|
[5, 3, false, true, false, true],
|
|
[5, 4, true, false, true, false],
|
|
[5, 5, false, false, true, true],
|
|
[5, 6, true, false, true, false],
|
|
[5, 7, true, false, true, false],
|
|
[5, 8, true, false, true, false],
|
|
[5, 9, true, false, true, false],
|
|
[5, 10, true, false, true, false],
|
|
[5, 11, true, false, true, false],
|
|
[5, 12, true, false, true, false],
|
|
[5, 13, true, false, true, false],
|
|
[5, 14, true, false, true, false],
|
|
[5, 15, false, false, false, false],
|
|
[5, 16, false, false, false, false],
|
|
[5, 17, false, false, false, false],
|
|
[5, 18, false, false, false, false],
|
|
[5, 19, false, false, false, false],
|
|
[5, 20, false, false, false, false],
|
|
[5, 21, false, false, false, false],
|
|
[6, 0, false, false, false, false],
|
|
[6, 1, false, false, false, false],
|
|
[6, 2, false, true, false, true],
|
|
[6, 3, false, true, false, true],
|
|
[6, 4, false, true, false, true],
|
|
[6, 5, false, true, false, true],
|
|
[6, 6, false, false, true, true],
|
|
[6, 7, true, false, true, false],
|
|
[6, 8, true, false, true, false],
|
|
[6, 9, true, false, true, false],
|
|
[6, 10, false, true, false, true],
|
|
[6, 11, false, true, false, true],
|
|
[6, 12, false, true, false, true],
|
|
[6, 13, false, true, false, true],
|
|
[6, 14, false, true, false, true],
|
|
[6, 15, false, false, false, false],
|
|
[6, 16, false, false, false, false],
|
|
[6, 17, false, false, false, false],
|
|
[6, 18, false, false, false, false],
|
|
[6, 19, false, false, false, false],
|
|
[6, 20, false, false, false, false],
|
|
[6, 21, false, false, false, false],
|
|
[7, 0, false, false, false, false],
|
|
[7, 1, false, false, false, false],
|
|
[7, 2, false, true, false, true],
|
|
[7, 3, false, true, false, true],
|
|
[7, 4, false, true, false, true],
|
|
[7, 5, false, true, false, true],
|
|
[7, 6, false, true, false, true],
|
|
[7, 7, false, false, true, true],
|
|
[7, 8, true, false, true, false],
|
|
[7, 9, true, false, true, false],
|
|
[7, 10, false, true, false, true],
|
|
[7, 11, false, true, false, true],
|
|
[7, 12, false, true, false, true],
|
|
[7, 13, false, true, false, true],
|
|
[7, 14, false, true, false, true],
|
|
[7, 15, false, false, false, false],
|
|
[7, 16, false, false, false, false],
|
|
[7, 17, false, false, false, false],
|
|
[7, 18, false, false, false, false],
|
|
[7, 19, false, false, false, false],
|
|
[7, 20, false, false, false, false],
|
|
[7, 21, false, false, false, false],
|
|
[8, 0, false, false, false, false],
|
|
[8, 1, false, false, false, false],
|
|
[8, 2, false, true, false, true],
|
|
[8, 3, false, true, false, true],
|
|
[8, 4, false, true, false, true],
|
|
[8, 5, false, true, false, true],
|
|
[8, 6, false, true, false, true],
|
|
[8, 7, false, true, false, true],
|
|
[8, 8, false, false, true, true],
|
|
[8, 9, false, true, false, true],
|
|
[8, 10, false, true, false, true],
|
|
[8, 11, false, true, false, true],
|
|
[8, 12, false, true, false, true],
|
|
[8, 13, false, true, false, true],
|
|
[8, 14, false, true, false, true],
|
|
[8, 15, false, false, false, false],
|
|
[8, 16, false, false, false, false],
|
|
[8, 17, false, false, false, false],
|
|
[8, 18, false, false, false, false],
|
|
[8, 19, false, false, false, false],
|
|
[8, 20, false, false, false, false],
|
|
[8, 21, false, false, false, false],
|
|
[9, 0, false, false, false, false],
|
|
[9, 1, false, false, false, false],
|
|
[9, 2, false, true, false, true],
|
|
[9, 3, false, true, false, true],
|
|
[9, 4, false, true, false, true],
|
|
[9, 5, false, true, false, true],
|
|
[9, 6, false, true, false, true],
|
|
[9, 7, false, true, false, true],
|
|
[9, 8, true, false, true, false],
|
|
[9, 9, false, false, true, true],
|
|
[9, 10, false, true, false, true],
|
|
[9, 11, false, true, false, true],
|
|
[9, 12, false, true, false, true],
|
|
[9, 13, false, true, false, true],
|
|
[9, 14, false, true, false, true],
|
|
[9, 15, false, false, false, false],
|
|
[9, 16, false, false, false, false],
|
|
[9, 17, false, false, false, false],
|
|
[9, 18, false, false, false, false],
|
|
[9, 19, false, false, false, false],
|
|
[9, 20, false, false, false, false],
|
|
[9, 21, false, false, false, false],
|
|
[10, 0, false, false, false, false],
|
|
[10, 1, false, false, false, false],
|
|
[10, 2, false, true, false, true],
|
|
[10, 3, false, true, false, true],
|
|
[10, 4, false, true, false, true],
|
|
[10, 5, false, true, false, true],
|
|
[10, 6, true, false, true, false],
|
|
[10, 7, true, false, true, false],
|
|
[10, 8, true, false, true, false],
|
|
[10, 9, true, false, true, false],
|
|
[10, 10, false, false, true, true],
|
|
[10, 11, false, true, false, true],
|
|
[10, 12, false, true, false, true],
|
|
[10, 13, false, true, false, true],
|
|
[10, 14, false, true, false, true],
|
|
[10, 15, false, false, false, false],
|
|
[10, 16, false, false, false, false],
|
|
[10, 17, false, false, false, false],
|
|
[10, 18, false, false, false, false],
|
|
[10, 19, false, false, false, false],
|
|
[10, 20, false, false, false, false],
|
|
[10, 21, false, false, false, false],
|
|
[11, 0, false, false, false, false],
|
|
[11, 1, false, false, false, false],
|
|
[11, 2, false, true, false, true],
|
|
[11, 3, false, true, false, true],
|
|
[11, 4, false, true, false, true],
|
|
[11, 5, false, true, false, true],
|
|
[11, 6, true, false, true, false],
|
|
[11, 7, true, false, true, false],
|
|
[11, 8, true, false, true, false],
|
|
[11, 9, true, false, true, false],
|
|
[11, 10, true, false, true, false],
|
|
[11, 11, false, false, true, true],
|
|
[11, 12, false, false, true, true],
|
|
[11, 13, false, false, true, true],
|
|
[11, 14, false, false, true, true],
|
|
[11, 15, false, false, false, false],
|
|
[11, 16, false, false, false, false],
|
|
[11, 17, false, false, false, false],
|
|
[11, 18, false, false, false, false],
|
|
[11, 19, false, false, false, false],
|
|
[11, 20, false, false, false, false],
|
|
[11, 21, false, false, false, false],
|
|
[12, 0, false, false, false, false],
|
|
[12, 1, false, false, false, false],
|
|
[12, 2, false, true, false, true],
|
|
[12, 3, false, true, false, true],
|
|
[12, 4, false, true, false, true],
|
|
[12, 5, false, true, false, true],
|
|
[12, 6, true, false, true, false],
|
|
[12, 7, true, false, true, false],
|
|
[12, 8, true, false, true, false],
|
|
[12, 9, true, false, true, false],
|
|
[12, 10, true, false, true, false],
|
|
[12, 11, false, false, true, true],
|
|
[12, 12, false, false, true, true],
|
|
[12, 13, false, false, true, true],
|
|
[12, 14, false, false, true, true],
|
|
[12, 15, false, false, false, false],
|
|
[12, 16, false, false, false, false],
|
|
[12, 17, false, false, false, false],
|
|
[12, 18, false, false, false, false],
|
|
[12, 19, false, false, false, false],
|
|
[12, 20, false, false, false, false],
|
|
[12, 21, false, false, false, false],
|
|
[13, 0, false, false, false, false],
|
|
[13, 1, false, false, false, false],
|
|
[13, 2, false, true, false, true],
|
|
[13, 3, false, true, false, true],
|
|
[13, 4, false, true, false, true],
|
|
[13, 5, false, true, false, true],
|
|
[13, 6, true, false, true, false],
|
|
[13, 7, true, false, true, false],
|
|
[13, 8, true, false, true, false],
|
|
[13, 9, true, false, true, false],
|
|
[13, 10, true, false, true, false],
|
|
[13, 11, false, false, true, true],
|
|
[13, 12, false, false, true, true],
|
|
[13, 13, false, false, true, true],
|
|
[13, 14, false, false, true, true],
|
|
[13, 15, false, false, false, false],
|
|
[13, 16, false, false, false, false],
|
|
[13, 17, false, false, false, false],
|
|
[13, 18, false, false, false, false],
|
|
[13, 19, false, false, false, false],
|
|
[13, 20, false, false, false, false],
|
|
[13, 21, false, false, false, false],
|
|
[14, 0, false, false, false, false],
|
|
[14, 1, false, false, false, false],
|
|
[14, 2, false, true, false, true],
|
|
[14, 3, false, true, false, true],
|
|
[14, 4, false, true, false, true],
|
|
[14, 5, false, true, false, true],
|
|
[14, 6, true, false, true, false],
|
|
[14, 7, true, false, true, false],
|
|
[14, 8, true, false, true, false],
|
|
[14, 9, true, false, true, false],
|
|
[14, 10, true, false, true, false],
|
|
[14, 11, false, false, true, true],
|
|
[14, 12, false, false, true, true],
|
|
[14, 13, false, false, true, true],
|
|
[14, 14, false, false, true, true],
|
|
[14, 15, false, false, false, false],
|
|
[14, 16, false, false, false, false],
|
|
[14, 17, false, false, false, false],
|
|
[14, 18, false, false, false, false],
|
|
[14, 19, false, false, false, false],
|
|
[14, 20, false, false, false, false],
|
|
[14, 21, false, false, false, false],
|
|
[15, 0, false, false, true, true],
|
|
[15, 1, true, false, true, false],
|
|
[15, 2, false, true, false, true],
|
|
[15, 3, false, false, true, true],
|
|
[15, 4, true, false, true, false],
|
|
[15, 5, false, false, false, false],
|
|
[15, 6, false, false, false, false],
|
|
[15, 7, false, false, false, false],
|
|
[15, 8, false, false, false, false],
|
|
[15, 9, false, false, false, false],
|
|
[15, 10, false, false, false, false],
|
|
[15, 11, false, false, false, false],
|
|
[15, 12, false, false, false, false],
|
|
[15, 13, false, false, false, false],
|
|
[15, 14, false, false, false, false],
|
|
[15, 15, false, false, true, true],
|
|
[15, 16, false, true, false, true],
|
|
[15, 17, false, false, false, false],
|
|
[15, 18, false, true, false, true],
|
|
[15, 19, false, false, false, false],
|
|
[15, 20, true, false, true, false],
|
|
[15, 21, false, true, false, true],
|
|
[16, 0, true, false, true, false],
|
|
[16, 1, true, false, true, false],
|
|
[16, 2, false, false, true, true],
|
|
[16, 3, true, false, true, false],
|
|
[16, 4, true, false, true, false],
|
|
[16, 5, false, false, false, false],
|
|
[16, 6, false, false, false, false],
|
|
[16, 7, false, false, false, false],
|
|
[16, 8, false, false, false, false],
|
|
[16, 9, false, false, false, false],
|
|
[16, 10, false, false, false, false],
|
|
[16, 11, false, false, false, false],
|
|
[16, 12, false, false, false, false],
|
|
[16, 13, false, false, false, false],
|
|
[16, 14, false, false, false, false],
|
|
[16, 15, true, false, true, false],
|
|
[16, 16, false, false, true, true],
|
|
[16, 17, false, false, false, false],
|
|
[16, 18, false, false, true, true],
|
|
[16, 19, false, false, false, false],
|
|
[16, 20, true, false, true, false],
|
|
[16, 21, false, true, false, true],
|
|
[17, 0, false, false, false, false],
|
|
[17, 1, false, false, false, false],
|
|
[17, 2, false, false, false, false],
|
|
[17, 3, false, false, false, false],
|
|
[17, 4, false, false, false, false],
|
|
[17, 5, false, false, false, false],
|
|
[17, 6, false, false, false, false],
|
|
[17, 7, false, false, false, false],
|
|
[17, 8, false, false, false, false],
|
|
[17, 9, false, false, false, false],
|
|
[17, 10, false, false, false, false],
|
|
[17, 11, false, false, false, false],
|
|
[17, 12, false, false, false, false],
|
|
[17, 13, false, false, false, false],
|
|
[17, 14, false, false, false, false],
|
|
[17, 15, false, false, false, false],
|
|
[17, 16, false, false, false, false],
|
|
[17, 17, false, false, false, false],
|
|
[17, 18, false, false, false, false],
|
|
[17, 19, false, false, false, false],
|
|
[17, 20, false, false, false, false],
|
|
[17, 21, false, false, false, false],
|
|
[18, 0, true, false, true, false],
|
|
[18, 1, true, false, true, false],
|
|
[18, 2, false, false, true, true],
|
|
[18, 3, true, false, true, false],
|
|
[18, 4, true, false, true, false],
|
|
[18, 5, false, false, false, false],
|
|
[18, 6, false, false, false, false],
|
|
[18, 7, false, false, false, false],
|
|
[18, 8, false, false, false, false],
|
|
[18, 9, false, false, false, false],
|
|
[18, 10, false, false, false, false],
|
|
[18, 11, false, false, false, false],
|
|
[18, 12, false, false, false, false],
|
|
[18, 13, false, false, false, false],
|
|
[18, 14, false, false, false, false],
|
|
[18, 15, true, false, true, false],
|
|
[18, 16, false, false, true, true],
|
|
[18, 17, false, false, false, false],
|
|
[18, 18, false, false, true, true],
|
|
[18, 19, false, false, false, false],
|
|
[18, 20, true, false, true, false],
|
|
[18, 21, false, true, false, true],
|
|
[19, 0, false, false, false, false],
|
|
[19, 1, false, false, false, false],
|
|
[19, 2, false, false, false, false],
|
|
[19, 3, false, false, false, false],
|
|
[19, 4, false, false, false, false],
|
|
[19, 5, false, false, false, false],
|
|
[19, 6, false, false, false, false],
|
|
[19, 7, false, false, false, false],
|
|
[19, 8, false, false, false, false],
|
|
[19, 9, false, false, false, false],
|
|
[19, 10, false, false, false, false],
|
|
[19, 11, false, false, false, false],
|
|
[19, 12, false, false, false, false],
|
|
[19, 13, false, false, false, false],
|
|
[19, 14, false, false, false, false],
|
|
[19, 15, false, false, false, false],
|
|
[19, 16, false, false, false, false],
|
|
[19, 17, false, false, false, false],
|
|
[19, 18, false, false, false, false],
|
|
[19, 19, false, false, false, false],
|
|
[19, 20, false, false, false, false],
|
|
[19, 21, false, false, false, false],
|
|
[20, 0, false, true, false, true],
|
|
[20, 1, false, true, false, true],
|
|
[20, 2, false, true, false, true],
|
|
[20, 3, false, true, false, true],
|
|
[20, 4, false, true, false, true],
|
|
[20, 5, false, false, false, false],
|
|
[20, 6, false, false, false, false],
|
|
[20, 7, false, false, false, false],
|
|
[20, 8, false, false, false, false],
|
|
[20, 9, false, false, false, false],
|
|
[20, 10, false, false, false, false],
|
|
[20, 11, false, false, false, false],
|
|
[20, 12, false, false, false, false],
|
|
[20, 13, false, false, false, false],
|
|
[20, 14, false, false, false, false],
|
|
[20, 15, false, true, false, true],
|
|
[20, 16, false, true, false, true],
|
|
[20, 17, false, false, false, false],
|
|
[20, 18, false, true, false, true],
|
|
[20, 19, false, false, false, false],
|
|
[20, 20, false, false, true, true],
|
|
[20, 21, false, true, false, true],
|
|
[21, 0, true, false, true, false],
|
|
[21, 1, true, false, true, false],
|
|
[21, 2, true, false, true, false],
|
|
[21, 3, true, false, true, false],
|
|
[21, 4, true, false, true, false],
|
|
[21, 5, false, false, false, false],
|
|
[21, 6, false, false, false, false],
|
|
[21, 7, false, false, false, false],
|
|
[21, 8, false, false, false, false],
|
|
[21, 9, false, false, false, false],
|
|
[21, 10, false, false, false, false],
|
|
[21, 11, false, false, false, false],
|
|
[21, 12, false, false, false, false],
|
|
[21, 13, false, false, false, false],
|
|
[21, 14, false, false, false, false],
|
|
[21, 15, true, false, true, false],
|
|
[21, 16, true, false, true, false],
|
|
[21, 17, false, false, false, false],
|
|
[21, 18, true, false, true, false],
|
|
[21, 19, false, false, false, false],
|
|
[21, 20, true, false, true, false],
|
|
[21, 21, false, false, true, true],
|
|
];
|
|
|
|
for (let test of table) {
|
|
let x = vals[test[0]];
|
|
let y = vals[test[1]];
|
|
|
|
assert(x < y === test[2]);
|
|
assert(x > y === test[3]);
|
|
assert(x <= y === test[4]);
|
|
assert(x >= y === test[5]);
|
|
}
|
|
|
|
console.log("PASS");
|
|
} catch (e) {
|
|
console.log("FAIL: " + e);
|
|
}
|