aboutsummaryrefslogtreecommitdiff
path: root/src/cpu/cpu.spec.ts
diff options
context:
space:
mode:
authorUri Shaked2020-12-12 15:01:17 +0200
committerUri Shaked2020-12-12 15:01:17 +0200
commite7ea8c76bd649aa84fdeb084fec02529743ee6eb (patch)
treeffe520a2f308a61805b04ddfbc3432a71205159c /src/cpu/cpu.spec.ts
parenttest(cpu): fix implicit any error (diff)
downloadavr8js-e7ea8c76bd649aa84fdeb084fec02529743ee6eb.tar.gz
avr8js-e7ea8c76bd649aa84fdeb084fec02529743ee6eb.tar.bz2
avr8js-e7ea8c76bd649aa84fdeb084fec02529743ee6eb.zip
perf(cpu): speed up event system
ditch `array.sort()` and instead manually keep the array sorted when we insert a new item.
Diffstat (limited to 'src/cpu/cpu.spec.ts')
-rw-r--r--src/cpu/cpu.spec.ts31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/cpu/cpu.spec.ts b/src/cpu/cpu.spec.ts
index b1bc876..969b51c 100644
--- a/src/cpu/cpu.spec.ts
+++ b/src/cpu/cpu.spec.ts
@@ -26,6 +26,23 @@ describe('cpu', () => {
]);
});
+ it('should correctly sort the events when added in reverse order', () => {
+ const cpu = new CPU(new Uint16Array(1024), 0x1000);
+ const events: ITestEvent[] = [];
+ for (const i of [10, 4, 1]) {
+ cpu.addClockEvent(() => events.push([i, cpu.cycles]), i);
+ }
+ for (let i = 0; i < 10; i++) {
+ cpu.cycles++;
+ cpu.tick();
+ }
+ expect(events).toEqual([
+ [1, 1],
+ [4, 4],
+ [10, 10],
+ ]);
+ });
+
describe('updateClockEvent', () => {
it('should update the number of cycles for the given clock event', () => {
const cpu = new CPU(new Uint16Array(1024), 0x1000);
@@ -65,6 +82,20 @@ describe('cpu', () => {
[10, 10],
]);
});
+
+ it('should return false if the provided clock event is not scheduled', () => {
+ const cpu = new CPU(new Uint16Array(1024), 0x1000);
+ const event4 = cpu.addClockEvent(() => 0, 4);
+ const event10 = cpu.addClockEvent(() => 0, 10);
+ cpu.addClockEvent(() => 0, 1);
+
+ // Both event should be successfully removed
+ expect(cpu.clearClockEvent(event4)).toBe(true);
+ expect(cpu.clearClockEvent(event10)).toBe(true);
+ // And now we should get false, as these events have already been removed
+ expect(cpu.clearClockEvent(event4)).toBe(false);
+ expect(cpu.clearClockEvent(event10)).toBe(false);
+ });
});
});
});