// 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.unaliased;
        lub = lub.unaliased;
      }
      Expect.equals(expectedLub, lub,
          'Unexpected lub(${a.unaliased},'
                         '${b.unaliased} = '
                         '${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);
  }));
}


