-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathbuffer.spec.ts
More file actions
126 lines (115 loc) · 4.06 KB
/
buffer.spec.ts
File metadata and controls
126 lines (115 loc) · 4.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
function createFrom<T>(values: valueof<T>[]): T {
let result = instantiate<T>(values.length);
// @ts-ignore
for (let i = 0; i < values.length; i++) result[i] = values[i];
return result;
}
/**
* This is the buffer test suite. For each prototype function, put a single test
* function call here.
*
* @example
* describe("buffer", () => {
* test("#alloc", () => {
* // put any expectations related to #alloc here
* });
* });
*/
import { BLOCK_MAXSIZE } from "rt/common";
describe("buffer", () => {
test("#constructor", () => {
expect<Buffer>(new Buffer(0)).toBeTruthy();
expect<Buffer>(new Buffer(10)).toHaveLength(10);
let myBuffer = new Buffer(10);
expect<ArrayBuffer>(myBuffer.buffer).toBeTruthy();
expect<ArrayBuffer>(myBuffer.buffer).toHaveLength(10);
// TODO: expectFn(() => { new Buffer(-1); }).toThrow();
// TODO: expectFn(() => { new Buffer(BLOCK_MAXSIZE + 1); }).toThrow();
});
test("#alloc", () => {
expect<Buffer>(Buffer.alloc(10)).toBeTruthy();
expect<Buffer>(Buffer.alloc(10)).toHaveLength(10);
let buff = Buffer.alloc(100);
for (let i = 0; i < buff.length; i++) expect<u8>(buff[i]).toBe(0);
expect<ArrayBuffer | null>(buff.buffer).not.toBeNull();
expect<u32>(buff.byteLength).toBe(100);
// TODO: expectFn(() => { Buffer.alloc(-1); }).toThrow();
// TODO: expectFn(() => { Buffer.alloc(BLOCK_MAXSIZE + 1); }).toThrow();
});
test("#allocUnsafe", () => {
expect<Buffer>(Buffer.allocUnsafe(10)).toBeTruthy();
expect<Buffer>(Buffer.allocUnsafe(10)).toHaveLength(10);
let buff = Buffer.allocUnsafe(100);
expect<ArrayBuffer | null>(buff.buffer).not.toBeNull();
expect<u32>(buff.byteLength).toBe(100);
// TODO: expectFn(() => { Buffer.allocUnsafe(-1); }).toThrow();
// TODO: expectFn(() => { Buffer.allocUnsafe(BLOCK_MAXSIZE + 1); }).toThrow();
});
test("#compare", () => {
let a = createFrom<Buffer>([0x05, 0x06, 0x07, 0x08]);
let b = createFrom<Buffer>([0x01, 0x02, 0x03]);
let c = createFrom<Buffer>([0x05, 0x06, 0x07]);
let d = createFrom<Buffer>([0x04, 0x05, 0x06]);
let actual: Buffer[] = [a, b, c, d];
actual.sort(Buffer.compare);
let expected: Buffer[] = [b, d, c, a];
expect<Buffer[]>(actual).toStrictEqual(expected);
});
test("#isBuffer", () => {
let a = "";
let b = new Uint8Array(0);
let c = 0;
let d = 1.1;
let e = new Buffer(0);
expect<bool>(Buffer.isBuffer<string>(a)).toBeFalsy();
expect<bool>(Buffer.isBuffer<Uint8Array>(b)).toBeFalsy();
expect<bool>(Buffer.isBuffer<i32>(c)).toBeFalsy();
expect<bool>(Buffer.isBuffer<f64>(d)).toBeFalsy();
expect<bool>(Buffer.isBuffer<Buffer>(e)).toBeTruthy();
// null checks are done by the compiler explicitly at runtime
expect<bool>(Buffer.isBuffer<Buffer | null>(null)).toBeFalsy();
});
test("#readUInt8", () => {
let buff = new Buffer(10);
buff[0] = -2;
buff[9] = 47;
// Testing casting between u8 and i8.
expect<u8>(buff.readUInt8(0)).toBe(254);
expect<u8>(buff.readUInt8()).toBe(254);
// Testing offset
expect<u8>(buff.readUInt8(9)).toBe(47);
// TODO:
// expectFn(() => {
// let newBuff = new Buffer(1);
// newBuff.readUInt8(5);
// }).toThrow();
});
test("#writeUInt8", () => {
let buff = new Buffer(5);
expect<i32>(buff.writeUInt8(4)).toBe(1);
expect<i32>(buff.writeUInt8(252,4)).toBe(5);
expect<u8>(buff[0]).toBe(4);
expect<u8>(buff[4]).toBe(252);
});
test("#writeInt8", () => {
let buff = new Buffer(5);
expect<i32>(buff.writeInt8(9)).toBe(1);
expect<i32>(buff.writeInt8(-3,4)).toBe(5);
expect<i8>(buff[0]).toBe(9);
expect<i8>(buff[4]).toBe(-3);
});
test("#readInt8", () => {
let buff = new Buffer(10);
buff[0] = 5;
buff[9] = 255;
expect<i8>(buff.readInt8(0)).toBe(5);
expect<i8>(buff.readInt8()).toBe(5);
// Testing offset, and casting between u8 and i8.
expect<i8>(buff.readInt8(9)).toBe(-1);
// TODO:
// expectFn(() => {
// let newBuff = new Buffer(1);
// newBuff.readInt8(5);
// }).toThrow();
});
});