| // 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. | 
 |  | 
 | // @dart = 2.9 | 
 |  | 
 | 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.'); |