// 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.

void main() {
  // Normal modifiable list.
  var l1 = [0, 1, 2, 3, 4];

  bool checkedMode = false;
  assert(checkedMode = true);

  // Index must be integer and in range.
  Expect.throws(() { l1.insert(-1, 5); },
                (e) => e is RangeError,
                "negative");
  Expect.throws(() { l1.insert(6, 5); },
                (e) => e is RangeError,
                "too large");
  Expect.throws(() { l1.insert(null, 5); });
  Expect.throws(() { l1.insert("1", 5); });
  Expect.throws(() { l1.insert(1.5, 5); });

  l1.insert(5, 5);
  Expect.equals(6, l1.length);
  Expect.equals(5, l1[5]);
  Expect.equals("[0, 1, 2, 3, 4, 5]", l1.toString());

  l1.insert(0, -1);
  Expect.equals(7, l1.length);
  Expect.equals(-1, l1[0]);
  Expect.equals("[-1, 0, 1, 2, 3, 4, 5]", l1.toString());

  // Fixed size list.
  var l2 = new List(5);
  for (var i = 0; i < 5; i++) l2[i] = i;
  Expect.throws(() { l2.insert(2, 5); },
                (e) => e is UnsupportedError,
                "fixed-length");

  // Unmodifiable list.
  var l3 = const [0, 1, 2, 3, 4];
  Expect.throws(() { l3.insert(2, 5); },
                (e) => e is UnsupportedError,
                "unmodifiable");

  // Empty list is not special.
  var l4 = [];
  l4.insert(0, 499);
  Expect.equals(1, l4.length);
  Expect.equals(499, l4[0]);
}
