// Copyright (c) 2017, 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 abstract int indexOf(E element, [int start = 0])
/// Searches the list from index [start] to the end of the list. The first time
/// an object [o] is encountered so that [o == element], the index of [o] is
/// returned.
/// @description Checks that [start] can be out of bounds.
/// @author iarkh@unipro.ru

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

main() {
  UnmodifiableListView a =
      new UnmodifiableListView([42, 0, -1, 42, -1, 6031769, 0]);
  Expect.equals(-1, a.indexOf(777, -1));
  Expect.equals(0, a.indexOf(42, -1));
  Expect.equals(-1, a.indexOf(null, -1));
  Expect.equals(2, a.indexOf(-1, -1));

  Expect.equals(-1, a.indexOf(777, 7));
  Expect.equals(-1, a.indexOf(42, 7));
  Expect.equals(-1, a.indexOf(null, 7));
  Expect.equals(-1, a.indexOf(-1, 7));

  Expect.equals(-1, a.indexOf(42, 6031769));
  Expect.equals(-1, a.indexOf(777, 6031769));
  Expect.equals(-1, a.indexOf(null, 6031769));
  Expect.equals(-1, a.indexOf(0, 6031769));

  Expect.equals(0, a.indexOf(42, -6031769));
  Expect.equals(-1, a.indexOf(777, -6031769));
  Expect.equals(-1, a.indexOf(null, -6031769));
  Expect.equals(1, a.indexOf(0, -6031769));
}
