// 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_001_0) {
    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_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_001_0() {
  // C_**1_*;
  Expect.isFalse(typeTest(C_001_0()));
  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_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_001_0(C_001_0())(C_001_0()));
  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_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_001_0(C_001_0()).runtimeType.toString(), '(C_001_0) => 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_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_001_0(uniques, 2);
  f_011_1(uniques, 2);
  f_101_1(uniques, 2);
  f_111_1(uniques, 2);
  Expect.equals(4, uniques.length);
}
