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

// @dart = 2.9

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(10);
    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();
}
