From 43de33afc7fcc4cab25f578566e225ba9e4d4258 Mon Sep 17 00:00:00 2001 From: Jarred Sumner Date: Tue, 7 Jun 2022 22:32:46 -0700 Subject: Web Streams API (#176) * [bun.js] `WritableStream`, `ReadableStream`, `TransformStream`, `WritableStreamDefaultController`, `ReadableStreamDefaultController` & more * Implement `Blob.stream()` * Update streams.test.js * Fix sourcemaps crash * [TextEncoder] 3x faster in hot loops * reading almost works * start to implement native streams * Implement `Blob.stream()` * Implement `Bun.file(pathOrFd).stream()` * Add an extra function * [fs.readFile] Improve performance * make jsc bindings a little easier to work with * fix segfault * faster async/await + readablestream optimizations * WebKit updates * More WebKit updates * Add releaseWEakrefs binding * `bun:jsc` * More streams * Update streams.test.js * Update Makefile * Update mimalloc * Update WebKit * Create bun-jsc.test.js * Faster ReadableStream * Fix off by one & exceptions * Handle empty files/blobs * Update streams.test.js * Move streams to it's own file * temp * impl #1 * take two * good enough for now * Implement `readableStreamToArray`, `readableStreamToArrayBuffer`, `concatArrayBuffers` * jsxOptimizationInlining * Fix crash * Add `jsxOptimizationInline` to Bun.Transpiler * Update Transpiler types * Update js_ast.zig * Automatically choose production mode when NODE_ENV="production" * Update cli.zig * [jsx] Handle defaultProps when inlining * Update transpiler.test.js * uncomment some tests Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> --- integration/bunjs-only-snippets/concat.test.js | 46 ++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 integration/bunjs-only-snippets/concat.test.js (limited to 'integration/bunjs-only-snippets/concat.test.js') diff --git a/integration/bunjs-only-snippets/concat.test.js b/integration/bunjs-only-snippets/concat.test.js new file mode 100644 index 000000000..9f3e1f257 --- /dev/null +++ b/integration/bunjs-only-snippets/concat.test.js @@ -0,0 +1,46 @@ +import { describe, it, expect } from "bun:test"; +import { gcTick } from "./gc"; +import { concat } from "bun"; + +describe("concat", () => { + function polyfill(chunks) { + var size = 0; + for (const chunk of chunks) { + size += chunk.byteLength; + } + var buffer = new ArrayBuffer(size); + var view = new Uint8Array(buffer); + var offset = 0; + for (const chunk of chunks) { + view.set(chunk, offset); + offset += chunk.byteLength; + } + return buffer; + } + + function concatToString(chunks) { + return Array.from(new Uint8Array(concat(chunks))).join(""); + } + + function polyfillToString(chunks) { + return Array.from(new Uint8Array(polyfill(chunks))).join(""); + } + + it("works with one element", () => { + expect(concatToString([new Uint8Array([123])])).toBe( + polyfillToString([new Uint8Array([123])]) + ); + }); + + it("works with two elements", () => { + expect( + concatToString([Uint8Array.from([123]), Uint8Array.from([456])]) + ).toBe(polyfillToString([Uint8Array.from([123]), Uint8Array.from([456])])); + }); + + it("works with mix of ArrayBuffer and TypedArray elements", () => { + expect( + concatToString([Uint8Array.from([123]).buffer, Uint8Array.from([456])]) + ).toBe(polyfillToString([Uint8Array.from([123]), Uint8Array.from([456])])); + }); +}); -- cgit v1.2.3