// Copyright (c) 2018, 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.

// @dart = 2.9

import "package:expect/expect.dart";

List<T> staticFn<T>(
    [T a1, T a2, T a3, T a4, T a5, T a6, T a7, T a8, T a9, T a10]) {
  return <T>[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10];
}

class C<CT> {
  List<T> memberFn<T>(
      [T a1, T a2, T a3, T a4, T a5, T a6, T a7, T a8, T a9, T a10]) {
    return <T>[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10];
  }

  // Intercepted, e.g. on JSArray.
  List<T> map<T>(
      [T a1, T a2, T a3, T a4, T a5, T a6, T a7, T a8, T a9, T a10]) {
    return <T>[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10];
  }
}

check(a, b) {
  print('a: $a\nb: $b');
  Expect.equals(a.toString(), b.toString());
}

main() {
  check('[1, 2, 3, null, null, null, null, null, null, null]',
      Function.apply(staticFn, [1, 2, 3]));

  check('[1, 2, 3, 4, null, null, null, null, null, null]',
      Function.apply(staticFn, [1, 2, 3, 4]));

  check('[1, 2, 3, 4, 5, 6, 7, null, null, null]',
      Function.apply(staticFn, [1, 2, 3, 4, 5, 6, 7]));

  var o = new C<num>();
  dynamic memberFn1 = o.map;

  check('[1, 2, 3, null, null, null, null, null, null, null]',
      Function.apply(memberFn1, [1, 2, 3]));

  check('[1, 2, 3, 4, null, null, null, null, null, null]',
      Function.apply(memberFn1, [1, 2, 3, 4]));

  check('[1, 2, 3, 4, 5, 6, 7, null, null, null]',
      Function.apply(memberFn1, [1, 2, 3, 4, 5, 6, 7]));

  dynamic memberFn2 = o.memberFn;

  check('[1, 2, 3, null, null, null, null, null, null, null]',
      Function.apply(memberFn2, [1, 2, 3]));

  check('[1, 2, 3, 4, null, null, null, null, null, null]',
      Function.apply(memberFn2, [1, 2, 3, 4]));

  check('[1, 2, 3, 4, 5, 6, 7, null, null, null]',
      Function.apply(memberFn2, [1, 2, 3, 4, 5, 6, 7]));

  // TODO(sra): Apply of instantiations
}
