// 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.
// Test megamorphic calls.

import "package:expect/expect.dart";

class A {
  A() {}
  f1() {
    return 1;
  }

  f2() {
    return 2;
  }

  f3() {
    return 3;
  }

  f4() {
    return 4;
  }

  f5() {
    return 5;
  }

  f6() {
    return 6;
  }

  f7() {
    return 7;
  }

  f8() {
    return 8;
  }

  f9() {
    return 9;
  }

  f11() {
    return 11;
  }

  f12() {
    return 12;
  }

  f13() {
    return 13;
  }

  f14() {
    return 14;
  }

  f15() {
    return 15;
  }

  f16() {
    return 16;
  }

  f17() {
    return 17;
  }

  f18() {
    return 18;
  }

  f19() {
    return 19;
  }

  f20() {
    return 20;
  }

  f21() {
    return 21;
  }

  f22() {
    return 22;
  }

  f23() {
    return 23;
  }

  f24() {
    return 24;
  }

  f25() {
    return 25;
  }

  f26() {
    return 26;
  }

  f27() {
    return 27;
  }

  f28() {
    return 28;
  }

  f29() {
    return 29;
  }

  f30() {
    return 30;
  }

  f31() {
    return 31;
  }

  f32() {
    return 32;
  }

  f33() {
    return 33;
  }

  f34() {
    return 34;
  }

  f35() {
    return 35;
  }

  f36() {
    return 36;
  }

  f37() {
    return 37;
  }

  f38() {
    return 38;
  }

  f39() {
    return 39;
  }
}

class B extends A {
  B() : super() {}
}

class ManyCallsTest {
  static testMain() {
    var list = new List<dynamic>.filled(10, null);
    for (int i = 0; i < (list.length ~/ 2); i++) {
      list[i] = new A();
    }
    for (int i = (list.length ~/ 2); i < list.length; i++) {
      list[i] = new B();
    }
    for (int loop = 0; loop < 7; loop++) {
      for (int i = 0; i < list.length; i++) {
        Expect.equals(1, list[i].f1());
        Expect.equals(2, list[i].f2());
        Expect.equals(3, list[i].f3());
        Expect.equals(4, list[i].f4());
        Expect.equals(5, list[i].f5());
        Expect.equals(6, list[i].f6());
        Expect.equals(7, list[i].f7());
        Expect.equals(8, list[i].f8());
        Expect.equals(9, list[i].f9());
        Expect.equals(11, list[i].f11());
        Expect.equals(12, list[i].f12());
        Expect.equals(13, list[i].f13());
        Expect.equals(14, list[i].f14());
        Expect.equals(15, list[i].f15());
        Expect.equals(16, list[i].f16());
        Expect.equals(17, list[i].f17());
        Expect.equals(18, list[i].f18());
        Expect.equals(19, list[i].f19());
        Expect.equals(20, list[i].f20());
        Expect.equals(21, list[i].f21());
        Expect.equals(22, list[i].f22());
        Expect.equals(23, list[i].f23());
        Expect.equals(24, list[i].f24());
        Expect.equals(25, list[i].f25());
        Expect.equals(26, list[i].f26());
        Expect.equals(27, list[i].f27());
        Expect.equals(28, list[i].f28());
        Expect.equals(29, list[i].f29());
        Expect.equals(30, list[i].f30());
        Expect.equals(31, list[i].f31());
        Expect.equals(32, list[i].f32());
        Expect.equals(33, list[i].f33());
        Expect.equals(34, list[i].f34());
        Expect.equals(35, list[i].f35());
        Expect.equals(36, list[i].f36());
        Expect.equals(37, list[i].f37());
        Expect.equals(38, list[i].f38());
        Expect.equals(39, list[i].f39());
      }
    }
  }
}

main() {
  ManyCallsTest.testMain();
}
