mirror of
https://github.com/chanzuckerberg/cellxgene.git
synced 2026-09-15 20:57:56 +08:00
Fixes the build error in the old version. Reverted the API version since we changed directions from updating the API to refactoring the server structure instead.
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);
|
|
});
|
|
});
|