export const description = `Tests for the behavior of GPUQueue.onSubmittedWorkDone().Note that any promise timeouts will be detected by the framework.`;import { makeTestGroup } from '../../../common/framework/test_group.js';import { range } from '../../../common/util/util.js';import { AllFeaturesMaxLimitsGPUTest } from '../../gpu_test.js';export const g = makeTestGroup(AllFeaturesMaxLimitsGPUTest);g.test('without_work').desc(`Await onSubmittedWorkDone once without having submitted any work.`).fn(async t => {await t.queue.onSubmittedWorkDone();});g.test('with_work').desc(`Await onSubmittedWorkDone once after submitting some work (writeBuffer).`).fn(async t => {const buffer = t.createBufferTracked({ size: 4, usage: GPUBufferUsage.COPY_DST });t.queue.writeBuffer(buffer, 0, new Uint8Array(4));await t.queue.onSubmittedWorkDone();});g.test('many,serial').desc(`Await 1000 onSubmittedWorkDone calls in serial.`).fn(async t => {for (let i = 0; i < 1000; ++i) {await t.queue.onSubmittedWorkDone();}});g.test('many,parallel').desc(`Await 1000 onSubmittedWorkDone calls in parallel with Promise.all().`).fn(async t => {const promises = range(1000, () => t.queue.onSubmittedWorkDone());await Promise.all(promises);});g.test('many,parallel_order').desc(`Issue 200 onSubmittedWorkDone calls and make sure they resolve in the right order.`).fn(async t => {const promises = [];let lastResolved = -1;for (const i of range(200, i => i)) {promises.push(t.queue.onSubmittedWorkDone().then(() => {t.expect(i === lastResolved + 1);lastResolved++;}));}await Promise.all(promises);});