// Copyright (c) 2017, 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 that generic methods with unused parameters aren't treated as // non-generic methods, but can be specialized as such. library generic_methods_unused_parameter_test; import "package:expect/expect.dart"; typedef Fun = int Function(); typedef FunReq = int Function(int); typedef FunOpt = int Function([int?]); typedef FunReqOpt = int Function(int, [int?]); typedef FunNam = int Function({int? p}); typedef FunReqNam = int Function(int, {int? p}); typedef FunTyp = int Function(); typedef FunTypReq = int Function(int); typedef FunTypOpt = int Function([int?]); typedef FunTypReqOpt = int Function(int, [int?]); typedef FunTypNam = int Function({int? p}); typedef FunTypReqNam = int Function(int, {int? p}); int fun() { return -1; } int funReq(int x) => x; int funOpt([int? y]) => y ?? 42; int funReqOpt(int x, [int? y]) => x; int funNam({int? p}) => p ?? 42; int funReqNam(int x, {int? p}) => x; int funTyp() { return -1; } int funTypReq(int x) => x; int funTypOpt([int? y]) => y ?? 42; int funTypReqOpt(int x, [int? y]) => x; int funTypNam({int? p}) => p ?? 42; int funTypReqNam(int x, {int? p}) => x; main() { // Use generic function instantiation to obtain non-generic functions, // and test below that they have the expected run-time types. Fun varFun = funTyp; FunReq varFunReq = funTypReq; FunOpt varFunOpt = funTypOpt; FunReqOpt varFunReqOpt = funTypReqOpt; FunNam varFunNam = funTypNam; FunReqNam varFunReqNam = funTypReqNam; Expect.isTrue(fun is Fun); Expect.isTrue(fun is! FunTyp); Expect.isTrue(funTyp is! Fun); Expect.isTrue(funTyp is FunTyp); Expect.isTrue(varFun is Fun); Expect.isTrue(varFun is! FunTyp); Expect.isTrue(funReq is FunReq); Expect.isTrue(funReq is! FunTypReq); Expect.isTrue(funTypReq is! FunReq); Expect.isTrue(funTypReq is FunTypReq); Expect.isTrue(varFunReq is FunReq); Expect.isTrue(varFunReq is! FunTypReq); Expect.isTrue(funOpt is FunOpt); Expect.isTrue(funOpt is! FunTypOpt); Expect.isTrue(funTypOpt is! FunOpt); Expect.isTrue(funTypOpt is FunTypOpt); Expect.isTrue(varFunOpt is FunOpt); Expect.isTrue(varFunOpt is! FunTypOpt); Expect.isTrue(funReqOpt is FunReqOpt); Expect.isTrue(funReqOpt is! FunTypReqOpt); Expect.isTrue(funTypReqOpt is! FunReqOpt); Expect.isTrue(funTypReqOpt is FunTypReqOpt); Expect.isTrue(varFunReqOpt is FunReqOpt); Expect.isTrue(varFunReqOpt is! FunTypReqOpt); Expect.isTrue(funNam is FunNam); Expect.isTrue(funNam is! FunTypNam); Expect.isTrue(funTypNam is! FunNam); Expect.isTrue(funTypNam is FunTypNam); Expect.isTrue(varFunNam is FunNam); Expect.isTrue(varFunNam is! FunTypNam); Expect.isTrue(funReqNam is FunReqNam); Expect.isTrue(funReqNam is! FunTypReqNam); Expect.isTrue(funTypReqNam is! FunReqNam); Expect.isTrue(funTypReqNam is FunTypReqNam); Expect.isTrue(varFunReqNam is FunReqNam); Expect.isTrue(varFunReqNam is! FunTypReqNam); }