Skip to content

Commit 6f5f8aa

Browse files
committed
[Fix] Switch to Buffer[], remove excess changetype()
1 parent ddeb2c3 commit 6f5f8aa

File tree

2 files changed

+14
-22
lines changed

2 files changed

+14
-22
lines changed

assembly/buffer/index.ts

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,7 @@ export class Buffer extends Uint8Array {
1212
return new Buffer(size);
1313
}
1414

15-
public static concat<T>(items: T, length: i32): Buffer {
16-
if (!isArray<T>()) {
17-
ERROR("Buffer.concat<T> must accept an Array where T extends Array<Uint8Array | Buffer>");
18-
}
19-
assert(unchecked(items[0]) instanceof Uint8Array); // Can this be a static check?
20-
15+
public static concat(items: Buffer[], length: i32): Buffer {
2116
let size: usize = 0;
2217
let itemCount = usize(items.length);
2318
let itemsDataStart = items.dataStart;
@@ -34,7 +29,7 @@ export class Buffer extends Uint8Array {
3429
let result = changetype<Buffer>(__alloc(offsetof<Buffer>(), idof<Buffer>()));
3530

3631
result.data = changetype<ArrayBuffer>(buffer);
37-
result.dataStart = changetype<usize>(buffer);
32+
result.dataStart = buffer;
3833
let start: usize = result.dataStart;
3934
for (let i: usize = 0; i < itemCount && size > 0; i++) {
4035
let item = load<usize>(itemsDataStart + (i << alignof<usize>()));
@@ -55,7 +50,7 @@ export class Buffer extends Uint8Array {
5550
// This retains the pointer to the result Buffer.
5651
let result = changetype<Buffer>(__alloc(offsetof<Buffer>(), idof<Buffer>()));
5752
result.data = changetype<ArrayBuffer>(buffer);
58-
result.dataStart = changetype<usize>(buffer);
53+
result.dataStart = buffer;
5954
result.dataLength = size;
6055
return result;
6156
}

tests/buffer.spec.ts

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
function bufferFrom(values: i32[]): Buffer {
2+
let buffer = new Buffer(values.length);
3+
for (let i = 0; i < values.length; i++) buffer[i] = <u8>values[i];
4+
return buffer;
5+
}
6+
17
/**
28
* This is the buffer test suite. For each prototype function, put a single test
39
* function call here.
@@ -9,8 +15,6 @@
915
* });
1016
* });
1117
*/
12-
import { BLOCK_MAXSIZE } from "rt/common";
13-
1418
describe("buffer", () => {
1519
test("#constructor", () => {
1620
expect<Buffer>(new Buffer(0)).toBeTruthy();
@@ -52,19 +56,12 @@ describe("buffer", () => {
5256
}
5357
list.push(buff);
5458
}
55-
let actual: Buffer = Buffer.concat<Buffer[]>(list, 15);
59+
let actual: Buffer = Buffer.concat(list, 15);
60+
61+
let expected: Buffer = bufferFrom([0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 3, 3, 4]);
5662

57-
let expected: Buffer = Buffer.alloc(15);
58-
expected[5] = 1;
59-
expected[6] = 1;
60-
expected[7] = 1;
61-
expected[8] = 1;
62-
expected[9] = 2;
63-
expected[10] = 2;
64-
expected[11] = 2;
65-
expected[12] = 3;
66-
expected[13] = 3;
67-
expected[14] = 4;
63+
// TODO: When as-pect releases 2.2.1
64+
// expect<Buffer>(actual).toStrictEqual(expected);
6865
expect<ArrayBuffer>(actual.buffer).toStrictEqual(expected.buffer);
6966
});
7067
});

0 commit comments

Comments
 (0)