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

/// @assertion abstract int indexOf(E element, [int start = 0])
/// The first time an object o is encountered so that o == element,
/// the index of o is returned.
/// @description Checks searching custom objects.
/// @author varlax

library indexOf_A05_t01;

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

checkList(List list, var elem, int expected) {
  Expect.equals(expected, list.indexOf(elem));
}

class Eq {
  bool operator ==(other) => other is Eq;
}

test(List<E> create<E>([int length, E fill])) {
  List a = create<Object?>(10, 0);
  checkList(a, 0, 0);
  
  var o = new Object();
  a[4] = o;
  checkList(a, o, 4);

  a[8] = o;
  checkList(a, o, 4);

  Eq e = new Eq();
  a[3] = e;
  checkList(a, new Eq(),3);
}

