Skip to content

Commit

Permalink
Fix some test262
Browse files Browse the repository at this point in the history
  • Loading branch information
hansl committed Dec 13, 2024
1 parent 3201f37 commit 3820f5f
Show file tree
Hide file tree
Showing 2 changed files with 94 additions and 9 deletions.
92 changes: 92 additions & 0 deletions core/engine/src/builtins/array/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -268,6 +268,13 @@ fn index_of() {
var one = ["a"];
var many = ["a", "b", "c"];
var duplicates = ["a", "b", "c", "a", "b"];
var typed_i32 = new Int32Array([42, 43]);
var obj = {
valueOf: function() {
return 1;
}
};
"#}),
// Empty
TestAction::assert_eq("[].indexOf('a')", -1),
Expand Down Expand Up @@ -299,6 +306,24 @@ fn index_of() {
TestAction::assert_eq("many.indexOf('c', -1)", 2),
// Negative fromIndex with duplicates
TestAction::assert_eq("duplicates.indexOf('b', -2)", 4),
// Typed arrays
// Test cases from test262/test/built-ins/TypedArray/prototype/lastIndexOf/tointeger-fromindex.js
TestAction::assert_eq("typed_i32.lastIndexOf(42, '1')", 0),
TestAction::assert_eq("typed_i32.lastIndexOf(43, '1')", 1),
TestAction::assert_eq("typed_i32.lastIndexOf(42, true)", 0),
TestAction::assert_eq("typed_i32.lastIndexOf(43, true)", 1),
TestAction::assert_eq("typed_i32.lastIndexOf(42, false)", 0),
TestAction::assert_eq("typed_i32.lastIndexOf(43, false)", -1),
TestAction::assert_eq("typed_i32.lastIndexOf(42, NaN)", 0),
TestAction::assert_eq("typed_i32.lastIndexOf(43, NaN)", -1),
TestAction::assert_eq("typed_i32.lastIndexOf(42, null)", 0),
TestAction::assert_eq("typed_i32.lastIndexOf(43, null)", -1),
TestAction::assert_eq("typed_i32.lastIndexOf(42, undefined)", 0),
TestAction::assert_eq("typed_i32.lastIndexOf(43, undefined)", -1),
TestAction::assert_eq("typed_i32.lastIndexOf(42, null)", 0),
TestAction::assert_eq("typed_i32.lastIndexOf(43, null)", -1),
TestAction::assert_eq("typed_i32.lastIndexOf(42, obj)", 0),
TestAction::assert_eq("typed_i32.lastIndexOf(43, obj)", 1),
]);
}

Expand All @@ -309,6 +334,12 @@ fn last_index_of() {
var one = ["a"];
var many = ["a", "b", "c"];
var duplicates = ["a", "b", "c", "a", "b"];
var typed_f32 = new Float32Array([2, 1, 2, 3]);
var typed_f64 = new Float64Array([2, 1, 2, 3]);
var typed_u32 = new Uint32Array([2, 1, 2, 3]);
var typed_u8 = new Uint8Array([2, 1, 2, 3]);
var typed_i32 = new Int32Array([2, 1, 2, 3]);
var typed_i8 = new Int8Array([2, 1, 2, 3]);
"#}),
// Empty
TestAction::assert_eq("[].lastIndexOf('a')", -1),
Expand Down Expand Up @@ -340,6 +371,67 @@ fn last_index_of() {
TestAction::assert_eq("many.lastIndexOf('c', -1)", 2),
// Negative fromIndex with duplicates
TestAction::assert_eq("duplicates.lastIndexOf('b', -2)", 1),
// Typed arrays
// F32
TestAction::assert_eq("typed_f32.lastIndexOf(2)", 2),
TestAction::assert_eq("typed_f32.lastIndexOf(2, 0)", 0),
TestAction::assert_eq("typed_f32.lastIndexOf(2, -1)", 2),
TestAction::assert_eq("typed_f32.lastIndexOf(2, -3)", 0),
TestAction::assert_eq("typed_f32.lastIndexOf(2, -4)", 0),
TestAction::assert_eq("typed_f32.lastIndexOf(2, -5)", -1),
TestAction::assert_eq("typed_f32.lastIndexOf(4)", -1),
TestAction::assert_eq("typed_f32.lastIndexOf(4, -4)", -1),
TestAction::assert_eq("typed_f32.lastIndexOf(4, -5)", -1),
// F64
TestAction::assert_eq("typed_f64.lastIndexOf(2)", 2),
TestAction::assert_eq("typed_f64.lastIndexOf(2, 0)", 0),
TestAction::assert_eq("typed_f64.lastIndexOf(2, -1)", 2),
TestAction::assert_eq("typed_f64.lastIndexOf(2, -3)", 0),
TestAction::assert_eq("typed_f64.lastIndexOf(2, -4)", 0),
TestAction::assert_eq("typed_f64.lastIndexOf(2, -5)", -1),
TestAction::assert_eq("typed_f64.lastIndexOf(4)", -1),
TestAction::assert_eq("typed_f64.lastIndexOf(4, -4)", -1),
TestAction::assert_eq("typed_f64.lastIndexOf(4, -5)", -1),
// U32
TestAction::assert_eq("typed_u32.lastIndexOf(2)", 2),
TestAction::assert_eq("typed_u32.lastIndexOf(2, 0)", 0),
TestAction::assert_eq("typed_u32.lastIndexOf(2, -1)", 2),
TestAction::assert_eq("typed_u32.lastIndexOf(2, -3)", 0),
TestAction::assert_eq("typed_u32.lastIndexOf(2, -4)", 0),
TestAction::assert_eq("typed_u32.lastIndexOf(2, -5)", -1),
TestAction::assert_eq("typed_u32.lastIndexOf(4)", -1),
TestAction::assert_eq("typed_u32.lastIndexOf(4, -4)", -1),
TestAction::assert_eq("typed_u32.lastIndexOf(4, -5)", -1),
// U8
TestAction::assert_eq("typed_u8.lastIndexOf(2)", 2),
TestAction::assert_eq("typed_u8.lastIndexOf(2, 0)", 0),
TestAction::assert_eq("typed_u8.lastIndexOf(2, -1)", 2),
TestAction::assert_eq("typed_u8.lastIndexOf(2, -3)", 0),
TestAction::assert_eq("typed_u8.lastIndexOf(2, -4)", 0),
TestAction::assert_eq("typed_u8.lastIndexOf(2, -5)", -1),
TestAction::assert_eq("typed_u8.lastIndexOf(4)", -1),
TestAction::assert_eq("typed_u8.lastIndexOf(4, -4)", -1),
TestAction::assert_eq("typed_u8.lastIndexOf(4, -5)", -1),
// I32
TestAction::assert_eq("typed_i32.lastIndexOf(2)", 2),
TestAction::assert_eq("typed_i32.lastIndexOf(2, 0)", 0),
TestAction::assert_eq("typed_i32.lastIndexOf(2, -1)", 2),
TestAction::assert_eq("typed_i32.lastIndexOf(2, -3)", 0),
TestAction::assert_eq("typed_i32.lastIndexOf(2, -4)", 0),
TestAction::assert_eq("typed_i32.lastIndexOf(2, -5)", -1),
TestAction::assert_eq("typed_i32.lastIndexOf(4)", -1),
TestAction::assert_eq("typed_i32.lastIndexOf(4, -4)", -1),
TestAction::assert_eq("typed_i32.lastIndexOf(4, -5)", -1),
// I8
TestAction::assert_eq("typed_i8.lastIndexOf(2)", 2),
TestAction::assert_eq("typed_i8.lastIndexOf(2, 0)", 0),
TestAction::assert_eq("typed_i8.lastIndexOf(2, -1)", 2),
TestAction::assert_eq("typed_i8.lastIndexOf(2, -3)", 0),
TestAction::assert_eq("typed_i8.lastIndexOf(2, -4)", 0),
TestAction::assert_eq("typed_i8.lastIndexOf(2, -5)", -1),
TestAction::assert_eq("typed_i8.lastIndexOf(4)", -1),
TestAction::assert_eq("typed_i8.lastIndexOf(4, -4)", -1),
TestAction::assert_eq("typed_i8.lastIndexOf(4, -5)", -1),
]);
}

Expand Down
11 changes: 2 additions & 9 deletions core/engine/src/builtins/typed_array/builtin.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1284,18 +1284,11 @@ impl BuiltinTypedArray {
IntegerOrInfinity::NegativeInfinity => return Ok((-1).into()),
// 7. If n ≥ 0, then
// a. Let k be min(n, len - 1).
IntegerOrInfinity::Integer(i) if i >= 0 => {
if i < usize::MAX as i64 {
min(i as usize + 1, len)
} else {
len
}
}
IntegerOrInfinity::Integer(i) if i >= 0 => min((i + 1) as usize, len),
IntegerOrInfinity::PositiveInfinity => len,
// 8. Else,
// a. Let k be len + n.
IntegerOrInfinity::Integer(i) if i < isize::MIN as i64 => 0,
IntegerOrInfinity::Integer(i) => len.saturating_add_signed(i as isize + 1),
IntegerOrInfinity::Integer(i) => len.saturating_add_signed((i + 1) as isize),
}
}
};
Expand Down

0 comments on commit 3820f5f

Please sign in to comment.