| // 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. |
| |
| /*@testedFeatures=inference*/ |
| library test; |
| |
| import 'dart:math'; |
| |
| void printInt(int x) => print(x); |
| void printDouble(double x) => print(x); |
| |
| num myMax(num x, num y) => |
| /*@typeArgs=num*/ max(x, y); |
| |
| f() { |
| // Okay if static types match. |
| printInt(/*@typeArgs=int*/ max(1, 2)); |
| printInt(/*@typeArgs=int*/ min(1, 2)); |
| printDouble(/*@typeArgs=double*/ max(1.0, 2.0)); |
| printDouble(/*@typeArgs=double*/ min(1.0, 2.0)); |
| |
| // No help for user-defined functions from num->num->num. |
| printInt(myMax(1, 2)); |
| printInt(myMax(1, 2) as int); |
| |
| printInt( |
| /*@typeArgs=int*/ max(1, 2.0)); |
| printInt( |
| /*@typeArgs=int*/ min(1, 2.0)); |
| printDouble( |
| /*@typeArgs=double*/ max(1, 2.0)); |
| printDouble( |
| /*@typeArgs=double*/ min(1, 2.0)); |
| |
| // Types other than int and double are not accepted. |
| printInt(/*@typeArgs=int*/ min("hi", "there")); |
| } |
| |
| main() {} |