/*
 * Copyright (c) 2011, 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.
 */
/**
 * @assertion A function value, or an instance of a class with a "call" method, 
 * is a subtype of a function type, and as such, a subtype of Function.
 * @description Checks that function values and instances of classes with
 * call(...) methods are indeed subtypes of Function.
 * @author rodionov
 */
import "../../../Utils/expect.dart";

class A {
  int call(int x, bool y) {
    return 11;
  }
}

class B extends A {}

int foo(String s) {
  return 21;
}

main() {
  Expect.isTrue(foo is Function);
  Expect.isTrue(new A() is Function);
  Expect.isTrue(new B() is Function);
  Expect.isTrue((int, double) {return 0;} is Function);
}
