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
67 lines (59 loc) • 2.85 kB
JavaScript
import { it, describe } from 'node:test';
import assert from 'node:assert/strict';
import SimpleTable from '../../lib/table/simple-table/index.js';
describe('SimpleTable tests', () => {
it('SimpleTable.clone: выбор колонок, независимость копии', () => {
const t = new SimpleTable({
A: [1, 2, 3],
B: [10, 20, 30],
C: [100, 200, 300],
});
const clone = t.clone('cloned', ['A', 'C']);
assert.deepEqual(clone.colNames.sort(), ['A', 'C'].sort());
// независимость:
t.columns.A[0] = 999;
assert.equal(clone.columns.A.values[0], 1);
});
it('SimpleTable.split: разрез по меткам (если поддерживается)', () => {
const t = new SimpleTable({ V: [1, 2, 3, 4, 5] }, { labels: ['odd', 'even', 'odd', 'even', 'odd'] });
const parts = t.split?.({ by: 'labels' });
if (parts) {
assert.ok(parts['odd'].columns.V.length > 0);
assert.ok(parts['even'].columns.V.length > 0);
}
});
it('htmlTable: filter-keys + transposeValues', () => {
const t = new SimpleTable({
alpha: [1, 2],
beta: [3, 4],
gamma: [5, 6],
});
const colFilter = [/^a/i, 'beta', '-alpha'] // ожидаем только beta
const html = t.htmlTable(colFilter, { transposeValues: true, });
if (html) {
assert.ok(typeof html === 'string');
assert.ok(html.includes('<table'));
assert.ok(html.toLowerCase().includes('beta'));
assert.ok(!html.toLowerCase().includes('alpha'));
}
});
it('subset по именам колонок и независимость', () => {
const t = new SimpleTable({ gender: [1, 2], age: [10, 20], income: [100, 200] });
const t2 = t.clone('new', ['gender', 'age']);
t.deleteColumn('income');
t.addRow([3, 30]);
assert.deepStrictEqual(t.colNames, ['gender', 'age']);
assert.deepStrictEqual(t2.colNames, ['gender', 'age']); // состав одинаковый
assert.strictEqual(t.n, 3);
assert.strictEqual(t2.n, 2); // но данные независимы
});
});
describe('transpose/rows/htmlTable', () => {
it('rows(true) возвращает объект с ключами имён колонок', () => {
const t = new SimpleTable({ A:[1,2], B:[10,20] });
const rows = t.rows(true); // должно отдать строки, где ключи — индексы 0..n-1? или имена колонок как поля
// Мы проверим совместимость с htmlTable: оно не должно падать и должно содержать 2 строки.
const html = t.htmlTable([], { header: 'demo' });
assert.ok(html.includes('demo'));
});
});