aboutsummaryrefslogtreecommitdiff
path: root/demo/src/task-scheduler.spec.ts
diff options
context:
space:
mode:
authorUri Shaked2020-03-20 19:09:28 +0200
committerGitHub2020-03-20 19:09:28 +0200
commit3c8b35275fa70544ec8529ca3154a75b55e8c8a5 (patch)
treefe7620d06da77edbabb0f2ca31e8c3db4b9d17ab /demo/src/task-scheduler.spec.ts
parenttest: use tsconfig.spec.json when running jest (diff)
parentperf(demo): improve main cpu loop performance (diff)
downloadavr8js-3c8b35275fa70544ec8529ca3154a75b55e8c8a5.tar.gz
avr8js-3c8b35275fa70544ec8529ca3154a75b55e8c8a5.tar.bz2
avr8js-3c8b35275fa70544ec8529ca3154a75b55e8c8a5.zip
Merge pull request #19 from gfeun/main-execute-loop-optimization
Improve main cpu loop performance
Diffstat (limited to '')
-rw-r--r--demo/src/task-scheduler.spec.ts52
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);
+ });
+});