diff options
| author | gfeun | 2020-03-19 18:35:35 +0100 |
|---|---|---|
| committer | gfeun | 2020-03-20 18:03:29 +0100 |
| commit | c675c2a51c3a66f416cd2fd2ada1eccec45db2c9 (patch) | |
| tree | fe7620d06da77edbabb0f2ca31e8c3db4b9d17ab /demo/src/task-scheduler.spec.ts | |
| parent | test: use tsconfig.spec.json when running jest (diff) | |
| download | avr8js-c675c2a51c3a66f416cd2fd2ada1eccec45db2c9.tar.gz avr8js-c675c2a51c3a66f416cd2fd2ada1eccec45db2c9.tar.bz2 avr8js-c675c2a51c3a66f416cd2fd2ada1eccec45db2c9.zip | |
perf(demo): improve main cpu loop performance
Diffstat (limited to '')
| -rw-r--r-- | demo/src/task-scheduler.spec.ts | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/demo/src/task-scheduler.spec.ts b/demo/src/task-scheduler.spec.ts new file mode 100644 index 0000000..f5fb4bf --- /dev/null +++ b/demo/src/task-scheduler.spec.ts @@ -0,0 +1,52 @@ +/** + * @jest-environment jsdom + */ +/// <reference lib="dom" /> + +import { MicroTaskScheduler } from './task-scheduler'; + +describe('task-scheduler', () => { + let taskScheduler: MicroTaskScheduler; + let task: jest.Mock; + + beforeEach(() => { + taskScheduler = new MicroTaskScheduler(); + task = jest.fn(); + }); + + it('should execute task', async () => { + taskScheduler.start(); + taskScheduler.postTask(task); + await new Promise((resolve) => setTimeout(resolve, 0)); + expect(task).toHaveBeenCalledTimes(1); + }); + + it('should execute task twice when posted twice', async () => { + taskScheduler.start(); + taskScheduler.postTask(task); + taskScheduler.postTask(task); + await new Promise((resolve) => setTimeout(resolve, 0)); + expect(task).toHaveBeenCalledTimes(2); + }); + + it('should not execute task when not started', async () => { + taskScheduler.postTask(task); + await new Promise((resolve) => setTimeout(resolve, 0)); + expect(task).not.toHaveBeenCalled(); + }); + + it('should not execute task when stopped', async () => { + taskScheduler.start(); + taskScheduler.stop(); + taskScheduler.postTask(task); + await new Promise((resolve) => setTimeout(resolve, 0)); + expect(task).not.toHaveBeenCalled(); + }); + + it('should not register listener twice', async () => { + const addEventListenerSpy = jest.spyOn(window, 'addEventListener'); + taskScheduler.start(); + taskScheduler.start(); + expect(addEventListenerSpy).toHaveBeenCalledTimes(1); + }); +}); |
