als-statistics
Version:
Modular JS statistics toolkit for Node.js and the browser: descriptive stats, correlations (Pearson/Spearman/Kendall), t-tests & ANOVA (Student/Welch), reliability (Cronbach’s alpha), regression (linear/logistic), clustering (DBSCAN/HDBSCAN), and table/co
43 lines (36 loc) • 1.82 kB
JavaScript
import test from 'node:test';
import assert from 'node:assert/strict';
import Column from '../../lib/column/index.js';
// import { insertAt } from '../../lib/column/insert-at.js';
test('Column.addValue: вставка в начало/середину/конец меняет ссылку', () => {
const c = new Column([1, 2, 4], 'C');
const oldRef = c.values;
c.addValue(3, 2); // [1,2,3,4]
c.addValue(0, 0); // [0,1,2,3,4]
c.addValue(5, 5); // [0,1,2,3,4,5] — за пределами → в конец
assert.notEqual(c.values, oldRef, 'values должен стать новым массивом');
assert.deepStrictEqual(c.values, [0, 1, 2, 3, 4, 5]);
});
test('Column.insertAt: вставка в начало/середину/конец меняет ссылку', () => {
const c = new Column([1, 2, 4], 'C');
const oldRef = c.values;
c.insertAt(2, 3); // [1,2,3,4]
c.insertAt(0, 0); // [0,1,2,3,4]
c.insertAt(5, 5); // [0,1,2,3,4,5] — за пределами → в конец
assert.notEqual(c.values, oldRef, 'values должен стать новым массивом');
assert.deepStrictEqual(c.values, [0, 1, 2, 3, 4, 5]);
});
test('Column.cache: кэш инвалидация на изменениях', () => {
const c = new Column([1, 2, 3, 4, 5], 'Z');
const m1 = c.mean;
c.values.push(100)
c.values = [...c.values];
// console.log(c.values)
const m2 = c.mean;
assert.notEqual(m1, m2);
});
test('insertAt: fallback без toSpliced не мутирует исходный массив', () => {
assert.deepEqual(new Column([1, 3]).insertAt(1,2).values, [1, 2, 3]);
assert.deepEqual(new Column([10, 30]).insertAt(-1,20).values, [20, 10, 30]);
assert.deepEqual(new Column([1]).insertAt(99,2).values, [1,2]);
});