summaryrefslogtreecommitdiffstats
path: root/tests/debounce.test.ts
diff options
context:
space:
mode:
authorGravatar amrkmn 2025-12-26 22:39:23 +0800
committerGravatar amrkmn 2025-12-26 22:39:23 +0800
commit32ca410f4edbff578d71781d943c41573912f476 (patch)
tree49f7e1e5602657d23945082fe273fc4802959a40 /tests/debounce.test.ts
Initial commitmain
Diffstat (limited to 'tests/debounce.test.ts')
-rw-r--r--tests/debounce.test.ts60
1 files changed, 60 insertions, 0 deletions
diff --git a/tests/debounce.test.ts b/tests/debounce.test.ts
new file mode 100644
index 0000000..da029a1
--- /dev/null
+++ b/tests/debounce.test.ts
@@ -0,0 +1,60 @@
+import { expect, test } from 'bun:test';
+import { debounce } from '../src/lib/search/debounce';
+
+test('debounce delays function execution', async () => {
+ const results: number[] = [];
+ const debouncedFn = debounce((value: number) => results.push(value), 100);
+
+ debouncedFn(1);
+ debouncedFn(2);
+ debouncedFn(3);
+
+ expect(results.length).toBe(0);
+
+ await Bun.sleep(150);
+ expect(results.length).toBe(1);
+ expect(results[0]).toBe(3);
+});
+
+test('debounce resets timer on repeated calls', async () => {
+ const results: number[] = [];
+ const debouncedFn = debounce((value: number) => results.push(value), 100);
+
+ debouncedFn(1);
+ await Bun.sleep(50);
+ debouncedFn(2);
+ await Bun.sleep(50);
+ debouncedFn(3);
+ await Bun.sleep(50);
+
+ expect(results.length).toBe(0);
+
+ await Bun.sleep(150);
+ expect(results.length).toBe(1);
+ expect(results[0]).toBe(3);
+});
+
+test('debounce allows multiple executions over time', async () => {
+ const results: number[] = [];
+ const debouncedFn = debounce((value: number) => results.push(value), 50);
+
+ debouncedFn(1);
+ await Bun.sleep(100);
+
+ debouncedFn(2);
+ await Bun.sleep(100);
+
+ expect(results.length).toBe(2);
+ expect(results).toEqual([1, 2]);
+});
+
+test('debounce passes arguments correctly', async () => {
+ const results: [string, number][] = [];
+ const debouncedFn = debounce((text: string, num: number) => results.push([text, num]), 50);
+
+ debouncedFn('hello', 42);
+ await Bun.sleep(100);
+
+ expect(results.length).toBe(1);
+ expect(results[0]).toEqual(['hello', 42]);
+});