UNPKG

@se-puu/qpack

Version:

Quick serializer and de-serializer

153 lines (149 loc) 10.3 kB
import { QDecoder } from '../../src/decoder/decoder'; import { QEncoder } from '../../src/encoder/encoder'; import { Float32, Int16, Int24, Int32, Int40, Int48, Int8, Nint5, Uint6, Uint16, Uint24, Uint32, Uint40, Uint48, Uint8} from '../../src/lib/size-enum'; import { isEqual, logTextMaker, randomFloat, randomNegativeIntBetween, randomPositiveIntBetween } from '../lib'; function _testNumber(data: number): boolean { const encoder = QEncoder.create(); const buf = encoder.encode(data); if (!buf) { return false; } const decoder=QDecoder.create(); const decode = decoder.decode<number>(buf); if (decode === undefined) { return false; } return isEqual(data, decode,encoder.__extRegistry);; } function testUintSync(): boolean { let ranVal=0; let outputText = "Uint\t\t>>>"; let status=true; outputText += logTextMaker(_testNumber(Uint6.Min) ? status&&=true : status=false, `6bit min:${Uint6.Min}`, "✓", "✗"); outputText += logTextMaker(_testNumber(Uint6.Max) ? status&&=true : status=false, `6bit max:${Uint6.Max}`, "✓", "✗"); ranVal=randomPositiveIntBetween(Uint6.Min,Uint6.Max); outputText += logTextMaker(_testNumber(ranVal) ? status&&=true : status=false, `6bit random:${ranVal}`, "✓", "✗"); console.log(outputText); outputText = "\t\t>>>"; outputText += logTextMaker(_testNumber(Uint6.Max + 1) ? status&&=true : status=false, `8bit min:${Uint6.Max+1}`, "✓", "✗"); outputText += logTextMaker(_testNumber(Uint8.Max) ? status&&=true : status=false, `8bit max:${Uint8.Max}`, "✓", "✗"); ranVal=randomPositiveIntBetween(Uint6.Max + 1,Uint8.Max); outputText += logTextMaker(_testNumber(ranVal) ? status&&=true : status=false, `8bit random:${ranVal}`, "✓", "✗"); console.log(outputText); outputText = "\t\t>>>"; outputText += logTextMaker(_testNumber(Uint8.Max + 1) ? status&&=true : status=false, `16bit min:${Uint8.Max+1}`, "✓", "✗"); outputText += logTextMaker(_testNumber(Uint16.Max) ? status&&=true : status=false, `16bit max:${Uint16.Max}`, "✓", "✗"); ranVal=randomPositiveIntBetween(Uint8.Max + 1,Uint16.Max); outputText += logTextMaker(_testNumber(ranVal) ? status&&=true : status=false, `16bit random:${ranVal}`, "✓", "✗"); console.log(outputText); outputText = "\t\t>>>"; outputText += logTextMaker(_testNumber(Uint16.Max + 1) ? status&&=true : status=false, `24bit min:${Uint16.Max+1}`, "✓", "✗"); outputText += logTextMaker(_testNumber(Uint24.Max) ? status&&=true : status=false, `24bit max:${Uint24.Max}`, "✓", "✗"); ranVal=randomPositiveIntBetween(Uint16.Max + 1,Uint24.Max); outputText += logTextMaker(_testNumber(ranVal) ? status&&=true : status=false, `24bit random:${ranVal}`, "✓", "✗"); console.log(outputText); outputText="\t\t>>>"; outputText += logTextMaker(_testNumber(Uint24.Max + 1) ? status&&=true : status=false, `32bit min:${Uint24.Max+1}`, "✓", "✗"); outputText += logTextMaker(_testNumber(Uint32.Max) ? status&&=true : status=false, `32bit max:${Uint32.Max}`, "✓", "✗"); ranVal=randomPositiveIntBetween(Uint24.Max + 1,Uint32.Max); outputText += logTextMaker(_testNumber(ranVal) ? status&&=true : status=false, `32bit random:${ranVal}`, "✓", "✗"); console.log(outputText); outputText="\t\t>>>"; outputText += logTextMaker(_testNumber(Uint32.Max + 1) ? status&&=true : status=false, `40bit min:${Uint32.Max+1}`, "✓", "✗"); outputText += logTextMaker(_testNumber(Uint40.Max) ? status&&=true : status=false, `40bit max:${Uint40.Max}`, "✓", "✗"); ranVal=randomPositiveIntBetween(Uint32.Max + 1,Uint40.Max); outputText += logTextMaker(_testNumber(ranVal) ? status&&=true : status=false, `40bit random:${ranVal}`, "✓", "✗"); console.log(outputText); outputText="\t\t>>>"; outputText += logTextMaker(_testNumber(Uint40.Max + 1) ? status&&=true : status=false, `48bit min:${Uint40.Max+1}`, "✓", "✗"); outputText += logTextMaker(_testNumber(Uint48.Max) ? status&&=true : status=false, `48bit max:${Uint48.Max}`, "✓", "✗"); ranVal=randomPositiveIntBetween(Uint40.Max + 1,Uint48.Max); outputText += logTextMaker(_testNumber(ranVal) ? status&&=true : status=false, `48bit random:${ranVal}`, "✓", "✗"); console.log(outputText); outputText="\t\t>>>"; outputText += logTextMaker(_testNumber(Uint48.Max + 1) ? status&&=true : status=false, `safeUint min:${Uint48.Max+1}`, "✓", "✗"); outputText += logTextMaker(_testNumber(Number.MAX_SAFE_INTEGER) ? status&&=true : status=false, `safeUint max:${Number.MAX_SAFE_INTEGER}`, "✓", "✗"); ranVal=randomPositiveIntBetween(Uint48.Max + 1,Number.MAX_SAFE_INTEGER); outputText += logTextMaker(_testNumber(ranVal) ? status&&=true : status=false, `safeUint random:${ranVal}`, "✓", "✗"); console.log(outputText); return status; } function testIntSync(): boolean { let ranVal=0; let outputText = "Int\t\t>>>"; let status=true; outputText += logTextMaker(_testNumber(Nint5.Max) ? status&&=true : status=false, `nint5 max:${Nint5.Max}`, "✓", "✗"); outputText += logTextMaker(_testNumber(Nint5.Min) ? status&&=true : status=false, `nint5 min:${Nint5.Min}`, "✓", "✗"); ranVal=randomNegativeIntBetween(Nint5.Min,Nint5.Max); outputText += logTextMaker(_testNumber(ranVal) ? status&&=true : status=false, `nint5 random${ranVal}`, "✓", "✗"); console.log(outputText); outputText = "\t\t>>>"; outputText += logTextMaker(_testNumber(Nint5.Min -1 ) ? status&&=true : status=false, `8bit max:${Nint5.Min-1}`, "✓", "✗"); outputText += logTextMaker(_testNumber(Int8.Min) ? status&&=true : status=false, `8bit min:${Nint5.Min}`, "✓", "✗"); ranVal=randomNegativeIntBetween(Nint5.Min - 1,Int8.Min); outputText += logTextMaker(_testNumber(ranVal) ? status&&=true : status=false, `8bit random:${ranVal}`, "✓", "✗"); console.log(outputText); outputText = "\t\t>>>"; outputText += logTextMaker(_testNumber(Int8.Min - 1) ? status&&=true : status=false, `16bit max:${Int8.Min-1}`, "✓", "✗"); outputText += logTextMaker(_testNumber(Int16.Min) ? status&&=true : status=false, `16bit min:${Int16.Min}`, "✓", "✗"); ranVal=randomNegativeIntBetween(Int8.Min - 1,Int16.Min); outputText += logTextMaker(_testNumber(ranVal) ? status&&=true : status=false, `16bit random:${ranVal}`, "✓", "✗"); console.log(outputText); outputText = "\t\t>>>"; outputText += logTextMaker(_testNumber(Int16.Min - 1) ? status&&=true : status=false, `24bit max:${Int16.Min-1}`, "✓", "✗"); outputText += logTextMaker(_testNumber(Int24.Min) ? status&&=true : status=false, `24bit min:${Int24.Min}`, "✓", "✗"); ranVal=randomNegativeIntBetween(Int16.Min - 1,Int24.Min); outputText += logTextMaker(_testNumber(ranVal) ? status&&=true : status=false, `24bit random:${ranVal}`, "✓", "✗"); console.log(outputText); outputText="\t\t>>>"; outputText += logTextMaker(_testNumber(Int24.Min - 1) ? status&&=true : status=false, `32bit max:${Int24.Min-1}`, "✓", "✗"); outputText += logTextMaker(_testNumber(Int32.Min) ? status&&=true : status=false, `32bit min:${Int32.Min}`, "✓", "✗"); ranVal=randomNegativeIntBetween(Int24.Min - 1,Int32.Min); outputText += logTextMaker(_testNumber(ranVal) ? status&&=true : status=false, `32bit random:${ranVal}`, "✓", "✗"); console.log(outputText); outputText="\t\t>>>"; outputText += logTextMaker(_testNumber(Int32.Min - 1) ? status&&=true : status=false, `40bit max:${Int32.Min-1}`, "✓", "✗"); outputText += logTextMaker(_testNumber(Int40.Min) ? status&&=true : status=false, `40bit min:${Int40.Min}`, "✓", "✗"); ranVal=randomNegativeIntBetween(Int32.Min - 1,Int40.Min); outputText += logTextMaker(_testNumber(ranVal) ? status&&=true : status=false, `40bit random:${ranVal}`, "✓", "✗"); console.log(outputText); outputText="\t\t>>>"; outputText += logTextMaker(_testNumber(Int40.Min - 1) ? status&&=true : status=false, `48bit max:${Int40.Min-1}`, "✓", "✗"); outputText += logTextMaker(_testNumber(Int48.Min) ? status&&=true : status=false, `48bit min:${Int48.Min}`, "✓", "✗"); ranVal=randomNegativeIntBetween(Int40.Min - 1,Int48.Min); outputText += logTextMaker(_testNumber(ranVal) ? status&&=true : status=false, `48bit random:${ranVal}`, "✓", "✗"); console.log(outputText); outputText="\t\t>>>"; outputText += logTextMaker(_testNumber(Int48.Min - 1) ? status&&=true : status=false, `safeInt max:${Int48.Min-1}`, "✓", "✗"); outputText += logTextMaker(_testNumber(Number.MIN_SAFE_INTEGER) ? status&&=true : status=false, `safeInt min:${Number.MIN_SAFE_INTEGER}`, "✓", "✗"); ranVal=randomNegativeIntBetween(Int48.Min - 1,Number.MIN_SAFE_INTEGER); outputText += logTextMaker(_testNumber(ranVal) ? status&&=true : status=false, `safeInt random:${ranVal}`, "✓", "✗"); console.log(outputText); return status; } function testFloat32Sync(): boolean { let outputText = "Float\t\t>>>"; let status=true; outputText += logTextMaker(_testNumber(0) ? status&&=true : status=false, `32bit min`, "✓", "✗"); outputText += logTextMaker(_testNumber(Float32.Max/1) ? status&&=true : status=false, `32bit max`, "✓", "✗"); outputText += logTextMaker(_testNumber(randomFloat(Float32.Max)) ? status&&=true : status=false, `32bit random`, "✓", "✗"); console.log(outputText); return status; } function testFloat64Sync(): boolean { let outputText = "\t\t>>>"; let status=true; outputText += logTextMaker(_testNumber(0) ? status&&=true : status=false, `64bit min`, "✓", "✗"); outputText += logTextMaker(_testNumber(Number.MAX_VALUE) ? status&&=true : status=false, `64bit max`, "✓", "✗"); outputText += logTextMaker(_testNumber(randomFloat(Number.MAX_VALUE)) ? status&&=true : status=false, `64bit random`, "✓", "✗"); console.log(outputText); return status; } export function testNumberSync(): boolean { return ( testUintSync() && testIntSync() && testFloat32Sync() && testFloat64Sync() ); }