// Copyright (c) 2021, 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.

// This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
import "package:expect/expect.dart";

import 'libImport.dart';

@pragma('dart2js:noInline')
typeTest(dynamic t) {
  if (t is T_000_1) {
    return true;
  }
  if (t is T_101_1_type__1) {
    return true;
  }
  if (t is T_101_1_type__2) {
    return true;
  }
  if (t is T_101_1_type__3) {
    return true;
  }
  if (t is T_101_1_type__4) {
    return true;
  }
  if (t is T_101_1_type__5) {
    return true;
  }
  if (t is T_101_1_type__6) {
    return true;
  }
  if (t is T_111_1_type__1) {
    return true;
  }
  if (t is T_111_1_type__2) {
    return true;
  }
  if (t is T_111_1_type__3) {
    return true;
  }
  if (t is T_111_1_type__4) {
    return true;
  }
  if (t is T_111_1_type__5) {
    return true;
  }
  if (t is T_111_1_type__6) {
    return true;
  }
  if (t is T_111_1_type__7) {
    return true;
  }
  if (t is T_111_1_type__8) {
    return true;
  }
  if (t is T_111_1_type__9) {
    return true;
  }
  if (t is T_010_1_type__1) {
    return true;
  }
  if (t is T_010_1_type__2) {
    return true;
  }
  if (t is T_010_1_type__3) {
    return true;
  }
  if (t is T_010_1_type__4) {
    return true;
  }
  if (t is T_011_1_type__1) {
    return true;
  }
  if (t is T_011_1_type__2) {
    return true;
  }
  if (t is T_011_1_type__3) {
    return true;
  }
  if (t is T_011_1_type__4) {
    return true;
  }
  if (t is T_011_1_type__5) {
    return true;
  }
  return false;
}

@pragma('dart2js:noInline')
g_000_1() {
  // C_***_1;
  Expect.isFalse(typeTest(C_000_1()));
  Expect.isFalse(typeTest(C_101_1_class_1()));
  Expect.isFalse(typeTest(C_101_1_class_2()));
  Expect.isFalse(typeTest(C_101_1_class_3()));
  Expect.isFalse(typeTest(C_101_1_class_4()));
  Expect.isFalse(typeTest(C_101_1_class_5()));
  Expect.isFalse(typeTest(C_101_1_class_6()));
  Expect.isFalse(typeTest(C_111_1_class_1()));
  Expect.isFalse(typeTest(C_111_1_class_2()));
  Expect.isFalse(typeTest(C_111_1_class_3()));
  Expect.isFalse(typeTest(C_111_1_class_4()));
  Expect.isFalse(typeTest(C_111_1_class_5()));
  Expect.isFalse(typeTest(C_111_1_class_6()));
  Expect.isFalse(typeTest(C_111_1_class_7()));
  Expect.isFalse(typeTest(C_111_1_class_8()));
  Expect.isFalse(typeTest(C_111_1_class_9()));
  Expect.isFalse(typeTest(C_010_1_class_1()));
  Expect.isFalse(typeTest(C_010_1_class_2()));
  Expect.isFalse(typeTest(C_010_1_class_3()));
  Expect.isFalse(typeTest(C_010_1_class_4()));
  Expect.isFalse(typeTest(C_011_1_class_1()));
  Expect.isFalse(typeTest(C_011_1_class_2()));
  Expect.isFalse(typeTest(C_011_1_class_3()));
  Expect.isFalse(typeTest(C_011_1_class_4()));
  Expect.isFalse(typeTest(C_011_1_class_5()));

  Expect.isTrue(closureC_000_1(C_000_1())(C_000_1()));
  Expect.isTrue(closureC_101_1_class_1(C_101_1_class_1())(C_101_1_class_1()));
  Expect.isTrue(closureC_101_1_class_2(C_101_1_class_2())(C_101_1_class_2()));
  Expect.isTrue(closureC_101_1_class_3(C_101_1_class_3())(C_101_1_class_3()));
  Expect.isTrue(closureC_101_1_class_4(C_101_1_class_4())(C_101_1_class_4()));
  Expect.isTrue(closureC_101_1_class_5(C_101_1_class_5())(C_101_1_class_5()));
  Expect.isTrue(closureC_101_1_class_6(C_101_1_class_6())(C_101_1_class_6()));
  Expect.isTrue(closureC_111_1_class_1(C_111_1_class_1())(C_111_1_class_1()));
  Expect.isTrue(closureC_111_1_class_2(C_111_1_class_2())(C_111_1_class_2()));
  Expect.isTrue(closureC_111_1_class_3(C_111_1_class_3())(C_111_1_class_3()));
  Expect.isTrue(closureC_111_1_class_4(C_111_1_class_4())(C_111_1_class_4()));
  Expect.isTrue(closureC_111_1_class_5(C_111_1_class_5())(C_111_1_class_5()));
  Expect.isTrue(closureC_111_1_class_6(C_111_1_class_6())(C_111_1_class_6()));
  Expect.isTrue(closureC_111_1_class_7(C_111_1_class_7())(C_111_1_class_7()));
  Expect.isTrue(closureC_111_1_class_8(C_111_1_class_8())(C_111_1_class_8()));
  Expect.isTrue(closureC_111_1_class_9(C_111_1_class_9())(C_111_1_class_9()));
  Expect.isTrue(closureC_010_1_class_1(C_010_1_class_1())(C_010_1_class_1()));
  Expect.isTrue(closureC_010_1_class_2(C_010_1_class_2())(C_010_1_class_2()));
  Expect.isTrue(closureC_010_1_class_3(C_010_1_class_3())(C_010_1_class_3()));
  Expect.isTrue(closureC_010_1_class_4(C_010_1_class_4())(C_010_1_class_4()));
  Expect.isTrue(closureC_011_1_class_1(C_011_1_class_1())(C_011_1_class_1()));
  Expect.isTrue(closureC_011_1_class_2(C_011_1_class_2())(C_011_1_class_2()));
  Expect.isTrue(closureC_011_1_class_3(C_011_1_class_3())(C_011_1_class_3()));
  Expect.isTrue(closureC_011_1_class_4(C_011_1_class_4())(C_011_1_class_4()));
  Expect.isTrue(closureC_011_1_class_5(C_011_1_class_5())(C_011_1_class_5()));

  Expect.equals(
      closureC_000_1(C_000_1()).runtimeType.toString(), '(C_000_1) => bool');
  Expect.equals(
      closureC_101_1_class_1(C_101_1_class_1()).runtimeType.toString(),
      '(C_101_1_class_1) => bool');
  Expect.equals(
      closureC_101_1_class_2(C_101_1_class_2()).runtimeType.toString(),
      '(C_101_1_class_2) => bool');
  Expect.equals(
      closureC_101_1_class_3(C_101_1_class_3()).runtimeType.toString(),
      '(C_101_1_class_3) => bool');
  Expect.equals(
      closureC_101_1_class_4(C_101_1_class_4()).runtimeType.toString(),
      '(C_101_1_class_4) => bool');
  Expect.equals(
      closureC_101_1_class_5(C_101_1_class_5()).runtimeType.toString(),
      '(C_101_1_class_5) => bool');
  Expect.equals(
      closureC_101_1_class_6(C_101_1_class_6()).runtimeType.toString(),
      '(C_101_1_class_6) => bool');
  Expect.equals(
      closureC_111_1_class_1(C_111_1_class_1()).runtimeType.toString(),
      '(C_111_1_class_1) => bool');
  Expect.equals(
      closureC_111_1_class_2(C_111_1_class_2()).runtimeType.toString(),
      '(C_111_1_class_2) => bool');
  Expect.equals(
      closureC_111_1_class_3(C_111_1_class_3()).runtimeType.toString(),
      '(C_111_1_class_3) => bool');
  Expect.equals(
      closureC_111_1_class_4(C_111_1_class_4()).runtimeType.toString(),
      '(C_111_1_class_4) => bool');
  Expect.equals(
      closureC_111_1_class_5(C_111_1_class_5()).runtimeType.toString(),
      '(C_111_1_class_5) => bool');
  Expect.equals(
      closureC_111_1_class_6(C_111_1_class_6()).runtimeType.toString(),
      '(C_111_1_class_6) => bool');
  Expect.equals(
      closureC_111_1_class_7(C_111_1_class_7()).runtimeType.toString(),
      '(C_111_1_class_7) => bool');
  Expect.equals(
      closureC_111_1_class_8(C_111_1_class_8()).runtimeType.toString(),
      '(C_111_1_class_8) => bool');
  Expect.equals(
      closureC_111_1_class_9(C_111_1_class_9()).runtimeType.toString(),
      '(C_111_1_class_9) => bool');
  Expect.equals(
      closureC_010_1_class_1(C_010_1_class_1()).runtimeType.toString(),
      '(C_010_1_class_1) => bool');
  Expect.equals(
      closureC_010_1_class_2(C_010_1_class_2()).runtimeType.toString(),
      '(C_010_1_class_2) => bool');
  Expect.equals(
      closureC_010_1_class_3(C_010_1_class_3()).runtimeType.toString(),
      '(C_010_1_class_3) => bool');
  Expect.equals(
      closureC_010_1_class_4(C_010_1_class_4()).runtimeType.toString(),
      '(C_010_1_class_4) => bool');
  Expect.equals(
      closureC_011_1_class_1(C_011_1_class_1()).runtimeType.toString(),
      '(C_011_1_class_1) => bool');
  Expect.equals(
      closureC_011_1_class_2(C_011_1_class_2()).runtimeType.toString(),
      '(C_011_1_class_2) => bool');
  Expect.equals(
      closureC_011_1_class_3(C_011_1_class_3()).runtimeType.toString(),
      '(C_011_1_class_3) => bool');
  Expect.equals(
      closureC_011_1_class_4(C_011_1_class_4()).runtimeType.toString(),
      '(C_011_1_class_4) => bool');
  Expect.equals(
      closureC_011_1_class_5(C_011_1_class_5()).runtimeType.toString(),
      '(C_011_1_class_5) => bool');

  Set<String> uniques = {};

  // f_***_1;
  f_000_1(uniques, 3);
  f_010_1(uniques, 3);
  f_011_1(uniques, 3);
  f_101_1(uniques, 3);
  f_111_1(uniques, 3);
  Expect.equals(5, uniques.length);
}
