mirror of
https://github.com/chanzuckerberg/cellxgene.git
synced 2026-09-25 02:48:13 +08:00
* 1510-smoke-test * config default * update tests * update test config * fix linter errors * more comments * address comments * use npm install in push_tests.yml * use environment.default.json * adding docs * Take care of @mweiden's nits * Save screenshots in the __tests__/screenshots/ directory * typo * docs * Add chart tests (#1580) * merge tests * check if bin creation returned null before rendering charts (#1576) * check if bin creation returned null before rendering charts * refactor chart rendering into functions (#1577) * little fixes from PR * reintroduce fix to check for null values * change getAllByClass to return element * slice instead * new stackedbar test * feedback-1573-test (#1579) * feedback-1573-test * enable whole test set * revert tests Co-authored-by: Timmy Huang <tihuan@users.noreply.github.com> * tweak test to actually render chart * include snapshot * remove async * fix getAllHistograms * properly grab id Co-authored-by: Timmy Huang <tihuan@users.noreply.github.com> Co-authored-by: Matt Weiden <538456+mweiden@users.noreply.github.com> Co-authored-by: Severiano Badajoz <sbadajoz@chanzuckerberg.com>
75 lines
2.2 KiB
JavaScript
75 lines
2.2 KiB
JavaScript
import PromiseLimit from "../../src/util/promiseLimit";
|
|
import { range } from "../../src/util/range";
|
|
|
|
const delay = (t) => new Promise((resolve) => setTimeout(resolve, t));
|
|
|
|
describe("PromiseLimit", () => {
|
|
test("simple evaluation, concurrency 1", async () => {
|
|
const plimit = new PromiseLimit(1);
|
|
const result = await Promise.all([
|
|
plimit.add(() => Promise.resolve(1)),
|
|
plimit.add(() => Promise.resolve(2)),
|
|
plimit.add(() => Promise.resolve(3)),
|
|
plimit.add(() => Promise.resolve(4)),
|
|
]);
|
|
expect(result).toEqual([1, 2, 3, 4]);
|
|
});
|
|
|
|
test("simple evaluation, concurrency > 1", async () => {
|
|
const plimit = new PromiseLimit(100);
|
|
const result = await Promise.all([
|
|
plimit.add(() => Promise.resolve(1)),
|
|
plimit.add(() => Promise.resolve(2)),
|
|
plimit.add(() => Promise.resolve(3)),
|
|
plimit.add(() => Promise.resolve(4)),
|
|
]);
|
|
expect(result).toEqual([1, 2, 3, 4]);
|
|
});
|
|
|
|
test("eval in order of insertion", async () => {
|
|
const plimit = new PromiseLimit(100);
|
|
|
|
const result = await Promise.all([
|
|
plimit.add(() => Promise.resolve(1)),
|
|
plimit.add(() => Promise.resolve(2)),
|
|
plimit.add(() => Promise.resolve(3)),
|
|
plimit.add(() => Promise.resolve(4)),
|
|
]);
|
|
|
|
expect(result).toEqual([1, 2, 3, 4]);
|
|
});
|
|
|
|
test("obeys concurrency limit", async () => {
|
|
const plimit = new PromiseLimit(2);
|
|
let running = 0;
|
|
let maxRunning = 0;
|
|
|
|
const callback = async () => {
|
|
running += 1;
|
|
maxRunning = running > maxRunning ? running : maxRunning;
|
|
await delay(100);
|
|
running -= 1;
|
|
};
|
|
|
|
await Promise.all(range(10).map((i) => plimit.add(() => callback(i))));
|
|
|
|
expect(maxRunning).toEqual(2);
|
|
});
|
|
|
|
test("rejection", async () => {
|
|
const plimit = new PromiseLimit(2);
|
|
const result = await Promise.all([
|
|
plimit.add(() => Promise.resolve("OK")),
|
|
// eslint-disable-next-line prefer-promise-reject-errors -- unit test
|
|
plimit.add(() => Promise.reject("not OK")).catch((e) => e),
|
|
plimit.add(() => Promise.resolve("OK")),
|
|
plimit
|
|
.add(() => {
|
|
throw new Error("not OK");
|
|
})
|
|
.catch((e) => e.message),
|
|
]);
|
|
expect(result).toEqual(["OK", "not OK", "OK", "not OK"]);
|
|
});
|
|
});
|