// 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.
//
// Dart test program for testing optional named parameters in type tests.

// @dart = 2.9

main() {
  Function anyFunction;
  void acceptFunNumOptBool(void funNumOptBool(num n, {bool b})) {}
  ;
  void funNum(num n) {}
  ;
  void funNumBool(num n, bool b) {}
  ;
  void funNumOptBool(num n, {bool b: true}) {}
  ;
  void funNumOptBoolX(num n, {bool x: true}) {}
  ;
  anyFunction = funNum;
  anyFunction = funNumBool;
  anyFunction = funNumOptBool;
  anyFunction = funNumOptBoolX;
  acceptFunNumOptBool(funNumOptBool);
  acceptFunNumOptBool(funNum);
  //                  ^^^^^^
  // [analyzer] COMPILE_TIME_ERROR.INVALID_CAST_FUNCTION
  // [cfe] The local function has type 'void Function(num)' that isn't of expected type 'void Function(num, {bool b})'.
  acceptFunNumOptBool(funNumBool);
  //                  ^^^^^^^^^^
  // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
  // [cfe] The argument type 'void Function(num, bool)' can't be assigned to the parameter type 'void Function(num, {bool b})'.
  acceptFunNumOptBool(funNumOptBoolX);
  //                  ^^^^^^^^^^^^^^
  // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
  // [cfe] The argument type 'void Function(num, {bool x})' can't be assigned to the parameter type 'void Function(num, {bool b})'.
}
