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

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