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