blob: e07ba4360d52d37622dcdb19332a726e7a276acb [file] [log] [blame]
 // Copyright (c) 2016, 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. import 'dart:math' as math; import 'dart:math' show min; // <-- generic: (T, T) -> T import 'package:expect/expect.dart'; class C { /*=T*/ m/**/(/*=T*/ x, /*=T*/ y) => min(x, y); int m2(int x, int y) => min(x, y); } typedef int Int2Int2Int(int x, int y); void _test(Int2Int2Int f) { int y = f(123, 456); Expect.equals(y, 123); // `f` doesn't take type args. Expect.throws(() => (f as dynamic)/**/(123, 456)); } void _testParam(/*=T*/ minFn/**/(/*=T*/ x, /*=T*/ y)) { _test(minFn); } main() { // Strong mode infers: `min` // Test simple/prefixed identifiers and property access _test(min); _test(math.min); _test(new C().m); // Test local function, variable, and parameter /*=T*/ m/**/(/*=T*/ x, /*=T*/ y) => min(x, y); _test(m); final f = min; _test(f); _testParam(math.min); // A few misc tests for methods Expect.equals(123, (new C() as dynamic).m/**/(123, 456)); Expect.throws(() => (new C() as dynamic).m2/**/(123, 456)); }