OLD | NEW |
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 /*@testedFeatures=inference*/ | 5 /*@testedFeatures=inference*/ |
6 library test; | 6 library test; |
7 | 7 |
8 import 'dart:math'; | 8 import 'dart:math'; |
9 | 9 |
10 void printInt(int x) => print(x); | 10 void printInt(int x) => print(/*@promotedType=none*/ x); |
11 void printDouble(double x) => print(x); | 11 void printDouble(double x) => print(/*@promotedType=none*/ x); |
12 | 12 |
13 num myMax(num x, num y) => max(x, y); | 13 num myMax(num x, num y) => |
| 14 max(/*@promotedType=none*/ x, /*@promotedType=none*/ y); |
14 | 15 |
15 f() { | 16 f() { |
16 // Okay if static types match. | 17 // Okay if static types match. |
17 printInt(max(1, 2)); | 18 printInt(max(1, 2)); |
18 printInt(min(1, 2)); | 19 printInt(min(1, 2)); |
19 printDouble(max(1.0, 2.0)); | 20 printDouble(max(1.0, 2.0)); |
20 printDouble(min(1.0, 2.0)); | 21 printDouble(min(1.0, 2.0)); |
21 | 22 |
22 // No help for user-defined functions from num->num->num. | 23 // No help for user-defined functions from num->num->num. |
23 printInt(/*info:DOWN_CAST_IMPLICIT*/ myMax(1, 2)); | 24 printInt(/*info:DOWN_CAST_IMPLICIT*/ myMax(1, 2)); |
24 printInt(myMax(1, 2) as int); | 25 printInt(myMax(1, 2) as int); |
25 | 26 |
26 // Mixing int and double means return type is num. | 27 // Mixing int and double means return type is num. |
27 printInt(max(1, /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 2.0)); | 28 printInt(max(1, /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 2.0)); |
28 printInt(min(1, /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 2.0)); | 29 printInt(min(1, /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 2.0)); |
29 printDouble(max(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 1, 2.0)); | 30 printDouble(max(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 1, 2.0)); |
30 printDouble(min(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 1, 2.0)); | 31 printDouble(min(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 1, 2.0)); |
31 | 32 |
32 // Types other than int and double are not accepted. | 33 // Types other than int and double are not accepted. |
33 printInt(min( | 34 printInt(min( |
34 /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hi", | 35 /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hi", |
35 /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "there")); | 36 /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "there")); |
36 } | 37 } |
37 | 38 |
38 main() {} | 39 main() {} |
OLD | NEW |