import { expect, test, vi } from "vitest" import { scheduleMacroTask, scheduleMacroTaskSimple, scheduleMicroTask, scheduleMicroTaskSimple, } from "#Source/basic/index.ts" test("scheduleMicroTaskSimple schedules a task in the microtask queue", async () => { const values: string[] = [] scheduleMicroTaskSimple(() => { values.push("micro") }) expect(values).toEqual([]) await Promise.resolve() expect(values).toEqual(["micro"]) }) test("scheduleMacroTaskSimple schedules a task in the macrotask queue", async () => { vi.useFakeTimers() const values: string[] = [] scheduleMacroTaskSimple(() => { values.push("macro") }) expect(values).toEqual([]) await vi.runAllTimersAsync() expect(values).toEqual(["macro"]) vi.useRealTimers() }) test("scheduleMicroTask schedules async-capable tasks in the microtask queue", async () => { const values: string[] = [] scheduleMicroTask({ task: () => { values.push("micro") }, }) expect(values).toEqual([]) await Promise.resolve() await Promise.resolve() expect(values).toEqual(["micro"]) }) test("scheduleMacroTask schedules async-capable tasks with timeout", async () => { vi.useFakeTimers() const values: string[] = [] scheduleMacroTask({ timeout: 25, task: () => { values.push("macro") }, }) await vi.advanceTimersByTimeAsync(24) expect(values).toEqual([]) await vi.advanceTimersByTimeAsync(1) expect(values).toEqual(["macro"]) vi.useRealTimers() })