// 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";

makeFn() {
  return <T extends num>({T a1, T a2, T a3, T a4, T a5}) {
    return <T>[a1, a2, a3, a4, a5];
  };
}

staticFn<T extends num>({T a1, T a2, T a3, T a4, T a5, T xx}) {
  return <T>[a1, a2, a3, a4, a5, xx];
}

class CCC {
  memberFn<T extends num>({T a1, T a2, T a3, T a4, T a5, T yy}) {
    return <T>[a1, a2, a3, a4, a5, yy];
  }
}

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

main() {
  check('[null, 33, null, 11, 22, null]',
      Function.apply(new CCC().memberFn, [], {#a4: 11, #a5: 22, #a2: 33}));

  Expect.throwsTypeError(
      () => Function.apply(new CCC().memberFn, [], {#a3: 'hi'}));

  check('[11, 22, 33, null, null]',
      Function.apply(makeFn(), [], {#a1: 11, #a2: 22, #a3: 33}));

  check('[null, 33, null, 11, 22]',
      Function.apply(makeFn(), [], {#a4: 11, #a5: 22, #a2: 33}));

  Expect.throwsTypeError(() => Function.apply(makeFn(), [], {#a3: 'hi'}));

  check('[null, 33, null, 11, 22, null]',
      Function.apply(staticFn, [], {#a4: 11, #a5: 22, #a2: 33}));

  Expect.throwsTypeError(() => Function.apply(staticFn, [], {#a3: 'hi'}));
}
