import { Cause, Effect, Exit, Scope } from "effect"; export function testEffect(self: Effect.Effect) { return async () => { const exit = await Effect.runPromise(self.pipe(Effect.scoped, Effect.exit)); Exit.match(exit, { onSuccess: () => { // Test passed }, onFailure: Cause.match({ onDie: (defect) => { throw defect; }, onFail: (error) => { // eslint-disable-next-line @typescript-eslint/only-throw-error throw error; }, onInterrupt: () => { throw new Error("Test interrupted"); }, onParallel: () => { throw new Error(`Test failed with parallel causes`, { cause: exit }); }, onSequential: () => { throw new Error(`Test failed with sequential causes`, { cause: exit, }); }, onEmpty: () => { throw new Error("Test failed with empty cause"); }, }), }); }; }