initial commit
This commit is contained in:
70
benchmarks/result/async.bench.ts
Normal file
70
benchmarks/result/async.bench.ts
Normal file
@@ -0,0 +1,70 @@
|
||||
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);
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user