// 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) {
    return true;
  }
  if (t is T_101_type__1) {
    return true;
  }
  if (t is T_101_type__2) {
    return true;
  }
  if (t is T_101_type__3) {
    return true;
  }
  if (t is T_101_type__4) {
    return true;
  }
  if (t is T_111_type__1) {
    return true;
  }
  if (t is T_111_type__2) {
    return true;
  }
  if (t is T_111_type__3) {
    return true;
  }
  if (t is T_111_type__4) {
    return true;
  }
  if (t is T_111_type__5) {
    return true;
  }
  if (t is T_111_type__6) {
    return true;
  }
  if (t is T_011_type__1) {
    return true;
  }
  if (t is T_011_type__2) {
    return true;
  }
  if (t is T_011_type__3) {
    return true;
  }
  return false;
}

@pragma('dart2js:noInline')
g_001() {
  // C_**1;
  Expect.isFalse(typeTest(C_001()));
  Expect.isFalse(typeTest(C_101_class_1()));
  Expect.isFalse(typeTest(C_101_class_2()));
  Expect.isFalse(typeTest(C_101_class_3()));
  Expect.isFalse(typeTest(C_101_class_4()));
  Expect.isFalse(typeTest(C_111_class_1()));
  Expect.isFalse(typeTest(C_111_class_2()));
  Expect.isFalse(typeTest(C_111_class_3()));
  Expect.isFalse(typeTest(C_111_class_4()));
  Expect.isFalse(typeTest(C_111_class_5()));
  Expect.isFalse(typeTest(C_111_class_6()));
  Expect.isFalse(typeTest(C_011_class_1()));
  Expect.isFalse(typeTest(C_011_class_2()));
  Expect.isFalse(typeTest(C_011_class_3()));

  Expect.isTrue(closureC_001(C_001())(C_001()));
  Expect.isTrue(closureC_101_class_1(C_101_class_1())(C_101_class_1()));
  Expect.isTrue(closureC_101_class_2(C_101_class_2())(C_101_class_2()));
  Expect.isTrue(closureC_101_class_3(C_101_class_3())(C_101_class_3()));
  Expect.isTrue(closureC_101_class_4(C_101_class_4())(C_101_class_4()));
  Expect.isTrue(closureC_111_class_1(C_111_class_1())(C_111_class_1()));
  Expect.isTrue(closureC_111_class_2(C_111_class_2())(C_111_class_2()));
  Expect.isTrue(closureC_111_class_3(C_111_class_3())(C_111_class_3()));
  Expect.isTrue(closureC_111_class_4(C_111_class_4())(C_111_class_4()));
  Expect.isTrue(closureC_111_class_5(C_111_class_5())(C_111_class_5()));
  Expect.isTrue(closureC_111_class_6(C_111_class_6())(C_111_class_6()));
  Expect.isTrue(closureC_011_class_1(C_011_class_1())(C_011_class_1()));
  Expect.isTrue(closureC_011_class_2(C_011_class_2())(C_011_class_2()));
  Expect.isTrue(closureC_011_class_3(C_011_class_3())(C_011_class_3()));

  Expect.equals(
      closureC_001(C_001()).runtimeType.toString(), '(C_001) => bool');
  Expect.equals(closureC_101_class_1(C_101_class_1()).runtimeType.toString(),
      '(C_101_class_1) => bool');
  Expect.equals(closureC_101_class_2(C_101_class_2()).runtimeType.toString(),
      '(C_101_class_2) => bool');
  Expect.equals(closureC_101_class_3(C_101_class_3()).runtimeType.toString(),
      '(C_101_class_3) => bool');
  Expect.equals(closureC_101_class_4(C_101_class_4()).runtimeType.toString(),
      '(C_101_class_4) => bool');
  Expect.equals(closureC_111_class_1(C_111_class_1()).runtimeType.toString(),
      '(C_111_class_1) => bool');
  Expect.equals(closureC_111_class_2(C_111_class_2()).runtimeType.toString(),
      '(C_111_class_2) => bool');
  Expect.equals(closureC_111_class_3(C_111_class_3()).runtimeType.toString(),
      '(C_111_class_3) => bool');
  Expect.equals(closureC_111_class_4(C_111_class_4()).runtimeType.toString(),
      '(C_111_class_4) => bool');
  Expect.equals(closureC_111_class_5(C_111_class_5()).runtimeType.toString(),
      '(C_111_class_5) => bool');
  Expect.equals(closureC_111_class_6(C_111_class_6()).runtimeType.toString(),
      '(C_111_class_6) => bool');
  Expect.equals(closureC_011_class_1(C_011_class_1()).runtimeType.toString(),
      '(C_011_class_1) => bool');
  Expect.equals(closureC_011_class_2(C_011_class_2()).runtimeType.toString(),
      '(C_011_class_2) => bool');
  Expect.equals(closureC_011_class_3(C_011_class_3()).runtimeType.toString(),
      '(C_011_class_3) => bool');

  Set<String> uniques = {};

  // f_**1;
  f_001(uniques, 2);
  f_011(uniques, 2);
  f_101(uniques, 2);
  f_111(uniques, 2);
  Expect.equals(4, uniques.length);
}
