// Copyright (c) 2012, 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.
// Test program for correct optimizations related to types fo allocated lists.
// VMOptions=--optimization-counter-threshold=10 --no-use-osr

import "package:expect/expect.dart";

// Classes to induce polymorphism of degree 10.
class A0 {
  test() => 0;
}

class A1 {
  test() => 1;
}

class A2 {
  test() => 2;
}

class A3 {
  test() => 3;
}

class A4 {
  test() => 4;
}

class A5 {
  test() => 5;
}

class A6 {
  test() => 6;
}

class A7 {
  test() => 7;
}

class A8 {
  test() => 8;
}

class A9 {
  test() => 9;
}

// Class with no test method.
class B {}

test(obj) {
  return obj.test();
}

main() {
  // Trigger optimization of 'test' function.
  List list = [
    new A0(),
    new A1(),
    new A2(),
    new A3(),
    new A4(),
    new A5(),
    new A6(),
    new A7(),
    new A8(),
    new A9()
  ];
  for (int i = 0; i < 20; i++) {
    for (var obj in list) {
      test(obj);
    }
  }
  Expect.throwsNoSuchMethodError(() => test(new B()));
}
