// 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 'package:compiler/src/dart_types.dart';
import 'package:compiler/src/elements/elements.dart'
       show Element, ClassElement;

import 'type_test_helper.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);
  }));
}


