// Copyright (c) 2013, 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.

// @dart = 2.9

/// @assertion E first
/// Returns the first element.
/// @description Checks that [first] can be set.
/// @author msyabro
/// @author sgrekhov@unipro.ru
/// @issue dart-lang/co19#130


import "dart:typed_data";
import "../../../Utils/expect.dart";

void check(List<int> array) {
  dynamic l = new Uint32List.fromList(array);
  l.first = 3;
  Expect.equals(3, l.first);
}
void checkClear(length) {
  dynamic l = new Uint32List(length);
  l.first = 3;
  Expect.equals(3, l.first);
}

main() {
  check([1]);
  check([1, 2, 3, 4, 5]);
  check([
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  ]);

  checkClear(1);
  checkClear(100);
}
