36f0c3209a
Change-Id: I7cfc51c22e98cc368ec59af3a7125f1d0c0419d8 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/407140 Auto-Submit: Bob Nystrom <rnystrom@google.com> Reviewed-by: Lasse Nielsen <lrn@google.com> Commit-Queue: Lasse Nielsen <lrn@google.com>
98 lines
3.1 KiB
Dart
98 lines
3.1 KiB
Dart
// 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<T>();
|
|
typedef FunTypReq = int Function<T>(int);
|
|
typedef FunTypOpt = int Function<T>([int?]);
|
|
typedef FunTypReqOpt = int Function<T>(int, [int?]);
|
|
typedef FunTypNam = int Function<T>({int? p});
|
|
typedef FunTypReqNam = int Function<T>(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<T>() {
|
|
return -1;
|
|
}
|
|
|
|
int funTypReq<T>(int x) => x;
|
|
int funTypOpt<T>([int? y]) => y ?? 42;
|
|
int funTypReqOpt<T>(int x, [int? y]) => x;
|
|
int funTypNam<T>({int? p}) => p ?? 42;
|
|
int funTypReqNam<T>(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);
|
|
}
|