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

// 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 < 1000; i++) {
    for (var obj in list) {
      test(obj);
    }
  }
  Expect.throws(() => test(new B()), (e) => e is NoSuchMethodError);
}
