11cb0ef41Sopenharmony_ci'use strict';
21cb0ef41Sopenharmony_ciconst common = require('../../common');
31cb0ef41Sopenharmony_ciconst assert = require('assert');
41cb0ef41Sopenharmony_ci
51cb0ef41Sopenharmony_ci// Testing api calls for arrays
61cb0ef41Sopenharmony_ciconst test_array = require(`./build/${common.buildType}/test_array`);
71cb0ef41Sopenharmony_ci
81cb0ef41Sopenharmony_ciconst array = [
91cb0ef41Sopenharmony_ci  1,
101cb0ef41Sopenharmony_ci  9,
111cb0ef41Sopenharmony_ci  48,
121cb0ef41Sopenharmony_ci  13493,
131cb0ef41Sopenharmony_ci  9459324,
141cb0ef41Sopenharmony_ci  { name: 'hello' },
151cb0ef41Sopenharmony_ci  [
161cb0ef41Sopenharmony_ci    'world',
171cb0ef41Sopenharmony_ci    'node',
181cb0ef41Sopenharmony_ci    'abi',
191cb0ef41Sopenharmony_ci  ],
201cb0ef41Sopenharmony_ci];
211cb0ef41Sopenharmony_ci
221cb0ef41Sopenharmony_ciassert.throws(
231cb0ef41Sopenharmony_ci  () => {
241cb0ef41Sopenharmony_ci    test_array.TestGetElement(array, array.length + 1);
251cb0ef41Sopenharmony_ci  },
261cb0ef41Sopenharmony_ci  /^Error: assertion \(\(\(uint32_t\)index < length\)\) failed: Index out of bounds!$/,
271cb0ef41Sopenharmony_ci);
281cb0ef41Sopenharmony_ci
291cb0ef41Sopenharmony_ciassert.throws(
301cb0ef41Sopenharmony_ci  () => {
311cb0ef41Sopenharmony_ci    test_array.TestGetElement(array, -2);
321cb0ef41Sopenharmony_ci  },
331cb0ef41Sopenharmony_ci  /^Error: assertion \(index >= 0\) failed: Invalid index\. Expects a positive integer\.$/,
341cb0ef41Sopenharmony_ci);
351cb0ef41Sopenharmony_ci
361cb0ef41Sopenharmony_ciarray.forEach(function(element, index) {
371cb0ef41Sopenharmony_ci  assert.strictEqual(test_array.TestGetElement(array, index), element);
381cb0ef41Sopenharmony_ci});
391cb0ef41Sopenharmony_ci
401cb0ef41Sopenharmony_ci
411cb0ef41Sopenharmony_ciassert.deepStrictEqual(test_array.New(array), array);
421cb0ef41Sopenharmony_ci
431cb0ef41Sopenharmony_ciassert(test_array.TestHasElement(array, 0));
441cb0ef41Sopenharmony_ciassert.strictEqual(test_array.TestHasElement(array, array.length + 1), false);
451cb0ef41Sopenharmony_ci
461cb0ef41Sopenharmony_ciassert(test_array.NewWithLength(0) instanceof Array);
471cb0ef41Sopenharmony_ciassert(test_array.NewWithLength(1) instanceof Array);
481cb0ef41Sopenharmony_ci// Check max allowed length for an array 2^32 -1
491cb0ef41Sopenharmony_ciassert(test_array.NewWithLength(4294967295) instanceof Array);
501cb0ef41Sopenharmony_ci
511cb0ef41Sopenharmony_ci{
521cb0ef41Sopenharmony_ci  // Verify that array elements can be deleted.
531cb0ef41Sopenharmony_ci  const arr = ['a', 'b', 'c', 'd'];
541cb0ef41Sopenharmony_ci
551cb0ef41Sopenharmony_ci  assert.strictEqual(arr.length, 4);
561cb0ef41Sopenharmony_ci  assert.strictEqual(2 in arr, true);
571cb0ef41Sopenharmony_ci  assert.strictEqual(test_array.TestDeleteElement(arr, 2), true);
581cb0ef41Sopenharmony_ci  assert.strictEqual(arr.length, 4);
591cb0ef41Sopenharmony_ci  assert.strictEqual(2 in arr, false);
601cb0ef41Sopenharmony_ci}
61