mirror of
https://github.com/chanzuckerberg/cellxgene.git
synced 2026-10-02 04:38:11 +08:00
* type camera
* type reducer store
* type actionhelpers
* type catchErrorsWrap callsite
* missed camera member var
* type nameCreators
* type makeContinousDimensionName callsite
* type promise limit
* type quantile
* type range
* introduce TypedArray + NumericArray
* type range
* cleanup test
* fix call sites
* type plimit call site
* finish typing camera
* use our TypedArray
* type scientific and sigFig utils and callsites
* simple typings
* type catLabelSort
* type callsite
* type
* callsites
* type camera methods
* swap back to strings, set defaults accordingly
* partially type centroid
* explicit tuple and undefined check
* fix references to this
* call constructor with new and casting
* Revert "introduce TypedArray + NumericArray"
This reverts commit cf21538717.
* explicit tuple
* generics and import fixes
* add unsigned 8 clamped arrray
* back to literals
* use arraytypes
* fix return state
* type more actions
* Update client/src/util/actionHelpers.ts
Co-authored-by: Timmy Huang <tihuan@users.noreply.github.com>
* properly type dispatch
* properly type thunk
* use new dispatch
* remove nullish coallescer
* use AppDispatch
* generic jsonrequest
* use dispatch again
* lint
Co-authored-by: Timmy Huang <tihuan@users.noreply.github.com>
98 lines
2.9 KiB
TypeScript
98 lines
2.9 KiB
TypeScript
import PromiseLimit from "../../src/util/promiseLimit";
|
|
import { range } from "../../src/util/range";
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any --- FIXME: disabled temporarily on migrate to TS.
|
|
const delay = (t: any) => 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(() => plimit.add(() => callback())));
|
|
|
|
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"]);
|
|
});
|
|
|
|
test("priority queue", async () => {
|
|
const plimit = new PromiseLimit(1);
|
|
|
|
let finishOrder = 0;
|
|
const callback = () => async () => {
|
|
await delay(100);
|
|
const result = finishOrder;
|
|
finishOrder += 1;
|
|
return result;
|
|
};
|
|
|
|
const result = await Promise.all([
|
|
plimit.add(callback()),
|
|
plimit.priorityAdd(4, callback()),
|
|
plimit.priorityAdd(0, callback()),
|
|
plimit.priorityAdd(1, callback()),
|
|
plimit.priorityAdd(-1, callback()),
|
|
]);
|
|
|
|
expect(result).toEqual([0, 4, 2, 3, 1]);
|
|
});
|
|
});
|