// Copyright (c) 2012, 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 test for a function type test that cannot be eliminated at compile time.

import "package:expect/expect.dart";

class A {}

typedef int F();

typedef G = F; /// 00: compile-time error
typedef H = int; /// 01: compile-time error
typedef I = A; /// 02: compile-time error
typedef J = List<int>; /// 03: compile-time error
typedef K = Function(Function<A>(A
    <int>  /// 04: static type warning
    ));
typedef L = Function({
  /*   /// 05: compile-time error
  bool
  */   /// 05: compile-time error
  x});

typedef M = Function({
  /*   /// 06: compile-time error
  bool
  */   /// 06: compile-time error
  int});

foo({bool int}) {}
main() {
  bool b = true;
  Expect.isFalse(b is G);  /// 00: continued
  Expect.isFalse(b is H);  /// 01: continued
  Expect.isFalse(b is I);  /// 02: continued
  Expect.isFalse(b is J);  /// 03: continued
  Expect.isFalse(b is K);  /// 04: continued
  Expect.isFalse(b is L);
  Expect.isFalse(b is M);
  Expect.isTrue(foo is M);
}
