// Copyright (c) 2013, 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.

library subtype_test;

import 'package:expect/expect.dart';
import 'package:async_helper/async_helper.dart';
import 'type_test_helper.dart';
import 'package:compiler/src/dart_types.dart';
import "package:compiler/src/elements/elements.dart"
       show Element, ClassElement;
import 'package:compiler/src/util/util.dart';

void main() {
  testInterface1();
  testInterface2();
  testGeneric();
  testMixin();
  testFunction();
  testTypeVariable();
}

void testInterface1() {
  asyncTest(() => TypeEnvironment.create(r"""
      class A {} // A and B have equal depth.
      class B {}
      class I implements A, B {}
      class J implements A, B {}
      """).then((env) {

    DartType Object_ = env['Object'];
    DartType A = env['A'];
    DartType B = env['B'];
    DartType I = env['I'];
    DartType J = env['J'];

    checkLub(DartType a, DartType b, DartType expect) {
      DartType lub = env.computeLeastUpperBound(a, b);
      Expect.equals(expect, lub,
          'Unexpected lub($a,$b) = $lub, expected $expect.');
    }

    checkLub(Object_, Object_, Object_);
    checkLub(Object_, A, Object_);
    checkLub(Object_, B, Object_);
    checkLub(Object_, I, Object_);
    checkLub(Object_, J, Object_);

    checkLub(A, Object_, Object_);
    checkLub(A, A, A);
    checkLub(A, B, Object_);
    checkLub(A, I, A);
    checkLub(A, J, A);

    checkLub(B, Object_, Object_);
    checkLub(B, A, Object_);
    checkLub(B, B, B);
    checkLub(B, I, B);
    checkLub(B, J, B);

    checkLub(I, Object_, Object_);
    checkLub(I, A, A);
    checkLub(I, B, B);
    checkLub(I, I, I);
    checkLub(I, J, Object_);

    checkLub(J, Object_, Object_);
    checkLub(J, A, A);
    checkLub(J, B, B);
    checkLub(J, I, Object_);
    checkLub(J, J, J);
  }));
}

void testInterface2() {
  asyncTest(() => TypeEnvironment.create(r"""
      class A {}
      class B {}
      class C extends B {} // This makes C have higher depth than A.
      class I implements A, C {}
      class J implements A, C {}
      """).then((env) {

    DartType Object_ = env['Object'];
    DartType A = env['A'];
    DartType B = env['B'];
    DartType C = env['C'];
    DartType I = env['I'];
    DartType J = env['J'];

    checkLub(DartType a, DartType b, DartType expectedLub) {
      DartType lub = env.computeLeastUpperBound(a, b);
      Expect.equals(expectedLub, lub,
          'Unexpected lub($a,$b) = $lub, expected $expectedLub');
    }

    checkLub(Object_, Object_, Object_);
    checkLub(Object_, A, Object_);
    checkLub(Object_, B, Object_);
    checkLub(Object_, C, Object_);
    checkLub(Object_, I, Object_);
    checkLub(Object_, J, Object_);

    checkLub(A, Object_, Object_);
    checkLub(A, A, A);
    checkLub(A, B, Object_);
    checkLub(A, C, Object_);
    checkLub(A, I, A);
    checkLub(A, J, A);

    checkLub(B, Object_, Object_);
    checkLub(B, A, Object_);
    checkLub(B, B, B);
    checkLub(B, C, B);
    checkLub(B, I, B);
    checkLub(B, J, B);

    checkLub(C, Object_, Object_);
    checkLub(C, A, Object_);
    checkLub(C, B, B);
    checkLub(C, C, C);
    checkLub(C, I, C);
    checkLub(C, J, C);

    checkLub(I, Object_, Object_);
    checkLub(I, A, A);
    checkLub(I, B, B);
    checkLub(I, C, C);
    checkLub(I, I, I);
    checkLub(I, J, C);

    checkLub(J, Object_, Object_);
    checkLub(J, A, A);
    checkLub(J, B, B);
    checkLub(J, C, C);
    checkLub(J, I, C);
    checkLub(J, J, J);
  }));
}

void testGeneric() {
  asyncTest(() => TypeEnvironment.create(r"""
      class A {}
      class B {}
      class C extends B {}
      class I<T> {}
      """).then((env) {

    DartType Object_ = env['Object'];
    DartType A = env['A'];
    DartType B = env['B'];
    DartType C = env['C'];
    ClassElement I = env.getElement('I');
    DartType I_A = instantiate(I, [A]);
    DartType I_B = instantiate(I, [B]);
    DartType I_C = instantiate(I, [C]);

    checkLub(DartType a, DartType b, DartType expectedLub) {
      DartType lub = env.computeLeastUpperBound(a, b);
      Expect.equals(expectedLub, lub,
          'Unexpected lub($a,$b) = $lub, expected $expectedLub');
    }

    checkLub(Object_, Object_, Object_);
    checkLub(Object_, A, Object_);
    checkLub(Object_, B, Object_);
    checkLub(Object_, C, Object_);
    checkLub(Object_, I_A, Object_);
    checkLub(Object_, I_B, Object_);
    checkLub(Object_, I_C, Object_);

    checkLub(A, Object_, Object_);
    checkLub(A, A, A);
    checkLub(A, B, Object_);
    checkLub(A, C, Object_);
    checkLub(A, I_A, Object_);
    checkLub(A, I_B, Object_);
    checkLub(A, I_C, Object_);

    checkLub(B, Object_, Object_);
    checkLub(B, A, Object_);
    checkLub(B, B, B);
    checkLub(B, C, B);
    checkLub(B, I_A, Object_);
    checkLub(B, I_B, Object_);
    checkLub(B, I_C, Object_);

    checkLub(C, Object_, Object_);
    checkLub(C, A, Object_);
    checkLub(C, B, B);
    checkLub(C, C, C);
    checkLub(C, I_A, Object_);
    checkLub(C, I_B, Object_);
    checkLub(C, I_C, Object_);

    checkLub(I_A, Object_, Object_);
    checkLub(I_A, A, Object_);
    checkLub(I_A, B, Object_);
    checkLub(I_A, C, Object_);
    checkLub(I_A, I_A, I_A);
    checkLub(I_A, I_B, Object_);
    checkLub(I_A, I_C, Object_);

    checkLub(I_B, Object_, Object_);
    checkLub(I_B, A, Object_);
    checkLub(I_B, B, Object_);
    checkLub(I_B, C, Object_);
    checkLub(I_B, I_A, Object_);
    checkLub(I_B, I_B, I_B);
    checkLub(I_B, I_C, Object_);

    checkLub(I_C, Object_, Object_);
    checkLub(I_C, A, Object_);
    checkLub(I_C, B, Object_);
    checkLub(I_C, C, Object_);
    checkLub(I_C, I_A, Object_);
    checkLub(I_C, I_B, Object_);
    checkLub(I_C, I_C, I_C);
  }));
}

void testMixin() {
  asyncTest(() => TypeEnvironment.create(r"""
      class A {}
      class B {}
      class C extends B {}
      class D extends C {} // This makes D have higher depth than Object+A.
      class I extends Object with A, B implements A, D {}
      class I2 extends Object with A, B implements A, D {}
      class J extends Object with B, A implements A, D {}
      """).then((env) {

    DartType Object_ = env['Object'];
    DartType A = env['A'];
    DartType B = env['B'];
    DartType C = env['C'];
    DartType D = env['D'];
    DartType I = env['I'];
    DartType I2 = env['I2'];
    DartType J = env['J'];

    checkLub(DartType a, DartType b, DartType expectedLub) {
      DartType lub = env.computeLeastUpperBound(a, b);
      Expect.equals(expectedLub, lub,
          'Unexpected lub($a,$b) = $lub, expected $expectedLub');
    }

    checkLub(Object_, Object_, Object_);
    checkLub(Object_, A, Object_);
    checkLub(Object_, B, Object_);
    checkLub(Object_, C, Object_);
    checkLub(Object_, D, Object_);
    checkLub(Object_, I, Object_);
    checkLub(Object_, I2, Object_);
    checkLub(Object_, J, Object_);

    checkLub(A, Object_, Object_);
    checkLub(A, A, A);
    checkLub(A, B, Object_);
    checkLub(A, C, Object_);
    checkLub(A, D, Object_);
    checkLub(A, I, A);
    checkLub(A, I2, A);
    checkLub(A, J, A);

    checkLub(B, Object_, Object_);
    checkLub(B, A, Object_);
    checkLub(B, B, B);
    checkLub(B, C, B);
    checkLub(B, D, B);
    checkLub(B, I, B);
    checkLub(B, I2, B);
    checkLub(B, J, B);

    checkLub(C, Object_, Object_);
    checkLub(C, A, Object_);
    checkLub(C, B, B);
    checkLub(C, C, C);
    checkLub(C, D, C);
    checkLub(C, I, C);
    checkLub(C, I2, C);
    checkLub(C, J, C);

    checkLub(D, Object_, Object_);
    checkLub(D, A, Object_);
    checkLub(D, B, B);
    checkLub(D, C, C);
    checkLub(D, D, D);
    checkLub(D, I, D);
    checkLub(D, I2, D);
    checkLub(D, J, D);

    checkLub(I, Object_, Object_);
    checkLub(I, A, A);
    checkLub(I, B, B);
    checkLub(I, C, C);
    checkLub(I, D, D);
    checkLub(I, I, I);
    checkLub(I, I2, D);
    checkLub(I, J, D);

    checkLub(I2, Object_, Object_);
    checkLub(I2, A, A);
    checkLub(I2, B, B);
    checkLub(I2, C, C);
    checkLub(I2, D, D);
    checkLub(I2, I, D);
    checkLub(I2, I2, I2);
    checkLub(I2, J, D);

    checkLub(J, Object_, Object_);
    checkLub(J, A, A);
    checkLub(J, B, B);
    checkLub(J, C, C);
    checkLub(J, D, D);
    checkLub(J, I, D);
    checkLub(J, I2, D);
    checkLub(J, J, J);
  }));
}

void testFunction() {
  asyncTest(() => TypeEnvironment.create(r"""
      class A {}
      class B {}
      class C extends B {}

      typedef dynamic__();
      typedef void void__();
      typedef A A__();
      typedef B B__();
      typedef C C__();

      typedef void void__A_B(A a, B b);
      typedef void void__A_C(A a, C b);
      typedef void void__B_A(B a, A b);
      typedef void void__B_C(B a, C b);

      typedef void void___B([B a]);
      typedef void void___B_C([B a, C b]);
      typedef void void___C_C([C a, C b]);

      typedef void void____B({B a});
      typedef void void____B_C({B a, C b});
      typedef void void____C_C({C a, C b});
      """).then((env) {

    DartType Object_ = env['Object'];
    DartType Function_ = env['Function'];
    DartType dynamic__ = env['dynamic__'];
    DartType void__ = env['void__'];
    DartType A__ = env['A__'];
    DartType B__ = env['B__'];
    DartType C__ = env['C__'];
    DartType void__A_B = env['void__A_B'];
    DartType void__A_C = env['void__A_C'];
    DartType void__B_A = env['void__B_A'];
    DartType void__B_C = env['void__B_C'];
    DartType void___B = env['void___B'];
    DartType void___B_C = env['void___B_C'];
    DartType void___C_C = env['void___C_C'];
    DartType void____B = env['void____B'];
    DartType void____B_C = env['void____B_C'];
    DartType void____C_C = env['void____C_C'];

    // Types used only for checking results.
    DartType void_ = env['void'];
    DartType B = env['B'];
    DartType C = env['C'];
    FunctionType Object__ = env.functionType(Object_, []);
    FunctionType void__Object_Object =
        env.functionType(void_, [Object_, Object_]);
    FunctionType void__Object_B =
        env.functionType(void_, [Object_, B]);
    FunctionType void__Object_C =
        env.functionType(void_, [Object_, C]);
    FunctionType void__B_Object =
        env.functionType(void_, [B, Object_]);

    checkLub(DartType a, DartType b, DartType expectedLub) {
      DartType lub = env.computeLeastUpperBound(a, b);
      if (a != b) {
        expectedLub = expectedLub.unalias(env.compiler);
        lub = lub.unalias(env.compiler);
      }
      Expect.equals(expectedLub, lub,
          'Unexpected lub(${a.unalias(env.compiler)},'
                         '${b.unalias(env.compiler)}) = '
                         '${lub}, expected ${expectedLub}');
    }

    checkLub(Object_, Object_, Object_);
    checkLub(Object_, Function_, Object_);
    checkLub(Object_, dynamic__, Object_);
    checkLub(Object_, void__, Object_);
    checkLub(Object_, A__, Object_);
    checkLub(Object_, B__, Object_);
    checkLub(Object_, C__, Object_);
    checkLub(Object_, void__A_B, Object_);
    checkLub(Object_, void__A_C, Object_);
    checkLub(Object_, void__B_A, Object_);
    checkLub(Object_, void__B_C, Object_);
    checkLub(Object_, void___B, Object_);
    checkLub(Object_, void___B_C, Object_);
    checkLub(Object_, void___C_C, Object_);
    checkLub(Object_, void____B, Object_);
    checkLub(Object_, void____B_C, Object_);
    checkLub(Object_, void____C_C, Object_);

    checkLub(Function_, Object_, Object_);
    checkLub(Function_, Function_, Function_);
    checkLub(Function_, dynamic__, Function_);
    checkLub(Function_, void__, Function_);
    checkLub(Function_, A__, Function_);
    checkLub(Function_, B__, Function_);
    checkLub(Function_, C__, Function_);
    checkLub(Function_, void__A_B, Function_);
    checkLub(Function_, void__A_C, Function_);
    checkLub(Function_, void__B_A, Function_);
    checkLub(Function_, void__B_C, Function_);
    checkLub(Function_, void___B, Function_);
    checkLub(Function_, void___B_C, Function_);
    checkLub(Function_, void___C_C, Function_);
    checkLub(Function_, void____B, Function_);
    checkLub(Function_, void____B_C, Function_);
    checkLub(Function_, void____C_C, Function_);

    checkLub(dynamic__, Object_, Object_);
    checkLub(dynamic__, Function_, Function_);
    checkLub(dynamic__, dynamic__, dynamic__);
    checkLub(dynamic__, void__, dynamic__);
    checkLub(dynamic__, A__, dynamic__);
    checkLub(dynamic__, B__, dynamic__);
    checkLub(dynamic__, C__, dynamic__);
    checkLub(dynamic__, void__A_B, Function_);
    checkLub(dynamic__, void__A_C, Function_);
    checkLub(dynamic__, void__B_A, Function_);
    checkLub(dynamic__, void__B_C, Function_);
    checkLub(dynamic__, void___B, dynamic__);
    checkLub(dynamic__, void___B_C, dynamic__);
    checkLub(dynamic__, void___C_C, dynamic__);
    checkLub(dynamic__, void____B, dynamic__);
    checkLub(dynamic__, void____B_C, dynamic__);
    checkLub(dynamic__, void____C_C, dynamic__);

    checkLub(void__, Object_, Object_);
    checkLub(void__, Function_, Function_);
    checkLub(void__, dynamic__, dynamic__);
    checkLub(void__, void__, void__);
    checkLub(void__, A__, void__);
    checkLub(void__, B__, void__);
    checkLub(void__, C__, void__);
    checkLub(void__, void__A_B, Function_);
    checkLub(void__, void__A_C, Function_);
    checkLub(void__, void__B_A, Function_);
    checkLub(void__, void__B_C, Function_);
    checkLub(void__, void___B, void__);
    checkLub(void__, void___B_C, void__);
    checkLub(void__, void___C_C, void__);
    checkLub(void__, void____B, void__);
    checkLub(void__, void____B_C, void__);
    checkLub(void__, void____C_C, void__);

    checkLub(A__, Object_, Object_);
    checkLub(A__, Function_, Function_);
    checkLub(A__, dynamic__, dynamic__);
    checkLub(A__, void__, void__);
    checkLub(A__, A__, A__);
    checkLub(A__, B__, Object__);
    checkLub(A__, C__, Object__);
    checkLub(A__, void__A_B, Function_);
    checkLub(A__, void__A_C, Function_);
    checkLub(A__, void__B_A, Function_);
    checkLub(A__, void__B_C, Function_);
    checkLub(A__, void___B, void__);
    checkLub(A__, void___B_C, void__);
    checkLub(A__, void___C_C, void__);
    checkLub(A__, void____B, void__);
    checkLub(A__, void____B_C, void__);
    checkLub(A__, void____C_C, void__);

    checkLub(B__, Object_, Object_);
    checkLub(B__, Function_, Function_);
    checkLub(B__, dynamic__, dynamic__);
    checkLub(B__, void__, void__);
    checkLub(B__, A__, Object__);
    checkLub(B__, B__, B__);
    checkLub(B__, C__, B__);
    checkLub(B__, void__A_B, Function_);
    checkLub(B__, void__A_C, Function_);
    checkLub(B__, void__B_A, Function_);
    checkLub(B__, void__B_C, Function_);
    checkLub(B__, void___B, void__);
    checkLub(B__, void___B_C, void__);
    checkLub(B__, void___C_C, void__);
    checkLub(B__, void____B, void__);
    checkLub(B__, void____B_C, void__);
    checkLub(B__, void____C_C, void__);

    checkLub(C__, Object_, Object_);
    checkLub(C__, Function_, Function_);
    checkLub(C__, dynamic__, dynamic__);
    checkLub(C__, void__, void__);
    checkLub(C__, A__, Object__);
    checkLub(C__, B__, B__);
    checkLub(C__, C__, C__);
    checkLub(C__, void__A_B, Function_);
    checkLub(C__, void__A_C, Function_);
    checkLub(C__, void__B_A, Function_);
    checkLub(C__, void__B_C, Function_);
    checkLub(C__, void___B, void__);
    checkLub(C__, void___B_C, void__);
    checkLub(C__, void___C_C, void__);
    checkLub(C__, void____B, void__);
    checkLub(C__, void____B_C, void__);
    checkLub(C__, void____C_C, void__);

    checkLub(void__A_B, Object_, Object_);
    checkLub(void__A_B, Function_, Function_);
    checkLub(void__A_B, dynamic__, Function_);
    checkLub(void__A_B, void__, Function_);
    checkLub(void__A_B, A__, Function_);
    checkLub(void__A_B, B__, Function_);
    checkLub(void__A_B, C__, Function_);
    checkLub(void__A_B, void__A_B, void__A_B);
    checkLub(void__A_B, void__A_C, void__A_B);
    checkLub(void__A_B, void__B_A, void__Object_Object);
    checkLub(void__A_B, void__B_C, void__Object_B);
    checkLub(void__A_B, void___B, Function_);
    checkLub(void__A_B, void___B_C, Function_);
    checkLub(void__A_B, void___C_C, Function_);
    checkLub(void__A_B, void____B, Function_);
    checkLub(void__A_B, void____B_C, Function_);
    checkLub(void__A_B, void____C_C, Function_);

    checkLub(void__A_C, Object_, Object_);
    checkLub(void__A_C, Function_, Function_);
    checkLub(void__A_C, dynamic__, Function_);
    checkLub(void__A_C, void__, Function_);
    checkLub(void__A_C, A__, Function_);
    checkLub(void__A_C, B__, Function_);
    checkLub(void__A_C, C__, Function_);
    checkLub(void__A_C, void__A_B, void__A_B);
    checkLub(void__A_C, void__A_C, void__A_C);
    checkLub(void__A_C, void__B_A, void__Object_Object);
    checkLub(void__A_C, void__B_C, void__Object_C);
    checkLub(void__A_C, void___B, Function_);
    checkLub(void__A_C, void___B_C, Function_);
    checkLub(void__A_C, void___C_C, Function_);
    checkLub(void__A_C, void____B, Function_);
    checkLub(void__A_C, void____B_C, Function_);
    checkLub(void__A_C, void____C_C, Function_);

    checkLub(void__B_A, Object_, Object_);
    checkLub(void__B_A, Function_, Function_);
    checkLub(void__B_A, dynamic__, Function_);
    checkLub(void__B_A, void__, Function_);
    checkLub(void__B_A, A__, Function_);
    checkLub(void__B_A, B__, Function_);
    checkLub(void__B_A, C__, Function_);
    checkLub(void__B_A, void__A_B, void__Object_Object);
    checkLub(void__B_A, void__A_C, void__Object_Object);
    checkLub(void__B_A, void__B_A, void__B_A);
    checkLub(void__B_A, void__B_C, void__B_Object);
    checkLub(void__B_A, void___B, Function_);
    checkLub(void__B_A, void___B_C, Function_);
    checkLub(void__B_A, void___C_C, Function_);
    checkLub(void__B_A, void____B, Function_);
    checkLub(void__B_A, void____B_C, Function_);
    checkLub(void__B_A, void____C_C, Function_);

    checkLub(void__B_C, Object_, Object_);
    checkLub(void__B_C, Function_, Function_);
    checkLub(void__B_C, dynamic__, Function_);
    checkLub(void__B_C, void__, Function_);
    checkLub(void__B_C, A__, Function_);
    checkLub(void__B_C, B__, Function_);
    checkLub(void__B_C, C__, Function_);
    checkLub(void__B_C, void__A_B, void__Object_B);
    checkLub(void__B_C, void__A_C, void__Object_C);
    checkLub(void__B_C, void__B_A, void__B_Object);
    checkLub(void__B_C, void__B_C, void__B_C);
    checkLub(void__B_C, void___B, Function_);
    checkLub(void__B_C, void___B_C, Function_);
    checkLub(void__B_C, void___C_C, Function_);
    checkLub(void__B_C, void____B, Function_);
    checkLub(void__B_C, void____B_C, Function_);
    checkLub(void__B_C, void____C_C, Function_);

    checkLub(void___B, Object_, Object_);
    checkLub(void___B, Function_, Function_);
    checkLub(void___B, dynamic__, dynamic__);
    checkLub(void___B, void__, void__);
    checkLub(void___B, A__, void__);
    checkLub(void___B, B__, void__);
    checkLub(void___B, C__, void__);
    checkLub(void___B, void__A_B, Function_);
    checkLub(void___B, void__A_C, Function_);
    checkLub(void___B, void__B_A, Function_);
    checkLub(void___B, void__B_C, Function_);
    checkLub(void___B, void___B, void___B);
    checkLub(void___B, void___B_C, void___B);
    checkLub(void___B, void___C_C, void___B);
    checkLub(void___B, void____B, void__);
    checkLub(void___B, void____B_C, void__);
    checkLub(void___B, void____C_C, void__);

    checkLub(void___B_C, Object_, Object_);
    checkLub(void___B_C, Function_, Function_);
    checkLub(void___B_C, dynamic__, dynamic__);
    checkLub(void___B_C, void__, void__);
    checkLub(void___B_C, A__, void__);
    checkLub(void___B_C, B__, void__);
    checkLub(void___B_C, C__, void__);
    checkLub(void___B_C, void__A_B, Function_);
    checkLub(void___B_C, void__A_C, Function_);
    checkLub(void___B_C, void__B_A, Function_);
    checkLub(void___B_C, void__B_C, Function_);
    checkLub(void___B_C, void___B, void___B);
    checkLub(void___B_C, void___B_C, void___B_C);
    checkLub(void___B_C, void___C_C, void___B_C);
    checkLub(void___B_C, void____B, void__);
    checkLub(void___B_C, void____B_C, void__);
    checkLub(void___B_C, void____C_C, void__);

    checkLub(void___C_C, Object_, Object_);
    checkLub(void___C_C, Function_, Function_);
    checkLub(void___C_C, dynamic__, dynamic__);
    checkLub(void___C_C, void__, void__);
    checkLub(void___C_C, A__, void__);
    checkLub(void___C_C, B__, void__);
    checkLub(void___C_C, C__, void__);
    checkLub(void___C_C, void__A_B, Function_);
    checkLub(void___C_C, void__A_C, Function_);
    checkLub(void___C_C, void__B_A, Function_);
    checkLub(void___C_C, void__B_C, Function_);
    checkLub(void___C_C, void___B, void___B);
    checkLub(void___C_C, void___B_C, void___B_C);
    checkLub(void___C_C, void___C_C, void___C_C);
    checkLub(void___C_C, void____B, void__);
    checkLub(void___C_C, void____B_C, void__);
    checkLub(void___C_C, void____C_C, void__);

    checkLub(void____B, Object_, Object_);
    checkLub(void____B, Function_, Function_);
    checkLub(void____B, dynamic__, dynamic__);
    checkLub(void____B, void__, void__);
    checkLub(void____B, A__, void__);
    checkLub(void____B, B__, void__);
    checkLub(void____B, C__, void__);
    checkLub(void____B, void__A_B, Function_);
    checkLub(void____B, void__A_C, Function_);
    checkLub(void____B, void__B_A, Function_);
    checkLub(void____B, void__B_C, Function_);
    checkLub(void____B, void___B, void__);
    checkLub(void____B, void___B_C, void__);
    checkLub(void____B, void___C_C, void__);
    checkLub(void____B, void____B, void____B);
    checkLub(void____B, void____B_C, void____B);
    checkLub(void____B, void____C_C, void____B);

    checkLub(void____B_C, Object_, Object_);
    checkLub(void____B_C, Function_, Function_);
    checkLub(void____B_C, dynamic__, dynamic__);
    checkLub(void____B_C, void__, void__);
    checkLub(void____B_C, A__, void__);
    checkLub(void____B_C, B__, void__);
    checkLub(void____B_C, C__, void__);
    checkLub(void____B_C, void__A_B, Function_);
    checkLub(void____B_C, void__A_C, Function_);
    checkLub(void____B_C, void__B_A, Function_);
    checkLub(void____B_C, void__B_C, Function_);
    checkLub(void____B_C, void___B, void__);
    checkLub(void____B_C, void___B_C, void__);
    checkLub(void____B_C, void___C_C, void__);
    checkLub(void____B_C, void____B, void____B);
    checkLub(void____B_C, void____B_C, void____B_C);
    checkLub(void____B_C, void____C_C, void____B_C);

    checkLub(void____C_C, Object_, Object_);
    checkLub(void____C_C, Function_, Function_);
    checkLub(void____C_C, dynamic__, dynamic__);
    checkLub(void____C_C, void__, void__);
    checkLub(void____C_C, A__, void__);
    checkLub(void____C_C, B__, void__);
    checkLub(void____C_C, C__, void__);
    checkLub(void____C_C, void__A_B, Function_);
    checkLub(void____C_C, void__A_C, Function_);
    checkLub(void____C_C, void__B_A, Function_);
    checkLub(void____C_C, void__B_C, Function_);
    checkLub(void____C_C, void___B, void__);
    checkLub(void____C_C, void___B_C, void__);
    checkLub(void____C_C, void___C_C, void__);
    checkLub(void____C_C, void____B, void____B);
    checkLub(void____C_C, void____B_C, void____B_C);
    checkLub(void____C_C, void____C_C, void____C_C);
  }));
}

void testTypeVariable() {
  asyncTest(() => TypeEnvironment.create(r"""
      class A {}
      class B {}
      class C extends B {}
      class I<S extends A,
              T extends B,
              U extends C,
              V extends T,
              W extends V,
              X extends T> {}
      """).then((env) {

    //  A     B
    //  |    / \
    //  S   T   C
    //     / \   \
    //    V   X   U
    //   /
    //  W

    DartType Object_ = env['Object'];
    DartType A = env['A'];
    DartType B = env['B'];
    DartType C = env['C'];
    ClassElement I = env.getElement('I');
    DartType S = I.typeVariables[0];
    DartType T = I.typeVariables[1];
    DartType U = I.typeVariables[2];
    DartType V = I.typeVariables[3];
    DartType W = I.typeVariables[4];
    DartType X = I.typeVariables[5];

    checkLub(DartType a, DartType b, DartType expectedLub) {
      DartType lub = env.computeLeastUpperBound(a, b);
      Expect.equals(expectedLub, lub,
          'Unexpected lub($a,$b) = $lub, expected $expectedLub');
    }

    checkLub(Object_, Object_, Object_);
    checkLub(Object_, A, Object_);
    checkLub(Object_, B, Object_);
    checkLub(Object_, C, Object_);
    checkLub(Object_, S, Object_);
    checkLub(Object_, T, Object_);
    checkLub(Object_, U, Object_);
    checkLub(Object_, V, Object_);
    checkLub(Object_, W, Object_);
    checkLub(Object_, X, Object_);

    checkLub(A, Object_, Object_);
    checkLub(A, A, A);
    checkLub(A, B, Object_);
    checkLub(A, C, Object_);
    checkLub(A, S, A);
    checkLub(A, T, Object_);
    checkLub(A, U, Object_);
    checkLub(A, V, Object_);
    checkLub(A, W, Object_);
    checkLub(A, X, Object_);

    checkLub(B, Object_, Object_);
    checkLub(B, A, Object_);
    checkLub(B, B, B);
    checkLub(B, C, B);
    checkLub(B, S, Object_);
    checkLub(B, T, B);
    checkLub(B, U, B);
    checkLub(B, V, B);
    checkLub(B, W, B);
    checkLub(B, X, B);

    checkLub(C, Object_, Object_);
    checkLub(C, A, Object_);
    checkLub(C, B, B);
    checkLub(C, C, C);
    checkLub(C, S, Object_);
    checkLub(C, T, B);
    checkLub(C, U, C);
    checkLub(C, V, B);
    checkLub(C, W, B);
    checkLub(C, X, B);

    checkLub(S, Object_, Object_);
    checkLub(S, A, A);
    checkLub(S, B, Object_);
    checkLub(S, C, Object_);
    checkLub(S, S, S);
    checkLub(S, T, Object_);
    checkLub(S, U, Object_);
    checkLub(S, V, Object_);
    checkLub(S, W, Object_);
    checkLub(S, X, Object_);

    checkLub(T, Object_, Object_);
    checkLub(T, A, Object_);
    checkLub(T, B, B);
    checkLub(T, C, B);
    checkLub(T, S, Object_);
    checkLub(T, T, T);
    checkLub(T, U, B);
    checkLub(T, V, T);
    checkLub(T, W, T);
    checkLub(T, X, T);

    checkLub(U, Object_, Object_);
    checkLub(U, A, Object_);
    checkLub(U, B, B);
    checkLub(U, C, C);
    checkLub(U, S, Object_);
    checkLub(U, T, B);
    checkLub(U, U, U);
    checkLub(U, V, B);
    checkLub(U, W, B);
    checkLub(U, X, B);

    checkLub(V, Object_, Object_);
    checkLub(V, A, Object_);
    checkLub(V, B, B);
    checkLub(V, C, B);
    checkLub(V, S, Object_);
    checkLub(V, T, T);
    checkLub(V, U, B);
    checkLub(V, V, V);
    checkLub(V, W, V);
    checkLub(V, X, T);

    checkLub(W, Object_, Object_);
    checkLub(W, A, Object_);
    checkLub(W, B, B);
    checkLub(W, C, B);
    checkLub(W, S, Object_);
    checkLub(W, T, T);
    checkLub(W, U, B);
    checkLub(W, V, V);
    checkLub(W, W, W);
    checkLub(W, X, T);

    checkLub(X, Object_, Object_);
    checkLub(X, A, Object_);
    checkLub(X, B, B);
    checkLub(X, C, B);
    checkLub(X, S, Object_);
    checkLub(X, T, T);
    checkLub(X, U, B);
    checkLub(X, V, T);
    checkLub(X, W, T);
    checkLub(X, X, X);
  }));
}


