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

import "package:expect/expect.dart";

class ConstListTest {
  static testConstructors() {
    List fixedList = new List(4);
    List fixedList2 = new List(4);
    List growableList = new List();
    List growableList2 = new List();
    for (int i = 0; i < 4; i++) {
      fixedList[i] = i;
      fixedList2[i] = i;
      growableList.add(i);
      growableList2.add(i);
    }
    Expect.equals(growableList, growableList);
    Expect.notEquals(growableList, growableList2);
    Expect.equals(fixedList, fixedList);
    Expect.notEquals(fixedList, fixedList2);
    Expect.notEquals(fixedList, growableList);
    growableList.add(4);
    Expect.notEquals(fixedList, growableList);
    Expect.equals(4, growableList.removeLast());
    Expect.notEquals(fixedList, growableList);
    fixedList[3] = 0;
    Expect.notEquals(fixedList, growableList);
  }

  static testLiterals() {
    dynamic a = [1, 2, 3.1];
    dynamic b = [1, 2, 3.1];
    Expect.notEquals(a, b);
    a = const [1, 2, 3.1];
    b = const [1, 2, 3.1];
    Expect.identical(a, b);
    a = const <num>[1, 2, 3.1];
    b = const [1, 2, 3.1];
    Expect.identical(a, b);
    a = const <dynamic>[1, 2, 3.1];
    b = const [1, 2, 3.1];
    Expect.notEquals(a, b);
  }
}

main() {
  ConstListTest.testConstructors();
  ConstListTest.testLiterals();
}
