Files
native-monad/benchmarks/result/async.bench.ts
2026-03-30 08:34:35 +02:00

71 lines
2.2 KiB
TypeScript

import { bench, describe } from 'vitest';
import { EXTENDED } from '../helpers/bench-options.js';
import { SIZES } from '../helpers/data-generators.js';
import {
ok,
err,
Result,
ResultPromise,
ntOk,
ntErr,
NtResultAsync,
E,
pipe,
} from '../helpers/imports.js';
import * as TE from 'fp-ts/TaskEither';
// ---------------------------------------------------------------------------
// ResultPromise.from — success
// ---------------------------------------------------------------------------
describe('ResultPromise.from — success', () => {
bench('native-monad', async () => {
await ResultPromise.from(() => Promise.resolve(42));
}, EXTENDED);
bench('neverthrow', async () => {
await NtResultAsync.fromPromise(Promise.resolve(42), () => 'err');
}, EXTENDED);
bench('fp-ts', async () => {
await TE.tryCatch(() => Promise.resolve(42), () => 'err')();
}, EXTENDED);
});
// ---------------------------------------------------------------------------
// ResultPromise.from — failure
// ---------------------------------------------------------------------------
describe('ResultPromise.from — failure', () => {
bench('native-monad', async () => {
await ResultPromise.from(() => Promise.reject(new Error('fail')), () => 'err');
}, EXTENDED);
bench('neverthrow', async () => {
await NtResultAsync.fromPromise(Promise.reject(new Error('fail')), () => 'err');
}, EXTENDED);
bench('fp-ts', async () => {
await TE.tryCatch(() => Promise.reject(new Error('fail')), () => 'err')();
}, EXTENDED);
});
// ---------------------------------------------------------------------------
// ResultPromise.all — all Ok
// ---------------------------------------------------------------------------
for (const size of [10, 100] as const) {
describe(`ResultPromise.all — ${size} items, all Ok`, () => {
const nmPromises = () => Array.from({ length: size }, (_, i) => Promise.resolve(ok(i)));
const ntPromises = () => Array.from({ length: size }, (_, i) => NtResultAsync.fromSafePromise(Promise.resolve(i)));
bench('native-monad', async () => {
await ResultPromise.all(nmPromises());
}, EXTENDED);
bench('neverthrow', async () => {
await NtResultAsync.combine(ntPromises());
}, EXTENDED);
});
}