• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (c) 2025 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15import {BusinessError} from "@ohos.base";
16import * as arraybuffer from "arraybuffer";
17
18loadLibrary("ani_arraybuffer");
19
20function arraybuffer_input() {
21    // case 1 : test sumArrayu8,The input parameter is ArrayBuffer, and the
22    // output parameter is u8
23    let numbersU8: byte[] = [1, 2, 3, 4, 5];
24    let arrbuf1: ArrayBuffer = new ArrayBuffer(numbersU8.length);
25    for (let i = 0; i < numbersU8.length; i++) {
26        arrbuf1.set(i, numbersU8[i]);
27    }
28    let sumArrayu8 = arraybuffer.SumArrayU8(arrbuf1)
29    console.log("sumArrayu8 is " + sumArrayu8)
30    assertEQ(sumArrayu8, 15)
31}
32
33function arraybuffer_return() {
34    // case 2 : test getArrayBuffer,The input parameter is u8, and the output
35    // parameter is ArrayBuffer
36    let getArrayBuffer = arraybuffer.GetArrayBuffer(4 as byte)
37    console.log("getArrayBuffer length: " + getArrayBuffer.getByteLength());
38    assertEQ(getArrayBuffer.getByteLength(), 4)
39    for (let i = 0; i < getArrayBuffer.getByteLength(); i++) {
40        console.log(
41            `getArrayBuffer Byte at index ${i}: ${getArrayBuffer.at(i)}`);
42        assertEQ(getArrayBuffer.at(i), 4)
43    }
44}
45
46function arraybuffer_inout() {
47    // case 3 : test doubleArrayBuffer,The input parameter is ArrayBuffer, and
48    // the output parameter is ArrayBuffer
49    let numbers2: byte[] = [3, 4, 5, 6, 7];
50    let arrbuf3: ArrayBuffer = new ArrayBuffer(numbers2.length);
51    for (let i = 0; i < numbers2.length; i++) {
52        arrbuf3.set(i, numbers2[i]);
53    }
54    let doubleArrayBuffer = arraybuffer.DoubleArrayBuffer(arrbuf3)
55    console.log(
56        "doubleArrayBuffer length: " + doubleArrayBuffer.getByteLength());
57    assertEQ(doubleArrayBuffer.getByteLength(), 5)
58
59    for (let i = 0; i < doubleArrayBuffer.getByteLength(); i++) {
60        console.log(
61            `doubleArrayBuffer Byte at index ${i}: ${doubleArrayBuffer.at(i)}`);
62        assertEQ(doubleArrayBuffer.at(i), numbers2[i] * 2)
63    }
64}
65
66function arraybuffer_uint8toarraybuffer() {
67    // case 4 : test Uint8Array to ArrayBuffer conversion
68    let uint8Array = new Uint8Array([2, 3, 4, 5, 6]);
69    let arrbuf4: ArrayBuffer =
70        uint8Array.buffer as ArrayBuffer;  // Convert Uint8Array to ArrayBuffer
71    // Verify ArrayBuffer length
72    console.log("arrbuf4 length: " + arrbuf4.getByteLength());
73    assertEQ(arrbuf4.getByteLength(), uint8Array.length);
74    // Verify ArrayBuffer content
75    for (let i = 0; i < arrbuf4.getByteLength(); i++) {
76        console.log(`arrbuf4 Byte at index ${i}: ${arrbuf4.at(i)}`);
77        assertEQ(arrbuf4.at(i), uint8Array[i]);
78    }
79    // Optionally, pass the ArrayBuffer to a function for further validation
80    let sumArrayu8FromUint8Array = arraybuffer.SumArrayU8(arrbuf4);
81    console.log("sumArrayu8FromUint8Array is " + sumArrayu8FromUint8Array);
82    assertEQ(sumArrayu8FromUint8Array, 20);  // 2 + 3 + 4 + 5 + 6 = 20
83}
84
85function arraybuffer_dataview() {
86    // case 6 : test Uint8Array to ArrayBuffer conversion, use DataView
87    let uint8ArrayData: Uint8Array = new Uint8Array([8, 9, 10]);
88    let arrayBufferFromUint8Array: ArrayBuffer =
89        new ArrayBuffer(uint8ArrayData.length);
90    let view = new DataView(arrayBufferFromUint8Array);
91    for (let i = 0; i < uint8ArrayData.length; i++) {
92        view.setUint8(i, uint8ArrayData[i]);
93    }
94
95    for (let i = 0; i < uint8ArrayData.length; i++) {
96        let value = view.getUint8(i);
97        console.log(`Value at index ${i} in ArrayBuffer: ${value}`);
98        assertEQ(value, uint8ArrayData[i]);
99    }
100    // Optionally, pass the ArrayBuffer to a function for further validation
101    let sumArrayBufferFromUint8Array =
102        arraybuffer.SumArrayU8(arrayBufferFromUint8Array);
103    console.log(
104        "sumArrayBufferFromUint8Array is " + sumArrayBufferFromUint8Array);
105    assertEQ(sumArrayBufferFromUint8Array, 27);  // 8 + 9 + 10 = 27
106}
107
108function arrayi8_input() {
109    let int8Array: byte[] = [1, 2, 3, 4, 5];
110    let sumArrayi8 = arraybuffer.SumArrayI8(int8Array)
111    console.log("sumArrayi8 is " + sumArrayi8)
112    assertEQ(sumArrayi8, 15)
113}
114
115function arrayi8_return() {
116    let arrayi8 = arraybuffer.GetArrayI8(4 as byte)
117    console.log("getArrayi8 length: " + arrayi8.length);
118    assertEQ(arrayi8.length, 4)
119    for (let i = 0; i < arrayi8.length; i++) {
120        console.log(`getArrayi8 Byte at index ${i}: ${arrayi8[i]}`);
121        assertEQ(arrayi8[i], 4)
122    }
123}
124
125function arrayi8_inout() {
126    let numbers2: byte[] = [3, 4, 5, 6, 7];
127    let doubleArrayBuffer = arraybuffer.DoubleI8(numbers2)
128    console.log("arrayi8_inout length: " + doubleArrayBuffer.length);
129    assertEQ(doubleArrayBuffer.length, 5)
130
131    for (let i = 0; i < doubleArrayBuffer.length; i++) {
132        console.log(
133            `arrayi8_inout Byte at index ${i}: ${doubleArrayBuffer[i]}`);
134        assertEQ(doubleArrayBuffer[i], numbers2[i] * 2)
135    }
136}
137
138function arrayi16_input() {
139    let int16Array: short[] = [1, 2, 3, 4, 5];
140    let sumArrayi16 = arraybuffer.SumArrayI16(int16Array)
141    console.log("sumArrayi16 is " + sumArrayi16)
142    assertEQ(sumArrayi16, 15)
143}
144
145function arrayi16_return() {
146    let arrayi16 = arraybuffer.GetArrayI16(4 as short)
147    console.log("arrayi16 length: " + arrayi16.length);
148    assertEQ(arrayi16.length, 4)
149    for (let i = 0; i < arrayi16.length; i++) {
150        console.log(`arrayi16 Short at index ${i}: ${arrayi16[i]}`);
151        assertEQ(arrayi16[i], 4)
152    }
153}
154
155function arrayi16_inout() {
156    let numbers2: short[] = [3, 4, 5, 6, 7];
157    let doubleArrayBuffer = arraybuffer.DoubleI16(numbers2)
158    console.log("arrayi16_inout length: " + doubleArrayBuffer.length);
159    assertEQ(doubleArrayBuffer.length, 5)
160
161    for (let i = 0; i < doubleArrayBuffer.length; i++) {
162        console.log(
163            `arrayi16_inout Short at index ${i}: ${doubleArrayBuffer[i]}`);
164        assertEQ(doubleArrayBuffer[i], numbers2[i] * 2)
165    }
166}
167
168function arrayi32_input() {
169    let int32Array: int[] = [1, 2, 3, 4, 5];
170    let sumArrayi32 = arraybuffer.SumArrayI32(int32Array)
171    console.log("sumArrayi32 is " + sumArrayi32)
172    assertEQ(sumArrayi32, 15)
173}
174
175function arrayi32_return() {
176    let arrayi32 = arraybuffer.GetArrayI32(4)
177    console.log("arrayi32 length: " + arrayi32.length);
178    assertEQ(arrayi32.length, 4)
179    for (let i = 0; i < arrayi32.length; i++) {
180        console.log(`arrayi32 int at index ${i}: ${arrayi32[i]}`);
181        assertEQ(arrayi32[i], 4)
182    }
183}
184
185function arrayi32_inout() {
186    let numbers2: int[] = [3, 4, 5, 6, 7];
187    let doubleArrayBuffer = arraybuffer.DoubleI32(numbers2)
188    console.log("arrayi16_inout length: " + doubleArrayBuffer.length);
189    assertEQ(doubleArrayBuffer.length, 5)
190
191    for (let i = 0; i < doubleArrayBuffer.length; i++) {
192        console.log(
193            `arrayi16_inout int at index ${i}: ${doubleArrayBuffer[i]}`);
194        assertEQ(doubleArrayBuffer[i], numbers2[i] * 2)
195    }
196}
197
198function arrayi64_input() {
199    let int64Array: long[] = [10, 20, 30, 40, 50];
200    let sumArrayi64 = arraybuffer.SumArrayI64(int64Array)
201    console.log("sumArrayi64 is " + sumArrayi64)
202    assertEQ(sumArrayi64, 150)
203}
204
205function arrayi64_return() {
206    let arrayi64 = arraybuffer.GetArrayI64(4)
207    console.log("arrayi64 length: " + arrayi64.length);
208    assertEQ(arrayi64.length, 4)
209    for (let i = 0; i < arrayi64.length; i++) {
210        console.log(`arrayi64 int at index ${i}: ${arrayi64[i]}`);
211        assertEQ(arrayi64[i], 4)
212    }
213}
214
215function arrayi64_inout() {
216    let numbers2: long[] = [30, 40, 50, 60, 70];
217    let doubleArrayBuffer = arraybuffer.DoubleI64(numbers2)
218    console.log("arrayi16_inout length: " + doubleArrayBuffer.length);
219    assertEQ(doubleArrayBuffer.length, 5)
220
221    for (let i = 0; i < doubleArrayBuffer.length; i++) {
222        console.log(
223            `arrayi16_inout long at index ${i}: ${doubleArrayBuffer[i]}`);
224        assertEQ(doubleArrayBuffer[i], numbers2[i] * 2)
225    }
226}
227
228function arrayf32_input() {
229    let f32Array: float[] = [10, 20, 30, 40, 50];
230    let sumArrayf32 = arraybuffer.SumArrayF32(f32Array)
231    console.log("sumArrayf32 is " + sumArrayf32)
232    assertEQ(sumArrayf32, 150)
233}
234
235function arrayf32_return() {
236    let arrayf32 = arraybuffer.GetArrayF32(4)
237    console.log("arrayf32 length: " + arrayf32.length);
238    assertEQ(arrayf32.length, 4)
239    for (let i = 0; i < arrayf32.length; i++) {
240        console.log(`arrayf32 float at index ${i}: ${arrayf32[i]}`);
241        assertEQ(arrayf32[i], 4)
242    }
243}
244
245function arrayf32_inout() {
246    let numbers2: float[] = [30, 40, 50, 60, 70];
247    let doubleArrayBuffer = arraybuffer.DoubleF32(numbers2)
248    console.log("arrayi16_inout length: " + doubleArrayBuffer.length);
249    assertEQ(doubleArrayBuffer.length, 5)
250
251    for (let i = 0; i < doubleArrayBuffer.length; i++) {
252        console.log(
253            `arrayi16_inout long at index ${i}: ${doubleArrayBuffer[i]}`);
254        assertEQ(doubleArrayBuffer[i], numbers2[i] * 2)
255    }
256}
257
258function arrayf64_input() {
259    let f64Array: double[] = [10, 20, 30, 40, 50];
260    let sumArrayf64 = arraybuffer.SumArrayF64(f64Array)
261    console.log("sumArrayf64 is " + sumArrayf64)
262    assertEQ(sumArrayf64, 150)
263}
264
265function arrayf64_return() {
266    let arrayf64 = arraybuffer.GetArrayF64(4)
267    console.log("arrayf64 length: " + arrayf64.length);
268    assertEQ(arrayf64.length, 4)
269    for (let i = 0; i < arrayf64.length; i++) {
270        console.log(`arrayf64 double at index ${i}: ${arrayf64[i]}`);
271        assertEQ(arrayf64[i], 4)
272    }
273}
274
275function arrayf64_inout() {
276    let numbers2: double[] = [30, 40, 50, 60, 70];
277    let doubleArrayBuffer = arraybuffer.DoubleF64(numbers2)
278    console.log("arrayi16_inout length: " + doubleArrayBuffer.length);
279    assertEQ(doubleArrayBuffer.length, 5)
280
281    for (let i = 0; i < doubleArrayBuffer.length; i++) {
282        console.log(
283            `arrayi16_inout double at index ${i}: ${doubleArrayBuffer[i]}`);
284        assertEQ(doubleArrayBuffer[i], numbers2[i] * 2)
285    }
286}
287
288function int8Array_inout() {
289    let buf: Int8Array = new Int8Array([10, 20, 30, 60]);
290    let ret = arraybuffer.doubleInt8Array(buf);
291    for (let i = 0; i < ret.length; i++) {
292        console.log(`Int8Array_inout->  index ${i}: ${ret[i]}`);
293        assertEQ(ret[i], buf[i] * 2)
294    }
295}
296
297function int16Array_inout() {
298    let buf: Int16Array = new Int16Array([1000, 2000, 3000, 4000]);
299    let ret = arraybuffer.doubleInt16Array(buf);
300    for (let i = 0; i < ret.length; i++) {
301        console.log(`int16Array_inout->  index ${i}: ${ret[i]}`);
302        assertEQ(ret[i], buf[i] * 2)
303    }
304}
305
306function int32Array_inout() {
307    let buf: Int32Array = new Int32Array([100000, 200000, 300000, 400000]);
308    let ret = arraybuffer.doubleInt32Array(buf);
309    for (let i = 0; i < ret.length; i++) {
310        console.log(`Int32Array_inout->  index ${i}: ${ret[i]}`);
311        assertEQ(ret[i], buf[i] * 2)
312    }
313}
314
315function uint8Array_inout() {
316    let buf: Uint8Array = new Uint8Array([10, 20, 30, 40]);
317    let ret = arraybuffer.doubleUint8Array(buf);
318    for (let i = 0; i < ret.length; i++) {
319        console.log(`uint8Array_inout->  index ${i}: ${ret[i]}`);
320        assertEQ(ret[i], buf[i] * 2)
321    }
322}
323
324function uint16Array_inout() {
325    let buf: Uint16Array = new Uint16Array([1000, 2000, 3000, 4000]);
326    let ret = arraybuffer.doubleUint16Array(buf);
327    for (let i = 0; i < ret.length; i++) {
328        console.log(`uint16Array_inout->  index ${i}: ${ret[i]}`);
329        assertEQ(ret[i], buf[i] * 2)
330    }
331}
332
333function uint32Array_inout() {
334    let buf: Uint32Array = new Uint32Array([100000, 200000, 300000, 400000]);
335    let ret = arraybuffer.doubleUint32Array(buf);
336    for (let i = 0; i < ret.length; i++) {
337        console.log(`uint32Array_inout->  index ${i}: ${ret[i]}`);
338        assertEQ(ret[i], buf[i] * 2)
339    }
340}
341
342function main() {
343    const suite = new ArkTestsuite("arraybuffer testcase")
344
345    suite.addTest("arraybuffer_input", arraybuffer_input)
346    suite.addTest("arraybuffer_return", arraybuffer_return)
347    suite.addTest("arraybuffer_inout", arraybuffer_inout)
348    suite.addTest(
349        "arraybuffer_uint8toarraybuffer", arraybuffer_uint8toarraybuffer)
350    suite.addTest("arraybuffer_dataview", arraybuffer_dataview)
351
352    suite.addTest("arrayi8_input", arrayi8_input)
353    suite.addTest("arrayi8_return", arrayi8_return)
354    suite.addTest("arrayi8_return", arrayi8_inout)
355
356    suite.addTest("arrayi16_input", arrayi16_input)
357    suite.addTest("arrayi16_return", arrayi16_return)
358    suite.addTest("arrayi16_inout", arrayi16_inout)
359
360    suite.addTest("arrayi32_input", arrayi32_input)
361    suite.addTest("arrayi32_return", arrayi32_return)
362    suite.addTest("arrayi32_inout", arrayi32_inout)
363
364    suite.addTest("arrayi64_input", arrayi64_input)
365    suite.addTest("arrayi64_return", arrayi64_return)
366    suite.addTest("arrayi64_inout", arrayi64_inout)
367
368    suite.addTest("arrayf32_input", arrayf32_input)
369    suite.addTest("arrayf32_return", arrayf32_return)
370    suite.addTest("arrayf32_inout", arrayf32_inout)
371
372    suite.addTest("arrayf64_input", arrayf64_input)
373    suite.addTest("arrayf64_return", arrayf64_return)
374    suite.addTest("arrayf64_inout", arrayf64_inout)
375
376    suite.addTest("int8Array_inout", int8Array_inout)
377    suite.addTest("int16Array_inout", int16Array_inout)
378    suite.addTest("int32Array_inout", int32Array_inout)
379
380    suite.addTest("uint8Array_inout", uint8Array_inout)
381    suite.addTest("uint16Array_inout", uint16Array_inout)
382    suite.addTest("uint32Array_inout", uint32Array_inout)
383    exit(suite.run())
384}
385