// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

/// @assertion JSInt32Array.withLength( int length )
/// Creates a JavaScript `Int16Array` of size `length` whose elements are
/// initialized to `0`.
///
/// @description Checks that this constructor creates a JavaScript
/// `Int32Array` of size `length` whose elements are initialized to `0`.
/// @author sgrekhov22@gmail.com

import 'dart:js_interop';
import 'dart:js_interop_unsafe';
import '../../../Utils/expect.dart';
import '../js_utils.dart';

test(int length) {
  JSInt32Array ar = JSInt32Array.withLength(length);
  globalContext["ar"] = ar;
  eval(r'''
    globalThis.length = ar.length;
    globalThis.byteOffset = ar.byteOffset;
  ''');
  Expect.equals(length, (globalContext["length"] as JSNumber).toDartInt);
  Expect.equals(0, (globalContext["byteOffset"] as JSNumber).toDartInt);
  for (int i = 0; i < length; i++) {
    eval("globalThis.v$i = ar[$i];");
    Expect.equals(0, (globalContext["v$i"] as JSNumber).toDartInt);
  }
}

main() {
  test(0);
  test(1);
  test(3);
}
