blob: a9994b21c59efed4eb8938939a312a1c57f31ba0 [file] [log] [blame]
// 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.
// @dart=2.9
/*@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() {}