import * as std from "qjs:std";
import { assert } from "./assert.js";
function makeArrayLike(length, getterIndex) {
const obj = { length };
Object.defineProperty(obj, getterIndex, {
configurable: true,
get() {
std.gc();
return 1;
},
});
return obj;
}
{
const obj = makeArrayLike(256, 0);
Object.defineProperty(obj, 1, {
value: 2,
writable: true,
configurable: true,
});
const res = Array.prototype.with.call(obj, 1, 9);
assert(res.length, 256);
assert(res[0], 1);
assert(res[1], 9);
assert(res[2], undefined);
assert(res[255], undefined);
}
{
const obj = makeArrayLike(256, 255);
const res = Array.prototype.toReversed.call(obj);
assert(res.length, 256);
assert(res[0], 1);
assert(res[1], undefined);
assert(res[255], undefined);
}
{
const obj = makeArrayLike(256, 0);
const res = Array.prototype.toSpliced.call(obj, 1, 0, 7);
assert(res.length, 257);
assert(res[0], 1);
assert(res[1], 7);
assert(res[2], undefined);
assert(res[256], undefined);
}
{
const obj = makeArrayLike(256, 0);
const res = Array.prototype.toSorted.call(obj);
assert(res.length, 256);
assert(res[0], 1);
assert(res[1], undefined);
assert(res[255], undefined);
}