mtcute/packages/wasm/tests/zlib.test.ts

65 lines
1.9 KiB
TypeScript
Raw Normal View History

import { inflateSync } from 'node:zlib'
2023-11-04 06:44:18 +03:00
import { beforeAll, describe, expect, it } from 'vitest'
import { getPlatform } from '@mtcute/core/platform.js'
2023-11-29 20:31:18 +03:00
import { __getWasm, deflateMaxSize } from '../src/index.js'
import { initWasm } from './init.js'
2023-11-04 06:44:18 +03:00
beforeAll(async () => {
await initWasm()
2023-11-04 06:44:18 +03:00
})
const p = getPlatform()
2023-11-29 20:31:18 +03:00
function inflateSyncWrap(data: Uint8Array) {
if (import.meta.env.TEST_ENV === 'browser' || import.meta.env.TEST_ENV === 'deno') {
2023-11-29 20:31:18 +03:00
// @ts-expect-error fucking crutch because @jspm/core uses Buffer.isBuffer for some reason
data._isBuffer = true
return new Uint8Array(inflateSync(data))
}
return inflateSync(data)
}
2023-11-04 06:44:18 +03:00
describe('zlib deflate', () => {
it('should add zlib headers', () => {
const res = deflateMaxSize(p.utf8Encode('hello world'), 100)
2023-11-04 06:44:18 +03:00
expect(res).not.toBeNull()
expect(res!.slice(0, 2)).toEqual(new Uint8Array([0x78, 0x9C]))
2023-11-04 06:44:18 +03:00
})
it('should return null if compressed data is larger than size', () => {
const res = deflateMaxSize(p.utf8Encode('hello world'), 1)
2023-11-04 06:44:18 +03:00
expect(res).toBeNull()
2023-11-04 06:44:18 +03:00
})
it('should correctly deflate', () => {
const data = Array.from({ length: 1000 }, () => 'a').join('')
const res = deflateMaxSize(p.utf8Encode(data), 100)
2023-11-04 06:44:18 +03:00
expect(res).not.toBeNull()
expect(res!.length).toBeLessThan(100)
expect(inflateSyncWrap(res!)).toEqual(p.utf8Encode(data))
2023-11-04 06:44:18 +03:00
})
it('should not leak memory', () => {
const memSize = __getWasm().memory.buffer.byteLength
for (let i = 0; i < 100; i++) {
const data = Array.from({ length: 1000 }, () => 'a').join('')
const deflated = deflateMaxSize(p.utf8Encode(data), 100)
2023-11-04 06:44:18 +03:00
2023-11-29 20:31:18 +03:00
const res = inflateSyncWrap(deflated!)
2023-11-04 06:44:18 +03:00
expect(p.utf8Decode(res)).toEqual(data)
2023-11-04 06:44:18 +03:00
}
expect(__getWasm().memory.buffer.byteLength).toEqual(memSize)
2023-11-04 06:44:18 +03:00
})
})