import * as std from "qjs:std";
import { assert } from "./assert.js";
{
const keep = [];
for (let i = 0; i < 30; i++) {
const a = [0];
a.length = 245;
a.push(2);
keep.push(a);
}
std.gc();
for (const a of keep) {
assert(a.length, 246);
assert(a[0], 0);
assert(a[245], 2);
assert(a.hasOwnProperty(1), false);
}
}
{
const a = [0];
a.length = 245;
assert(a.push(2), 246);
assert(a.length, 246);
assert(a[0], 0);
assert(a[245], 2);
assert(1 in a, false);
assert(244 in a, false);
assert(245 in a, true);
}
{
const d = [9];
d.length = 3;
assert(d.push(7, 8), 5);
assert(d.length, 5);
assert(d[0], 9);
assert(d[3], 7);
assert(d[4], 8);
assert(1 in d, false);
assert(2 in d, false);
}
{
const objs = [];
for (let i = 0; i < 30; i++) {
const a = [{ a: 1 }, { b: 2 }, { c: 3 }, { d: 4 }, { e: 5 }];
a.length = 2;
a.length = 5;
a.push({ f: 6 });
objs.push(a);
}
std.gc();
for (const a of objs) {
assert(a.length, 6);
assert(a[0].a, 1);
assert(a[1].b, 2);
assert(2 in a, false);
assert(3 in a, false);
assert(4 in a, false);
assert(a[5].f, 6);
}
}