|  | // Copyright (c) 2019, 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:_runtime' show gFnType, typeRep, isSubtypeOf; | 
|  |  | 
|  | import 'package:expect/expect.dart'; | 
|  |  | 
|  | /// Returns an unwrapped generic function type with a bounded type argument in | 
|  | /// the form: <T extends [bound]> void -> void. | 
|  | /// | 
|  | // TODO(nshahan): The generic function type is created as a legacy type. | 
|  | genericFunction(bound) => gFnType((T) => [typeRep<void>(), []], (T) => [bound]); | 
|  |  | 
|  | /// Returns an unwrapped generic function type with a bounded type argument in | 
|  | /// the form: <T extends [bound]> [argumentType] -> T. | 
|  | /// | 
|  | // TODO(nshahan): The generic function type is created as a legacy type. | 
|  | functionGenericReturn(bound, argumentType) => gFnType( | 
|  | (T) => [ | 
|  | T, | 
|  | [argumentType] | 
|  | ], | 
|  | (T) => [bound]); | 
|  |  | 
|  | /// Returns an unwrapped generic function type with a bounded type argument in | 
|  | /// the form: <T extends [bound]> T -> [returnType]. | 
|  | /// | 
|  | // TODO(nshahan): The generic function type is created as a legacy type. | 
|  | functionGenericArg(bound, returnType) => gFnType( | 
|  | (T) => [ | 
|  | returnType, | 
|  | [T] | 
|  | ], | 
|  | (T) => [bound]); | 
|  |  | 
|  | void checkSubtype(s, t) => | 
|  | Expect.isTrue(isSubtypeOf(s, t), '$s should be subtype of $t.'); | 
|  |  | 
|  | void checkProperSubtype(s, t) { | 
|  | Expect.isTrue(isSubtypeOf(s, t), '$s should be subtype of $t.'); | 
|  | checkSubtypeFailure(t, s); | 
|  | } | 
|  |  | 
|  | void checkMutualSubtype(Object s, Object t) { | 
|  | Expect.isTrue(isSubtypeOf(s, t), '$s should be subtype of $t.'); | 
|  | Expect.isTrue(isSubtypeOf(t, s), '$t should be subtype of $s.'); | 
|  | } | 
|  |  | 
|  | void checkSubtypeFailure(s, t) => | 
|  | Expect.isFalse(isSubtypeOf(s, t), '$s should not be subtype of $t.'); |