mirror of
https://github.com/chanzuckerberg/cellxgene.git
synced 2026-09-17 22:08:00 +08:00
185 lines
5.1 KiB
JavaScript
185 lines
5.1 KiB
JavaScript
// jshint esversion: 6
|
|
|
|
const BitArray = require("../../src/util/typedCrossfilter/bitArray");
|
|
const defaultTestLength = 8;
|
|
|
|
describe("default select state", () => {
|
|
test("newly created Bitarray should be deselected", () => {
|
|
const ba = new BitArray(defaultTestLength);
|
|
expect(ba).toBeDefined();
|
|
|
|
for (let i = 0; i < defaultTestLength; i++) {
|
|
expect(ba.isSelected(i)).toEqual(false);
|
|
}
|
|
|
|
const dim = ba.allocDimension();
|
|
expect(dim).toBeDefined();
|
|
for (let i = 0; i < defaultTestLength; i++) {
|
|
expect(ba.isSelected(i)).toEqual(false);
|
|
}
|
|
|
|
ba.freeDimension(dim);
|
|
for (let i = 0; i < defaultTestLength; i++) {
|
|
expect(ba.isSelected(i)).toEqual(false);
|
|
}
|
|
});
|
|
});
|
|
|
|
describe("select and deselect", () => {
|
|
test("selectAll and deselectAll", () => {
|
|
const ba = new BitArray(defaultTestLength);
|
|
expect(ba).toBeDefined();
|
|
const dim1 = ba.allocDimension();
|
|
expect(dim1).toBeDefined();
|
|
ba.selectAll(dim1);
|
|
|
|
for (let i = 0; i < defaultTestLength; i++) {
|
|
expect(ba.isSelected(i)).toEqual(true);
|
|
}
|
|
|
|
const dim2 = ba.allocDimension();
|
|
expect(dim2).toBeDefined();
|
|
for (let i = 0; i < defaultTestLength; i++) {
|
|
expect(ba.isSelected(i)).toEqual(false);
|
|
}
|
|
|
|
ba.selectAll(dim2);
|
|
for (let i = 0; i < defaultTestLength; i++) {
|
|
expect(ba.isSelected(i)).toEqual(true);
|
|
}
|
|
|
|
ba.deselectAll(dim1);
|
|
for (let i = 0; i < defaultTestLength; i++) {
|
|
expect(ba.isSelected(i)).toEqual(false);
|
|
}
|
|
|
|
ba.deselectAll(dim2);
|
|
for (let i = 0; i < defaultTestLength; i++) {
|
|
expect(ba.isSelected(i)).toEqual(false);
|
|
}
|
|
|
|
ba.selectAll(dim1);
|
|
ba.selectAll(dim2);
|
|
for (let i = 0; i < defaultTestLength; i++) {
|
|
expect(ba.isSelected(i)).toEqual(true);
|
|
}
|
|
|
|
ba.freeDimension(dim1);
|
|
for (let i = 0; i < defaultTestLength; i++) {
|
|
expect(ba.isSelected(i)).toEqual(true);
|
|
}
|
|
|
|
ba.freeDimension(dim2);
|
|
for (let i = 0; i < defaultTestLength; i++) {
|
|
expect(ba.isSelected(i)).toEqual(false);
|
|
}
|
|
});
|
|
|
|
test("selectOne and deselectOne", () => {
|
|
const ba = new BitArray(defaultTestLength);
|
|
expect(ba).toBeDefined();
|
|
const dim = ba.allocDimension();
|
|
expect(dim).toBeDefined();
|
|
|
|
ba.selectOne(dim, 0);
|
|
expect(ba.isSelected(0)).toEqual(true);
|
|
for (let i = 1; i < defaultTestLength; i++) {
|
|
expect(ba.isSelected(i)).toEqual(false);
|
|
}
|
|
|
|
ba.deselectOne(dim, 0);
|
|
for (let i = 0; i < defaultTestLength; i++) {
|
|
expect(ba.isSelected(i)).toEqual(false);
|
|
}
|
|
|
|
ba.selectOne(dim, 1);
|
|
expect(ba.isSelected(1)).toEqual(true);
|
|
expect(ba.isSelected(0)).toEqual(false);
|
|
for (let i = 2; i < defaultTestLength; i++) {
|
|
expect(ba.isSelected(i)).toEqual(false);
|
|
}
|
|
|
|
ba.selectAll(dim);
|
|
ba.deselectOne(dim, defaultTestLength - 1);
|
|
expect(ba.isSelected(defaultTestLength - 1)).toEqual(false);
|
|
for (let i = 0; i < defaultTestLength - 1; i++) {
|
|
expect(ba.isSelected(i)).toEqual(true);
|
|
}
|
|
});
|
|
});
|
|
|
|
describe("selectionCount", () => {
|
|
test("simple", () => {
|
|
const ba = new BitArray(defaultTestLength);
|
|
expect(ba).toBeDefined();
|
|
const dim1 = ba.allocDimension();
|
|
expect(dim1).toBeDefined();
|
|
const dim2 = ba.allocDimension();
|
|
expect(dim2).toBeDefined();
|
|
|
|
expect(ba.selectionCount).toEqual(0);
|
|
ba.selectAll(dim1);
|
|
expect(ba.selectionCount).toEqual(0);
|
|
ba.selectAll(dim2);
|
|
expect(ba.selectionCount).toEqual(defaultTestLength);
|
|
|
|
for (let i = 0; i < defaultTestLength; i++) {
|
|
ba.deselectOne(dim1, i);
|
|
expect(ba.selectionCount).toEqual(defaultTestLength - i - 1);
|
|
expect(ba.selectionCount).toEqual(ba.countAllOnes());
|
|
}
|
|
|
|
ba.freeDimension(dim1);
|
|
ba.freeDimension(dim2);
|
|
});
|
|
});
|
|
|
|
describe("fillBySelection", () => {
|
|
test("sets values correctly", () => {
|
|
const ba = new BitArray(defaultTestLength);
|
|
expect(ba).toBeDefined();
|
|
const dim = ba.allocDimension();
|
|
expect(dim).toBeDefined();
|
|
|
|
const arr = new Int32Array(defaultTestLength);
|
|
arr.fill(0);
|
|
const truth = new Int32Array(defaultTestLength);
|
|
truth.fill(0);
|
|
|
|
// initial state should be deselected
|
|
ba.fillBySelection(arr, 1, 0);
|
|
expect(arr).toEqual(expect.not.arrayContaining([1]));
|
|
|
|
// selectAll
|
|
ba.selectAll(dim);
|
|
ba.fillBySelection(arr, 1, 0);
|
|
expect(arr).toEqual(expect.not.arrayContaining([0]));
|
|
|
|
// deselectOne
|
|
ba.deselectOne(dim, 3);
|
|
ba.fillBySelection(arr, 1, 0);
|
|
truth.fill(1);
|
|
truth[3] = 0;
|
|
expect(arr).toEqual(truth);
|
|
|
|
// deselectAll
|
|
ba.deselectAll(dim);
|
|
ba.fillBySelection(arr, 1, 0);
|
|
truth.fill(0);
|
|
expect(arr).toEqual(truth);
|
|
|
|
// selectOne
|
|
ba.selectOne(dim, 5);
|
|
ba.fillBySelection(arr, 6, 1);
|
|
truth.fill(1);
|
|
truth[5] = 6;
|
|
expect(arr).toEqual(truth);
|
|
|
|
// should be deselected after dimension disposal
|
|
ba.freeDimension(dim);
|
|
ba.fillBySelection(arr, 3, 9);
|
|
truth.fill(9);
|
|
expect(arr).toEqual(truth);
|
|
});
|
|
});
|