[READ-ONLY] Mirror of https://github.com/bombshell-dev/tty. Platform independent 2D layout engine for terminal applications based on Clay bomb.sh/docs/tty
Something went wrong. Try again.
TypeScript
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950import { Bench } from "tinybench";import { sync, withCodSpeed } from "./fixtures/utils.ts";import { createInput } from "../input.ts";
function str(s: string): Uint8Array { return new TextEncoder().encode(s);}
function concat(parts: Uint8Array[]): Uint8Array { let len = parts.reduce((n, p) => n + p.length, 0); let out = new Uint8Array(len); let off = 0; for (let p of parts) { out.set(p, off); off += p.length; } return out;}
let unit = concat([ str("the quick brown fox "), new Uint8Array([0x1b, 0x5b, 0x41]), // ArrowUp str("\x1b[<0;40;12M"), // SGR mouse press new Uint8Array([0xe4, 0xb8, 0xad]), // 中 str("\x1b[97;3u"), // Kitty a+Alt new Uint8Array([0xf0, 0x9f, 0x8e, 0x89]), // 🎉]);let corpus = concat(new Array(1000).fill(unit));
let READ = 64;
let input = await createInput({ escLatency: 25 });
let bench = withCodSpeed(new Bench({ name: "throughput" }));
bench.add( "input throughput (mixed corpus, chunked read loop)", sync(() => { let dispatched = 0; for (let off = 0; off < corpus.length; off += READ) { let { events } = input.scan(corpus.subarray(off, off + READ)); dispatched += events.length; } if (dispatched === 0) throw new Error("expected events"); }),);
await bench.run();console.table(bench.table());