// 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 extends num>(T, T) -> T
import 'package:expect/expect.dart';

class C {
  /*=T*/ m/*<T extends num>*/(/*=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)/*<int>*/(123, 456)); 
}

void _testParam(/*=T*/ minFn/*<T extends num>*/(/*=T*/ x, /*=T*/ y)) {
  _test(minFn);
}

main() {
  // Strong mode infers: `min<int>`
  // 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 extends num>*/(/*=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/*<int>*/(123, 456));
  Expect.throws(() => (new C() as dynamic).m2/*<int>*/(123, 456));
}
