als-statistics
Version:
A powerful and lightweight JavaScript library for descriptive statistics, regression, clustering, outlier detection, and noise analysis using a flexible table/column architecture.
78 lines (70 loc) • 3.04 kB
JavaScript
const { describe, it } = require('node:test');
const assert = require('node:assert');
const ColumnFilter = require('../../lib/table/filter');
describe('ColumnFilter', () => {
it('should correctly apply filters', () => {
const filter = new ColumnFilter();
filter.filterRows([2, 3, 4]);
assert.deepStrictEqual(filter.filtered, { 2: true, 3: true, 4: true });
assert.strictEqual(filter.count, 3);
assert.strictEqual(filter.maxFilter, 4);
assert.strictEqual(filter.filterState, 1);
});
it('should correctly clear filters', () => {
const filter = new ColumnFilter();
filter.filterRows([1, 2, 3, 4, 5]);
filter.clearRowsFilters([2, 3, 4]);
assert.deepStrictEqual(filter.filtered, { 1: true, 5: true });
assert.strictEqual(filter.count, 2);
assert.strictEqual(filter.maxFilter, 5);
assert.strictEqual(filter.filterState, 2);
});
it('should reset maxFilter when clearing last filter', () => {
const filter = new ColumnFilter();
filter.filterRows([1, 2, 3]);
filter.clearRowsFilters([1, 2, 3]);
assert.deepStrictEqual(filter.filtered, {});
assert.strictEqual(filter.count, 0);
assert.strictEqual(filter.maxFilter, 0);
});
it('should not increment filterState if no new filters are added', () => {
const filter = new ColumnFilter();
filter.filterRows([2, 3, 4]);
const prevState = filter.filterState;
filter.filterRows([2, 3, 4]);
assert.strictEqual(filter.filterState, prevState);
});
it('should not change filterState if clearing non-existing filters', () => {
const filter = new ColumnFilter();
filter.filterRows([2, 3, 4]);
const prevState = filter.filterState;
filter.clearRowsFilters([6, 7, 8]);
assert.strictEqual(filter.filterState, prevState);
});
it('should clear all filters completely', () => {
const filter = new ColumnFilter();
filter.filterRows([1, 2, 3, 4]);
filter.clearAllRowsFilters();
assert.deepStrictEqual(filter.filtered, {});
assert.strictEqual(filter.count, 0);
assert.strictEqual(filter.maxFilter, 0);
assert.strictEqual(filter.filterState, 2);
});
it('should initialize filter state with init', () => {
const filter = new ColumnFilter();
filter.filterRows([1, 2, 3]);
filter.init();
assert.deepStrictEqual(filter.filtered, {});
assert.strictEqual(filter.count, 0);
assert.strictEqual(filter.maxFilter, 0);
assert.strictEqual(filter.filterState, 1); // filterState не сбрасывается в init
});
it('should reset state with init', () => {
const filter = new ColumnFilter();
filter.filterRows([1, 2]);
filter.init();
assert.strictEqual(filter.count, 0);
assert.strictEqual(filter.maxFilter, 0);
assert.strictEqual(filter.filterState, 1); // Не увеличивается в init
});
});