2023-08-18 07:20:04 +00:00
|
|
|
import { Event } from 'nostr-tools';
|
|
|
|
import { bench, describe } from 'vitest';
|
|
|
|
|
2023-08-21 19:53:08 +00:00
|
|
|
import SortedMap from '@/utils/SortedMap/SortedMap.tsx';
|
2023-08-18 07:20:04 +00:00
|
|
|
|
|
|
|
import events from './events.json';
|
2023-08-19 05:45:57 +00:00
|
|
|
import RBSortedMap from './RBSortedMap.ts';
|
2023-08-18 07:20:04 +00:00
|
|
|
|
|
|
|
describe('SortedMap Write Benchmark', () => {
|
|
|
|
bench(
|
|
|
|
'Array-based SortedMap',
|
|
|
|
() => {
|
|
|
|
const sortedEvents = new SortedMap<string, Event>();
|
|
|
|
events.forEach((event) => {
|
|
|
|
sortedEvents.set(event.created_at + event.id, event);
|
|
|
|
});
|
|
|
|
},
|
|
|
|
{ iterations: 1000 },
|
|
|
|
);
|
|
|
|
|
|
|
|
bench(
|
|
|
|
'Red-Black Tree SortedMap',
|
|
|
|
() => {
|
|
|
|
const sortedEvents = new RBSortedMap<string, Event>();
|
|
|
|
events.forEach((event) => {
|
|
|
|
sortedEvents.set(event.created_at + event.id, event);
|
|
|
|
});
|
|
|
|
},
|
|
|
|
{ iterations: 1000 },
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('SortedMap Write & Read Benchmark', () => {
|
|
|
|
bench(
|
|
|
|
'Array-based SortedMap',
|
|
|
|
() => {
|
|
|
|
const sortedEvents = new SortedMap<string, Event>();
|
|
|
|
events.forEach((event) => {
|
|
|
|
sortedEvents.set(event.created_at + event.id, event);
|
|
|
|
});
|
|
|
|
[...sortedEvents.values()].reverse();
|
|
|
|
},
|
|
|
|
{ iterations: 1000 },
|
|
|
|
);
|
|
|
|
|
|
|
|
bench(
|
|
|
|
'Red-Black Tree SortedMap',
|
|
|
|
() => {
|
|
|
|
const sortedEvents = new RBSortedMap<string, Event>();
|
|
|
|
events.forEach((event) => {
|
|
|
|
sortedEvents.set(event.created_at + event.id, event);
|
|
|
|
});
|
|
|
|
[...sortedEvents.values()].reverse();
|
|
|
|
},
|
|
|
|
{ iterations: 1000 },
|
|
|
|
);
|
|
|
|
});
|