// 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 If a generic type is used but type arguments are not provided,
/// then the type arguments default to the unknown type.
/// @description Indirectly verifies the assertion: checks that various unrelated
/// types are subtypes of an omitted type argument.
/// @author iefremov
/// @reviewer rodionov
/// @note this test would also pass if such type arguments defaulted to Object
/// type. Object seems to be indistinguishable from dynamic as far as subtype
/// testing is concerned.

import "../../../Utils/expect.dart";

class DynamicChecker<S, T> {
  DynamicChecker() {
    int func(int x) => 42;
    var foo;

    Expect.isTrue(foo is S);
    Expect.isTrue(new Object() is S);
    Expect.isTrue(1 is S);
    Expect.isTrue(() {} is S);
    Expect.isTrue(func is S);

    Expect.isTrue(foo is T);
    Expect.isTrue(new Object() is T);
    Expect.isTrue(1 is T);
    Expect.isTrue(() {} is T);
    Expect.isTrue(func is T);
  }
}

main() {
  new DynamicChecker();
}
