function add(a, b) { return a + b; }
const mul = (a, b) => a * b;
const defaultParam = (a = 1, b = 2) => a + b;
const restParams = (...xs) => xs.length;
const destructured = ({ a, b: { c } = {} } = {}, [d, e] = [4, 5]) => a + c + d + e;
function control(n) {
let acc = 0;
for (let i = 0; i < n; i++) {
if (i % 2 === 0) acc += i;
else if (i % 3 === 0) acc -= i;
else acc ^= i;
}
let j = 0;
while (j < n) { acc += j++; }
do { acc--; } while (acc > 100);
switch (n) {
case 0: return 'zero';
case 1: case 2: return 'small';
default: return acc > 0 ? 'pos' : 'neg';
}
}
function throwing(x) {
try {
if (x < 0) throw new RangeError('negative');
return Math.sqrt(x);
} catch (e) {
return e instanceof RangeError ? -1 : -2;
} finally {
globalThis.__jscd_marker = (globalThis.__jscd_marker || 0) + 1;
}
}
class Base {
#secret = 42;
constructor(name) { this.name = name; }
get label() { return `Base(${this.name})`; }
static create(n) { return new Base(n); }
reveal() { return this.#secret; }
}
class Derived extends Base {
constructor(name, extra) { super(name); this.extra = extra; }
get label() { return super.label + '+'; }
*items() { yield this.name; yield this.extra; }
}
async function asyncFlow(v) {
const a = await Promise.resolve(v);
const b = await Promise.resolve(a + 1);
return a + b;
}
function* gen(n) { for (let i = 0; i < n; i++) yield i * i; }
async function* agen(n) { for (let i = 0; i < n; i++) yield await Promise.resolve(i); }
const strings = ['alpha', 'beta', 'gamma'];
const obj = { a: 1, 'b-c': 2, [Symbol.iterator]: null };
const nested = { deep: { deeper: { value: 3.5 } } };
const bigIntValue = 123456789012345678901234567890n;
const re = /^jscd[-_](\d+)$/gi;
function template(name, count) { return `${name}:${count}${strings.join('|')}`; }
function counterFactory(start) {
let n = start;
return { inc() { return ++n; }, get value() { return n; } };
}
const outer = 7;
const closure = (x) => (y) => x + y + outer;
function modern(o) {
const { a = 1, ...rest } = o || {};
const arr = [...strings, ...(o?.list ?? [])];
const val = o?.deep?.deeper?.value ?? 'none';
return a + arr.length + String(val).length + Object.keys(rest).length;
}
function main() {
const c = control(5);
const d = new Derived('x', 'y');
return [add(1, 2), mul(3, 4), defaultParam(), restParams(1, 2, 3),
destructured(), c, throwing(9), throwing(-1), d.label, d.reveal(),
[...gen(3)].length, template('t', 1), closure(1)(2), modern(nested),
bigIntValue.toString().length, re.source.length, strings.length, obj.a];
}
main();