mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 13:17:44 +00:00
LibJS: Add %TypedArray%.prototype.entries
This commit is contained in:
parent
a6324481e1
commit
a1f3e711c0
3 changed files with 57 additions and 0 deletions
|
@ -36,6 +36,7 @@ void TypedArrayPrototype::initialize(GlobalObject& object)
|
||||||
define_native_function(vm.names.join, join, 1, attr);
|
define_native_function(vm.names.join, join, 1, attr);
|
||||||
define_native_function(vm.names.keys, keys, 0, attr);
|
define_native_function(vm.names.keys, keys, 0, attr);
|
||||||
define_native_function(vm.names.values, values, 0, attr);
|
define_native_function(vm.names.values, values, 0, attr);
|
||||||
|
define_native_function(vm.names.entries, entries, 0, attr);
|
||||||
|
|
||||||
define_native_accessor(*vm.well_known_symbol_to_string_tag(), to_string_tag_getter, nullptr, Attribute::Configurable);
|
define_native_accessor(*vm.well_known_symbol_to_string_tag(), to_string_tag_getter, nullptr, Attribute::Configurable);
|
||||||
|
|
||||||
|
@ -259,6 +260,15 @@ JS_DEFINE_NATIVE_FUNCTION(TypedArrayPrototype::values)
|
||||||
return ArrayIterator::create(global_object, typed_array, Object::PropertyKind::Value);
|
return ArrayIterator::create(global_object, typed_array, Object::PropertyKind::Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 23.2.3.6 %TypedArray%.prototype.entries ( ), https://tc39.es/ecma262/#sec-%typedarray%.prototype.entries
|
||||||
|
JS_DEFINE_NATIVE_FUNCTION(TypedArrayPrototype::entries)
|
||||||
|
{
|
||||||
|
auto typed_array = typed_array_from(vm, global_object);
|
||||||
|
if (!typed_array)
|
||||||
|
return {};
|
||||||
|
return ArrayIterator::create(global_object, typed_array, Object::PropertyKind::KeyAndValue);
|
||||||
|
}
|
||||||
|
|
||||||
// 23.2.3.1 get %TypedArray%.prototype.buffer, https://tc39.es/ecma262/#sec-get-%typedarray%.prototype.buffer
|
// 23.2.3.1 get %TypedArray%.prototype.buffer, https://tc39.es/ecma262/#sec-get-%typedarray%.prototype.buffer
|
||||||
JS_DEFINE_NATIVE_GETTER(TypedArrayPrototype::buffer_getter)
|
JS_DEFINE_NATIVE_GETTER(TypedArrayPrototype::buffer_getter)
|
||||||
{
|
{
|
||||||
|
|
|
@ -34,6 +34,7 @@ private:
|
||||||
JS_DECLARE_NATIVE_FUNCTION(join);
|
JS_DECLARE_NATIVE_FUNCTION(join);
|
||||||
JS_DECLARE_NATIVE_FUNCTION(keys);
|
JS_DECLARE_NATIVE_FUNCTION(keys);
|
||||||
JS_DECLARE_NATIVE_FUNCTION(values);
|
JS_DECLARE_NATIVE_FUNCTION(values);
|
||||||
|
JS_DECLARE_NATIVE_FUNCTION(entries);
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
const TYPED_ARRAYS = [
|
||||||
|
Uint8Array,
|
||||||
|
Uint16Array,
|
||||||
|
Uint32Array,
|
||||||
|
Int8Array,
|
||||||
|
Int16Array,
|
||||||
|
Int32Array,
|
||||||
|
Float32Array,
|
||||||
|
Float64Array,
|
||||||
|
];
|
||||||
|
|
||||||
|
const BIGINT_TYPED_ARRAYS = [BigUint64Array, BigInt64Array];
|
||||||
|
|
||||||
|
test("length is 0", () => {
|
||||||
|
TYPED_ARRAYS.forEach(T => {
|
||||||
|
expect(T.prototype.entries).toHaveLength(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
BIGINT_TYPED_ARRAYS.forEach(T => {
|
||||||
|
expect(T.prototype.entries).toHaveLength(0);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
test("basic functionality", () => {
|
||||||
|
TYPED_ARRAYS.forEach(T => {
|
||||||
|
const a = new T([30, 40, 50]);
|
||||||
|
const it = a.entries();
|
||||||
|
expect(it.next()).toEqual({ value: [0, 30], done: false });
|
||||||
|
expect(it.next()).toEqual({ value: [1, 40], done: false });
|
||||||
|
expect(it.next()).toEqual({ value: [2, 50], done: false });
|
||||||
|
expect(it.next()).toEqual({ value: undefined, done: true });
|
||||||
|
expect(it.next()).toEqual({ value: undefined, done: true });
|
||||||
|
expect(it.next()).toEqual({ value: undefined, done: true });
|
||||||
|
});
|
||||||
|
|
||||||
|
BIGINT_TYPED_ARRAYS.forEach(T => {
|
||||||
|
const a = new T([30n, 40n, 50n]);
|
||||||
|
const it = a.entries();
|
||||||
|
expect(it.next()).toEqual({ value: [0, 30n], done: false });
|
||||||
|
expect(it.next()).toEqual({ value: [1, 40n], done: false });
|
||||||
|
expect(it.next()).toEqual({ value: [2, 50n], done: false });
|
||||||
|
expect(it.next()).toEqual({ value: undefined, done: true });
|
||||||
|
expect(it.next()).toEqual({ value: undefined, done: true });
|
||||||
|
expect(it.next()).toEqual({ value: undefined, done: true });
|
||||||
|
});
|
||||||
|
});
|
Loading…
Add table
Add a link
Reference in a new issue