// Copyright (c) 2012, 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.

import "compiler_helper.dart";
import "parser_helper.dart";
import "../../../sdk/lib/_internal/compiler/implementation/ssa/ssa.dart";
import "../../../sdk/lib/_internal/compiler/implementation/types/types.dart";

const CONFLICTING = HType.CONFLICTING;
const UNKNOWN = HType.UNKNOWN;
const BOOLEAN = HType.BOOLEAN;
const NUMBER = HType.NUMBER;
const INTEGER = HType.INTEGER;
const DOUBLE = HType.DOUBLE;
const INDEXABLE_PRIMITIVE = HType.INDEXABLE_PRIMITIVE;
const STRING = HType.STRING;
const READABLE_ARRAY = HType.READABLE_ARRAY;
const MUTABLE_ARRAY = HType.MUTABLE_ARRAY;
const FIXED_ARRAY = HType.FIXED_ARRAY;
const EXTENDABLE_ARRAY = HType.EXTENDABLE_ARRAY;
const BOOLEAN_OR_NULL = HType.BOOLEAN_OR_NULL;
const NUMBER_OR_NULL = HType.NUMBER_OR_NULL;
const INTEGER_OR_NULL = HType.INTEGER_OR_NULL;
const DOUBLE_OR_NULL = HType.DOUBLE_OR_NULL;
const STRING_OR_NULL = HType.STRING_OR_NULL;
const NULL = HType.NULL;
const NON_NULL = HType.NON_NULL;

var patternClass;
HType nonPrimitive1;
HType nonPrimitive2;
HType potentialArray;
HType potentialString;
HType jsInterceptor;

HType jsArrayOrNull;
HType jsMutableArrayOrNull;
HType jsFixedArrayOrNull;
HType jsExtendableArrayOrNull;
HType jsIndexableOrNull;
HType jsInterceptorOrNull;


class Pair {
  final first;
  final second;
  Pair(this.first, this.second);
  int get hashCode => first.hashCode * 47 + second.hashCode;
  bool operator==(Pair other) =>
      identical(first, other.first) && identical(second, other.second);
}

class RuleSet {
  final name;
  final operate;
  final Set typesSeen = new Set();
  final Set pairsSeen = new Set();

  RuleSet(this.name, this.operate);

  void rule(type1, type2, result) {
    typesSeen..add(type1)..add(type2);
    var pair1 = new Pair(type1, type2);
    var pair2 = new Pair(type2, type1);
    if (pairsSeen.contains(pair1)) {
      Expect.isFalse(true, 'Redundant rule ($type1, $type2, ...)');
    }
    pairsSeen..add(pair1)..add(pair2);

    var r1 = operate(type1, type2);
    var r2 = operate(type2, type1);
    Expect.equals(result, r1);
    Expect.equals(r1, r2, 'symmetry violation');
  }

  void check(type1, type2, predicate) {
    typesSeen..add(type1)..add(type2);
    var pair = new Pair(type1, type2);
    pairsSeen..add(pair);
    var result = operate(type1, type2);
    Expect.isTrue(predicate(result));
  }

  void validateCoverage() {
    for (var type1 in typesSeen) {
      for (var type2 in typesSeen) {
        var pair = new Pair(type1, type2);
        if (!pairsSeen.contains(pair)) {
          Expect.isTrue(false, 'Missing rule: $name($type1, $type2)');
        }
      }
    }
  }
}

void testUnion(MockCompiler compiler) {
  RuleSet ruleSet = new RuleSet('union', (t1, t2) => t1.union(t2, compiler));
  rule(type1, type2, result) => ruleSet.rule(type1, type2, result);
  check(type1, type2, predicate) => ruleSet.check(type1, type2, predicate);

  rule(CONFLICTING, CONFLICTING, CONFLICTING);
  rule(CONFLICTING, UNKNOWN, UNKNOWN);
  rule(CONFLICTING, BOOLEAN, BOOLEAN);
  rule(CONFLICTING, NUMBER, NUMBER);
  rule(CONFLICTING, INTEGER, INTEGER);
  rule(CONFLICTING, DOUBLE, DOUBLE);
  rule(CONFLICTING, INDEXABLE_PRIMITIVE, INDEXABLE_PRIMITIVE);
  rule(CONFLICTING, STRING, STRING);
  rule(CONFLICTING, READABLE_ARRAY, READABLE_ARRAY);
  rule(CONFLICTING, MUTABLE_ARRAY, MUTABLE_ARRAY);
  rule(CONFLICTING, EXTENDABLE_ARRAY, EXTENDABLE_ARRAY);
  rule(CONFLICTING, nonPrimitive1, nonPrimitive1);
  rule(CONFLICTING, nonPrimitive2, nonPrimitive2);
  rule(CONFLICTING, potentialArray, potentialArray);
  rule(CONFLICTING, potentialString, potentialString);
  rule(CONFLICTING, BOOLEAN_OR_NULL, BOOLEAN_OR_NULL);
  rule(CONFLICTING, NUMBER_OR_NULL, NUMBER_OR_NULL);
  rule(CONFLICTING, INTEGER_OR_NULL, INTEGER_OR_NULL);
  rule(CONFLICTING, DOUBLE_OR_NULL, DOUBLE_OR_NULL);
  rule(CONFLICTING, STRING_OR_NULL, STRING_OR_NULL);
  rule(CONFLICTING, NULL, NULL);
  rule(CONFLICTING, FIXED_ARRAY, FIXED_ARRAY);

  rule(UNKNOWN, UNKNOWN, UNKNOWN);
  rule(UNKNOWN, BOOLEAN, UNKNOWN);
  rule(UNKNOWN, NUMBER, UNKNOWN);
  rule(UNKNOWN, INTEGER, UNKNOWN);
  rule(UNKNOWN, DOUBLE, UNKNOWN);
  rule(UNKNOWN, INDEXABLE_PRIMITIVE, UNKNOWN);
  rule(UNKNOWN, STRING, UNKNOWN);
  rule(UNKNOWN, READABLE_ARRAY, UNKNOWN);
  rule(UNKNOWN, MUTABLE_ARRAY, UNKNOWN);
  rule(UNKNOWN, EXTENDABLE_ARRAY, UNKNOWN);
  rule(UNKNOWN, nonPrimitive1, UNKNOWN);
  rule(UNKNOWN, nonPrimitive2, UNKNOWN);
  rule(UNKNOWN, potentialArray, UNKNOWN);
  rule(UNKNOWN, potentialString, UNKNOWN);
  rule(UNKNOWN, BOOLEAN_OR_NULL, UNKNOWN);
  rule(UNKNOWN, NUMBER_OR_NULL, UNKNOWN);
  rule(UNKNOWN, INTEGER_OR_NULL, UNKNOWN);
  rule(UNKNOWN, DOUBLE_OR_NULL, UNKNOWN);
  rule(UNKNOWN, STRING_OR_NULL, UNKNOWN);
  rule(UNKNOWN, NULL, UNKNOWN);
  rule(UNKNOWN, FIXED_ARRAY, UNKNOWN);

  rule(BOOLEAN, BOOLEAN, BOOLEAN);
  rule(BOOLEAN, NUMBER, jsInterceptor);
  rule(BOOLEAN, INTEGER, jsInterceptor);
  rule(BOOLEAN, DOUBLE, jsInterceptor);
  rule(BOOLEAN, INDEXABLE_PRIMITIVE, NON_NULL);
  rule(BOOLEAN, STRING, jsInterceptor);
  rule(BOOLEAN, READABLE_ARRAY, jsInterceptor);
  rule(BOOLEAN, MUTABLE_ARRAY, jsInterceptor);
  rule(BOOLEAN, EXTENDABLE_ARRAY, jsInterceptor);
  rule(BOOLEAN, nonPrimitive1, NON_NULL);
  rule(BOOLEAN, nonPrimitive2, NON_NULL);
  rule(BOOLEAN, potentialArray, UNKNOWN);
  rule(BOOLEAN, potentialString, UNKNOWN);
  rule(BOOLEAN, BOOLEAN_OR_NULL, BOOLEAN_OR_NULL);
  rule(BOOLEAN, NUMBER_OR_NULL, jsInterceptorOrNull);
  rule(BOOLEAN, INTEGER_OR_NULL, jsInterceptorOrNull);
  rule(BOOLEAN, DOUBLE_OR_NULL, jsInterceptorOrNull);
  rule(BOOLEAN, STRING_OR_NULL, jsInterceptorOrNull);
  rule(BOOLEAN, NULL, BOOLEAN_OR_NULL);
  rule(BOOLEAN, FIXED_ARRAY, jsInterceptor);

  rule(NUMBER, NUMBER, NUMBER);
  rule(NUMBER, INTEGER, NUMBER);
  rule(NUMBER, DOUBLE, NUMBER);
  rule(NUMBER, INDEXABLE_PRIMITIVE, NON_NULL);
  rule(NUMBER, STRING, jsInterceptor);
  rule(NUMBER, READABLE_ARRAY, jsInterceptor);
  rule(NUMBER, MUTABLE_ARRAY, jsInterceptor);
  rule(NUMBER, EXTENDABLE_ARRAY, jsInterceptor);
  rule(NUMBER, nonPrimitive1, NON_NULL);
  rule(NUMBER, nonPrimitive2, NON_NULL);
  rule(NUMBER, potentialArray, UNKNOWN);
  rule(NUMBER, potentialString, UNKNOWN);
  rule(NUMBER, BOOLEAN_OR_NULL, jsInterceptorOrNull);
  rule(NUMBER, NUMBER_OR_NULL, NUMBER_OR_NULL);
  rule(NUMBER, INTEGER_OR_NULL, NUMBER_OR_NULL);
  rule(NUMBER, DOUBLE_OR_NULL, NUMBER_OR_NULL);
  rule(NUMBER, STRING_OR_NULL, jsInterceptorOrNull);
  rule(NUMBER, NULL, NUMBER_OR_NULL);
  rule(NUMBER, FIXED_ARRAY, jsInterceptor);

  rule(INTEGER, INTEGER, INTEGER);
  rule(INTEGER, DOUBLE, NUMBER);
  rule(INTEGER, INDEXABLE_PRIMITIVE, NON_NULL);
  rule(INTEGER, STRING, jsInterceptor);
  rule(INTEGER, READABLE_ARRAY, jsInterceptor);
  rule(INTEGER, MUTABLE_ARRAY, jsInterceptor);
  rule(INTEGER, EXTENDABLE_ARRAY, jsInterceptor);
  rule(INTEGER, nonPrimitive1, NON_NULL);
  rule(INTEGER, nonPrimitive2, NON_NULL);
  rule(INTEGER, potentialArray, UNKNOWN);
  rule(INTEGER, potentialString, UNKNOWN);
  rule(INTEGER, BOOLEAN_OR_NULL, jsInterceptorOrNull);
  rule(INTEGER, NUMBER_OR_NULL, NUMBER_OR_NULL);
  rule(INTEGER, INTEGER_OR_NULL, INTEGER_OR_NULL);
  rule(INTEGER, DOUBLE_OR_NULL, NUMBER_OR_NULL);
  rule(INTEGER, STRING_OR_NULL, jsInterceptorOrNull);
  rule(INTEGER, NULL, INTEGER_OR_NULL);
  rule(INTEGER, FIXED_ARRAY, jsInterceptor);

  rule(DOUBLE, DOUBLE, DOUBLE);
  rule(DOUBLE, INDEXABLE_PRIMITIVE, NON_NULL);
  rule(DOUBLE, STRING, jsInterceptor);
  rule(DOUBLE, READABLE_ARRAY, jsInterceptor);
  rule(DOUBLE, MUTABLE_ARRAY, jsInterceptor);
  rule(DOUBLE, EXTENDABLE_ARRAY, jsInterceptor);
  rule(DOUBLE, nonPrimitive1, NON_NULL);
  rule(DOUBLE, nonPrimitive2, NON_NULL);
  rule(DOUBLE, potentialArray, UNKNOWN);
  rule(DOUBLE, potentialString, UNKNOWN);
  rule(DOUBLE, BOOLEAN_OR_NULL, jsInterceptorOrNull);
  rule(DOUBLE, NUMBER_OR_NULL, NUMBER_OR_NULL);
  rule(DOUBLE, INTEGER_OR_NULL, NUMBER_OR_NULL);
  rule(DOUBLE, DOUBLE_OR_NULL, DOUBLE_OR_NULL);
  rule(DOUBLE, STRING_OR_NULL, jsInterceptorOrNull);
  rule(DOUBLE, NULL, DOUBLE_OR_NULL);
  rule(DOUBLE, FIXED_ARRAY, jsInterceptor);

  rule(INDEXABLE_PRIMITIVE, INDEXABLE_PRIMITIVE, INDEXABLE_PRIMITIVE);
  rule(INDEXABLE_PRIMITIVE, STRING, INDEXABLE_PRIMITIVE);
  rule(INDEXABLE_PRIMITIVE, READABLE_ARRAY, INDEXABLE_PRIMITIVE);
  rule(INDEXABLE_PRIMITIVE, MUTABLE_ARRAY, INDEXABLE_PRIMITIVE);
  rule(INDEXABLE_PRIMITIVE, EXTENDABLE_ARRAY, INDEXABLE_PRIMITIVE);
  rule(INDEXABLE_PRIMITIVE, nonPrimitive1, NON_NULL);
  rule(INDEXABLE_PRIMITIVE, nonPrimitive2, NON_NULL);
  rule(INDEXABLE_PRIMITIVE, potentialArray, UNKNOWN);
  rule(INDEXABLE_PRIMITIVE, potentialString, UNKNOWN);
  rule(INDEXABLE_PRIMITIVE, BOOLEAN_OR_NULL, UNKNOWN);
  rule(INDEXABLE_PRIMITIVE, NUMBER_OR_NULL, UNKNOWN);
  rule(INDEXABLE_PRIMITIVE, INTEGER_OR_NULL, UNKNOWN);
  rule(INDEXABLE_PRIMITIVE, DOUBLE_OR_NULL, UNKNOWN);
  rule(INDEXABLE_PRIMITIVE, STRING_OR_NULL, jsIndexableOrNull);
  rule(INDEXABLE_PRIMITIVE, NULL, jsIndexableOrNull);
  rule(INDEXABLE_PRIMITIVE, FIXED_ARRAY, INDEXABLE_PRIMITIVE);

  rule(STRING, STRING, STRING);
  rule(STRING, READABLE_ARRAY, INDEXABLE_PRIMITIVE);
  rule(STRING, MUTABLE_ARRAY, INDEXABLE_PRIMITIVE);
  rule(STRING, EXTENDABLE_ARRAY, INDEXABLE_PRIMITIVE);
  rule(STRING, nonPrimitive1, NON_NULL);
  rule(STRING, nonPrimitive2, NON_NULL);
  rule(STRING, potentialArray, UNKNOWN);
  rule(STRING, potentialString, potentialString);
  rule(STRING, BOOLEAN_OR_NULL, jsInterceptorOrNull);
  rule(STRING, NUMBER_OR_NULL, jsInterceptorOrNull);
  rule(STRING, INTEGER_OR_NULL, jsInterceptorOrNull);
  rule(STRING, DOUBLE_OR_NULL, jsInterceptorOrNull);
  rule(STRING, STRING_OR_NULL, STRING_OR_NULL);
  rule(STRING, NULL, STRING_OR_NULL);
  rule(STRING, FIXED_ARRAY, INDEXABLE_PRIMITIVE);

  rule(READABLE_ARRAY, READABLE_ARRAY, READABLE_ARRAY);
  rule(READABLE_ARRAY, MUTABLE_ARRAY, READABLE_ARRAY);
  rule(READABLE_ARRAY, EXTENDABLE_ARRAY, READABLE_ARRAY);
  rule(READABLE_ARRAY, nonPrimitive1, NON_NULL);
  rule(READABLE_ARRAY, nonPrimitive2, NON_NULL);
  rule(READABLE_ARRAY, potentialArray, potentialArray);
  rule(READABLE_ARRAY, potentialString, UNKNOWN);
  rule(READABLE_ARRAY, BOOLEAN_OR_NULL, jsInterceptorOrNull);
  rule(READABLE_ARRAY, NUMBER_OR_NULL, jsInterceptorOrNull);
  rule(READABLE_ARRAY, INTEGER_OR_NULL, jsInterceptorOrNull);
  rule(READABLE_ARRAY, DOUBLE_OR_NULL, jsInterceptorOrNull);
  rule(READABLE_ARRAY, STRING_OR_NULL, jsIndexableOrNull);
  rule(READABLE_ARRAY, NULL, jsArrayOrNull);
  rule(READABLE_ARRAY, FIXED_ARRAY, READABLE_ARRAY);

  rule(MUTABLE_ARRAY, MUTABLE_ARRAY, MUTABLE_ARRAY);
  rule(MUTABLE_ARRAY, EXTENDABLE_ARRAY, MUTABLE_ARRAY);
  rule(MUTABLE_ARRAY, nonPrimitive1, NON_NULL);
  rule(MUTABLE_ARRAY, nonPrimitive2, NON_NULL);
  rule(MUTABLE_ARRAY, potentialArray, potentialArray);
  rule(MUTABLE_ARRAY, potentialString, UNKNOWN);
  rule(MUTABLE_ARRAY, BOOLEAN_OR_NULL, jsInterceptorOrNull);
  rule(MUTABLE_ARRAY, NUMBER_OR_NULL, jsInterceptorOrNull);
  rule(MUTABLE_ARRAY, INTEGER_OR_NULL, jsInterceptorOrNull);
  rule(MUTABLE_ARRAY, DOUBLE_OR_NULL, jsInterceptorOrNull);
  rule(MUTABLE_ARRAY, STRING_OR_NULL, jsIndexableOrNull);
  rule(MUTABLE_ARRAY, NULL, jsMutableArrayOrNull);
  rule(MUTABLE_ARRAY, FIXED_ARRAY, MUTABLE_ARRAY);

  rule(EXTENDABLE_ARRAY, EXTENDABLE_ARRAY, EXTENDABLE_ARRAY);
  rule(EXTENDABLE_ARRAY, nonPrimitive1, NON_NULL);
  rule(EXTENDABLE_ARRAY, nonPrimitive2, NON_NULL);
  rule(EXTENDABLE_ARRAY, potentialArray, potentialArray);
  rule(EXTENDABLE_ARRAY, potentialString, UNKNOWN);
  rule(EXTENDABLE_ARRAY, BOOLEAN_OR_NULL, jsInterceptorOrNull);
  rule(EXTENDABLE_ARRAY, NUMBER_OR_NULL, jsInterceptorOrNull);
  rule(EXTENDABLE_ARRAY, INTEGER_OR_NULL, jsInterceptorOrNull);
  rule(EXTENDABLE_ARRAY, DOUBLE_OR_NULL, jsInterceptorOrNull);
  rule(EXTENDABLE_ARRAY, STRING_OR_NULL, jsIndexableOrNull);
  rule(EXTENDABLE_ARRAY, NULL, jsExtendableArrayOrNull);
  rule(EXTENDABLE_ARRAY, FIXED_ARRAY, MUTABLE_ARRAY);

  rule(nonPrimitive1, nonPrimitive1, nonPrimitive1);
  rule(nonPrimitive1, nonPrimitive2, NON_NULL);
  rule(nonPrimitive1, potentialArray, UNKNOWN);
  rule(nonPrimitive1, potentialString, UNKNOWN);
  rule(nonPrimitive1, BOOLEAN_OR_NULL, UNKNOWN);
  rule(nonPrimitive1, NUMBER_OR_NULL, UNKNOWN);
  rule(nonPrimitive1, INTEGER_OR_NULL, UNKNOWN);
  rule(nonPrimitive1, DOUBLE_OR_NULL, UNKNOWN);
  rule(nonPrimitive1, STRING_OR_NULL, UNKNOWN);
  rule(nonPrimitive1, FIXED_ARRAY, NON_NULL);

  rule(nonPrimitive2, nonPrimitive2, nonPrimitive2);
  rule(nonPrimitive2, potentialArray, UNKNOWN);
  rule(nonPrimitive2, potentialString, UNKNOWN);
  rule(nonPrimitive2, BOOLEAN_OR_NULL, UNKNOWN);
  rule(nonPrimitive2, NUMBER_OR_NULL, UNKNOWN);
  rule(nonPrimitive2, INTEGER_OR_NULL, UNKNOWN);
  rule(nonPrimitive2, DOUBLE_OR_NULL, UNKNOWN);
  rule(nonPrimitive2, STRING_OR_NULL, UNKNOWN);
  rule(nonPrimitive2, FIXED_ARRAY, NON_NULL);

  rule(potentialArray, potentialArray, potentialArray);
  rule(potentialArray, potentialString, UNKNOWN);
  rule(potentialArray, BOOLEAN_OR_NULL, UNKNOWN);
  rule(potentialArray, NUMBER_OR_NULL, UNKNOWN);
  rule(potentialArray, INTEGER_OR_NULL, UNKNOWN);
  rule(potentialArray, DOUBLE_OR_NULL, UNKNOWN);
  rule(potentialArray, STRING_OR_NULL, UNKNOWN);
  rule(potentialArray, NULL, potentialArray);
  rule(potentialArray, FIXED_ARRAY, potentialArray);

  rule(potentialString, potentialString, potentialString);
  rule(potentialString, BOOLEAN_OR_NULL, UNKNOWN);
  rule(potentialString, NUMBER_OR_NULL, UNKNOWN);
  rule(potentialString, INTEGER_OR_NULL, UNKNOWN);
  rule(potentialString, DOUBLE_OR_NULL, UNKNOWN);
  rule(potentialString, STRING_OR_NULL, potentialString);
  rule(potentialString, NULL, potentialString);
  rule(potentialString, FIXED_ARRAY, UNKNOWN);

  rule(BOOLEAN_OR_NULL, BOOLEAN_OR_NULL, BOOLEAN_OR_NULL);
  rule(BOOLEAN_OR_NULL, NUMBER_OR_NULL, jsInterceptorOrNull);
  rule(BOOLEAN_OR_NULL, INTEGER_OR_NULL, jsInterceptorOrNull);
  rule(BOOLEAN_OR_NULL, DOUBLE_OR_NULL, jsInterceptorOrNull);
  rule(BOOLEAN_OR_NULL, STRING_OR_NULL, jsInterceptorOrNull);
  rule(BOOLEAN_OR_NULL, NULL, BOOLEAN_OR_NULL);
  rule(BOOLEAN_OR_NULL, FIXED_ARRAY, jsInterceptorOrNull);

  rule(NUMBER_OR_NULL, NUMBER_OR_NULL, NUMBER_OR_NULL);
  rule(NUMBER_OR_NULL, INTEGER_OR_NULL, NUMBER_OR_NULL);
  rule(NUMBER_OR_NULL, DOUBLE_OR_NULL, NUMBER_OR_NULL);
  rule(NUMBER_OR_NULL, STRING_OR_NULL, jsInterceptorOrNull);
  rule(NUMBER_OR_NULL, NULL, NUMBER_OR_NULL);
  rule(NUMBER_OR_NULL, FIXED_ARRAY, jsInterceptorOrNull);

  rule(INTEGER_OR_NULL, INTEGER_OR_NULL, INTEGER_OR_NULL);
  rule(INTEGER_OR_NULL, DOUBLE_OR_NULL, NUMBER_OR_NULL);
  rule(INTEGER_OR_NULL, STRING_OR_NULL, jsInterceptorOrNull);
  rule(INTEGER_OR_NULL, NULL, INTEGER_OR_NULL);
  rule(INTEGER_OR_NULL, FIXED_ARRAY, jsInterceptorOrNull);

  rule(DOUBLE_OR_NULL, DOUBLE_OR_NULL, DOUBLE_OR_NULL);
  rule(DOUBLE_OR_NULL, STRING_OR_NULL, jsInterceptorOrNull);
  rule(DOUBLE_OR_NULL, NULL, DOUBLE_OR_NULL);
  rule(DOUBLE_OR_NULL, FIXED_ARRAY, jsInterceptorOrNull);

  rule(STRING_OR_NULL, STRING_OR_NULL, STRING_OR_NULL);
  rule(STRING_OR_NULL, NULL, STRING_OR_NULL);
  rule(STRING_OR_NULL, FIXED_ARRAY, jsIndexableOrNull);

  rule(NULL, NULL, NULL);
  rule(NULL, FIXED_ARRAY, jsFixedArrayOrNull);

  rule(FIXED_ARRAY, FIXED_ARRAY, FIXED_ARRAY);

  check(nonPrimitive1, NULL, (type) => type is HBoundedType);
  check(nonPrimitive2, NULL, (type) => type is HBoundedType);
  check(NULL, nonPrimitive1, (type) => type.canBeNull());
  check(NULL, nonPrimitive2, (type) => type.canBeNull());

  ruleSet.validateCoverage();
}

void testIntersection(MockCompiler compiler) {
  RuleSet ruleSet = new RuleSet('intersection',
                                (t1, t2) => t1.intersection(t2, compiler));
  rule(type1, type2, result) => ruleSet.rule(type1, type2, result);

  rule(CONFLICTING, CONFLICTING, CONFLICTING);
  rule(CONFLICTING, UNKNOWN, CONFLICTING);
  rule(CONFLICTING, BOOLEAN, CONFLICTING);
  rule(CONFLICTING, NUMBER, CONFLICTING);
  rule(CONFLICTING, INTEGER, CONFLICTING);
  rule(CONFLICTING, DOUBLE, CONFLICTING);
  rule(CONFLICTING, INDEXABLE_PRIMITIVE, CONFLICTING);
  rule(CONFLICTING, STRING, CONFLICTING);
  rule(CONFLICTING, READABLE_ARRAY, CONFLICTING);
  rule(CONFLICTING, MUTABLE_ARRAY, CONFLICTING);
  rule(CONFLICTING, EXTENDABLE_ARRAY, CONFLICTING);
  rule(CONFLICTING, nonPrimitive1, CONFLICTING);
  rule(CONFLICTING, nonPrimitive2, CONFLICTING);
  rule(CONFLICTING, potentialArray, CONFLICTING);
  rule(CONFLICTING, potentialString, CONFLICTING);
  rule(CONFLICTING, BOOLEAN_OR_NULL, CONFLICTING);
  rule(CONFLICTING, NUMBER_OR_NULL, CONFLICTING);
  rule(CONFLICTING, INTEGER_OR_NULL, CONFLICTING);
  rule(CONFLICTING, DOUBLE_OR_NULL, CONFLICTING);
  rule(CONFLICTING, STRING_OR_NULL, CONFLICTING);
  rule(CONFLICTING, NULL, CONFLICTING);
  rule(CONFLICTING, FIXED_ARRAY, CONFLICTING);

  rule(UNKNOWN, UNKNOWN, UNKNOWN);
  rule(UNKNOWN, BOOLEAN, BOOLEAN);
  rule(UNKNOWN, NUMBER, NUMBER);
  rule(UNKNOWN, INTEGER, INTEGER);
  rule(UNKNOWN, DOUBLE, DOUBLE);
  rule(UNKNOWN, INDEXABLE_PRIMITIVE, INDEXABLE_PRIMITIVE);
  rule(UNKNOWN, STRING, STRING);
  rule(UNKNOWN, READABLE_ARRAY, READABLE_ARRAY);
  rule(UNKNOWN, MUTABLE_ARRAY, MUTABLE_ARRAY);
  rule(UNKNOWN, EXTENDABLE_ARRAY, EXTENDABLE_ARRAY);
  rule(UNKNOWN, nonPrimitive1, nonPrimitive1);
  rule(UNKNOWN, nonPrimitive2, nonPrimitive2);
  rule(UNKNOWN, potentialArray, potentialArray);
  rule(UNKNOWN, potentialString, potentialString);
  rule(UNKNOWN, BOOLEAN_OR_NULL, BOOLEAN_OR_NULL);
  rule(UNKNOWN, NUMBER_OR_NULL, NUMBER_OR_NULL);
  rule(UNKNOWN, INTEGER_OR_NULL, INTEGER_OR_NULL);
  rule(UNKNOWN, DOUBLE_OR_NULL, DOUBLE_OR_NULL);
  rule(UNKNOWN, STRING_OR_NULL, STRING_OR_NULL);
  rule(UNKNOWN, NULL, NULL);
  rule(UNKNOWN, FIXED_ARRAY, FIXED_ARRAY);

  rule(BOOLEAN, BOOLEAN, BOOLEAN);
  rule(BOOLEAN, NUMBER, CONFLICTING);
  rule(BOOLEAN, INTEGER, CONFLICTING);
  rule(BOOLEAN, DOUBLE, CONFLICTING);
  rule(BOOLEAN, INDEXABLE_PRIMITIVE, CONFLICTING);
  rule(BOOLEAN, STRING, CONFLICTING);
  rule(BOOLEAN, READABLE_ARRAY, CONFLICTING);
  rule(BOOLEAN, MUTABLE_ARRAY, CONFLICTING);
  rule(BOOLEAN, EXTENDABLE_ARRAY, CONFLICTING);
  rule(BOOLEAN, nonPrimitive1, CONFLICTING);
  rule(BOOLEAN, nonPrimitive2, CONFLICTING);
  rule(BOOLEAN, potentialArray, CONFLICTING);
  rule(BOOLEAN, potentialString, CONFLICTING);
  rule(BOOLEAN, BOOLEAN_OR_NULL, BOOLEAN);
  rule(BOOLEAN, NUMBER_OR_NULL, CONFLICTING);
  rule(BOOLEAN, INTEGER_OR_NULL, CONFLICTING);
  rule(BOOLEAN, DOUBLE_OR_NULL, CONFLICTING);
  rule(BOOLEAN, STRING_OR_NULL, CONFLICTING);
  rule(BOOLEAN, NULL, CONFLICTING);
  rule(BOOLEAN, FIXED_ARRAY, CONFLICTING);

  rule(NUMBER, NUMBER, NUMBER);
  rule(NUMBER, INTEGER, INTEGER);
  rule(NUMBER, DOUBLE, DOUBLE);
  rule(NUMBER, INDEXABLE_PRIMITIVE, CONFLICTING);
  rule(NUMBER, STRING, CONFLICTING);
  rule(NUMBER, READABLE_ARRAY, CONFLICTING);
  rule(NUMBER, MUTABLE_ARRAY, CONFLICTING);
  rule(NUMBER, EXTENDABLE_ARRAY, CONFLICTING);
  rule(NUMBER, nonPrimitive1, CONFLICTING);
  rule(NUMBER, nonPrimitive2, CONFLICTING);
  rule(NUMBER, potentialArray, CONFLICTING);
  rule(NUMBER, potentialString, CONFLICTING);
  rule(NUMBER, BOOLEAN_OR_NULL, CONFLICTING);
  rule(NUMBER, NUMBER_OR_NULL, NUMBER);
  rule(NUMBER, INTEGER_OR_NULL, INTEGER);
  rule(NUMBER, DOUBLE_OR_NULL, DOUBLE);
  rule(NUMBER, STRING_OR_NULL, CONFLICTING);
  rule(NUMBER, NULL, CONFLICTING);
  rule(NUMBER, FIXED_ARRAY, CONFLICTING);

  rule(INTEGER, INTEGER, INTEGER);
  rule(INTEGER, DOUBLE, CONFLICTING);
  rule(INTEGER, INDEXABLE_PRIMITIVE, CONFLICTING);
  rule(INTEGER, STRING, CONFLICTING);
  rule(INTEGER, READABLE_ARRAY, CONFLICTING);
  rule(INTEGER, MUTABLE_ARRAY, CONFLICTING);
  rule(INTEGER, EXTENDABLE_ARRAY, CONFLICTING);
  rule(INTEGER, nonPrimitive1, CONFLICTING);
  rule(INTEGER, nonPrimitive2, CONFLICTING);
  rule(INTEGER, potentialArray, CONFLICTING);
  rule(INTEGER, potentialString, CONFLICTING);
  rule(INTEGER, BOOLEAN_OR_NULL, CONFLICTING);
  rule(INTEGER, NUMBER_OR_NULL, INTEGER);
  rule(INTEGER, INTEGER_OR_NULL, INTEGER);
  rule(INTEGER, DOUBLE_OR_NULL, CONFLICTING);
  rule(INTEGER, STRING_OR_NULL, CONFLICTING);
  rule(INTEGER, NULL, CONFLICTING);
  rule(INTEGER, FIXED_ARRAY, CONFLICTING);

  rule(DOUBLE, DOUBLE, DOUBLE);
  rule(DOUBLE, INDEXABLE_PRIMITIVE, CONFLICTING);
  rule(DOUBLE, STRING, CONFLICTING);
  rule(DOUBLE, READABLE_ARRAY, CONFLICTING);
  rule(DOUBLE, MUTABLE_ARRAY, CONFLICTING);
  rule(DOUBLE, EXTENDABLE_ARRAY, CONFLICTING);
  rule(DOUBLE, nonPrimitive1, CONFLICTING);
  rule(DOUBLE, nonPrimitive2, CONFLICTING);
  rule(DOUBLE, potentialArray, CONFLICTING);
  rule(DOUBLE, potentialString, CONFLICTING);
  rule(DOUBLE, BOOLEAN_OR_NULL, CONFLICTING);
  rule(DOUBLE, NUMBER_OR_NULL, DOUBLE);
  rule(DOUBLE, INTEGER_OR_NULL, CONFLICTING);
  rule(DOUBLE, DOUBLE_OR_NULL, DOUBLE);
  rule(DOUBLE, STRING_OR_NULL, CONFLICTING);
  rule(DOUBLE, NULL, CONFLICTING);
  rule(DOUBLE, FIXED_ARRAY, CONFLICTING);

  rule(INDEXABLE_PRIMITIVE, INDEXABLE_PRIMITIVE, INDEXABLE_PRIMITIVE);
  rule(INDEXABLE_PRIMITIVE, STRING, STRING);
  rule(INDEXABLE_PRIMITIVE, READABLE_ARRAY, READABLE_ARRAY);
  rule(INDEXABLE_PRIMITIVE, MUTABLE_ARRAY, MUTABLE_ARRAY);
  rule(INDEXABLE_PRIMITIVE, EXTENDABLE_ARRAY, EXTENDABLE_ARRAY);
  rule(INDEXABLE_PRIMITIVE, nonPrimitive1, CONFLICTING);
  rule(INDEXABLE_PRIMITIVE, nonPrimitive2, CONFLICTING);
  rule(INDEXABLE_PRIMITIVE, potentialArray, READABLE_ARRAY);
  rule(INDEXABLE_PRIMITIVE, potentialString, STRING);
  rule(INDEXABLE_PRIMITIVE, BOOLEAN_OR_NULL, CONFLICTING);
  rule(INDEXABLE_PRIMITIVE, NUMBER_OR_NULL, CONFLICTING);
  rule(INDEXABLE_PRIMITIVE, INTEGER_OR_NULL, CONFLICTING);
  rule(INDEXABLE_PRIMITIVE, DOUBLE_OR_NULL, CONFLICTING);
  rule(INDEXABLE_PRIMITIVE, STRING_OR_NULL, STRING);
  rule(INDEXABLE_PRIMITIVE, NULL, CONFLICTING);
  rule(INDEXABLE_PRIMITIVE, FIXED_ARRAY, FIXED_ARRAY);

  rule(STRING, STRING, STRING);
  rule(STRING, READABLE_ARRAY, CONFLICTING);
  rule(STRING, MUTABLE_ARRAY, CONFLICTING);
  rule(STRING, EXTENDABLE_ARRAY, CONFLICTING);
  rule(STRING, nonPrimitive1, CONFLICTING);
  rule(STRING, nonPrimitive2, CONFLICTING);
  rule(STRING, potentialArray, CONFLICTING);
  rule(STRING, potentialString, STRING);
  rule(STRING, BOOLEAN_OR_NULL, CONFLICTING);
  rule(STRING, NUMBER_OR_NULL, CONFLICTING);
  rule(STRING, INTEGER_OR_NULL, CONFLICTING);
  rule(STRING, DOUBLE_OR_NULL, CONFLICTING);
  rule(STRING, STRING_OR_NULL, STRING);
  rule(STRING, NULL, CONFLICTING);
  rule(STRING, FIXED_ARRAY, CONFLICTING);

  rule(READABLE_ARRAY, READABLE_ARRAY, READABLE_ARRAY);
  rule(READABLE_ARRAY, MUTABLE_ARRAY, MUTABLE_ARRAY);
  rule(READABLE_ARRAY, EXTENDABLE_ARRAY, EXTENDABLE_ARRAY);
  rule(READABLE_ARRAY, nonPrimitive1, CONFLICTING);
  rule(READABLE_ARRAY, nonPrimitive2, CONFLICTING);
  rule(READABLE_ARRAY, potentialArray, READABLE_ARRAY);
  rule(READABLE_ARRAY, potentialString, CONFLICTING);
  rule(READABLE_ARRAY, BOOLEAN_OR_NULL, CONFLICTING);
  rule(READABLE_ARRAY, NUMBER_OR_NULL, CONFLICTING);
  rule(READABLE_ARRAY, INTEGER_OR_NULL, CONFLICTING);
  rule(READABLE_ARRAY, DOUBLE_OR_NULL, CONFLICTING);
  rule(READABLE_ARRAY, STRING_OR_NULL, CONFLICTING);
  rule(READABLE_ARRAY, NULL, CONFLICTING);
  rule(READABLE_ARRAY, FIXED_ARRAY, FIXED_ARRAY);

  rule(MUTABLE_ARRAY, MUTABLE_ARRAY, MUTABLE_ARRAY);
  rule(MUTABLE_ARRAY, EXTENDABLE_ARRAY, EXTENDABLE_ARRAY);
  rule(MUTABLE_ARRAY, nonPrimitive1, CONFLICTING);
  rule(MUTABLE_ARRAY, nonPrimitive2, CONFLICTING);
  rule(MUTABLE_ARRAY, potentialArray, MUTABLE_ARRAY);
  rule(MUTABLE_ARRAY, potentialString, CONFLICTING);
  rule(MUTABLE_ARRAY, BOOLEAN_OR_NULL, CONFLICTING);
  rule(MUTABLE_ARRAY, NUMBER_OR_NULL, CONFLICTING);
  rule(MUTABLE_ARRAY, INTEGER_OR_NULL, CONFLICTING);
  rule(MUTABLE_ARRAY, DOUBLE_OR_NULL, CONFLICTING);
  rule(MUTABLE_ARRAY, STRING_OR_NULL, CONFLICTING);
  rule(MUTABLE_ARRAY, NULL, CONFLICTING);
  rule(MUTABLE_ARRAY, FIXED_ARRAY, FIXED_ARRAY);

  rule(EXTENDABLE_ARRAY, EXTENDABLE_ARRAY, EXTENDABLE_ARRAY);
  rule(EXTENDABLE_ARRAY, nonPrimitive1, CONFLICTING);
  rule(EXTENDABLE_ARRAY, nonPrimitive2, CONFLICTING);
  rule(EXTENDABLE_ARRAY, potentialArray, EXTENDABLE_ARRAY);
  rule(EXTENDABLE_ARRAY, potentialString, CONFLICTING);
  rule(EXTENDABLE_ARRAY, BOOLEAN_OR_NULL, CONFLICTING);
  rule(EXTENDABLE_ARRAY, NUMBER_OR_NULL, CONFLICTING);
  rule(EXTENDABLE_ARRAY, INTEGER_OR_NULL, CONFLICTING);
  rule(EXTENDABLE_ARRAY, DOUBLE_OR_NULL, CONFLICTING);
  rule(EXTENDABLE_ARRAY, STRING_OR_NULL, CONFLICTING);
  rule(EXTENDABLE_ARRAY, NULL, CONFLICTING);
  rule(EXTENDABLE_ARRAY, FIXED_ARRAY, CONFLICTING);

  rule(nonPrimitive1, nonPrimitive1, nonPrimitive1);
  rule(nonPrimitive1, nonPrimitive2, CONFLICTING);
  rule(nonPrimitive1, potentialArray, CONFLICTING);
  rule(nonPrimitive1, potentialString, CONFLICTING);
  rule(nonPrimitive1, BOOLEAN_OR_NULL, CONFLICTING);
  rule(nonPrimitive1, NUMBER_OR_NULL, CONFLICTING);
  rule(nonPrimitive1, INTEGER_OR_NULL, CONFLICTING);
  rule(nonPrimitive1, DOUBLE_OR_NULL, CONFLICTING);
  rule(nonPrimitive1, STRING_OR_NULL, CONFLICTING);
  rule(nonPrimitive1, NULL, CONFLICTING);
  rule(nonPrimitive1, FIXED_ARRAY, CONFLICTING);

  rule(nonPrimitive2, nonPrimitive2, nonPrimitive2);
  rule(nonPrimitive2, potentialArray, CONFLICTING);
  rule(nonPrimitive2, potentialString, CONFLICTING);
  rule(nonPrimitive2, BOOLEAN_OR_NULL, CONFLICTING);
  rule(nonPrimitive2, NUMBER_OR_NULL, CONFLICTING);
  rule(nonPrimitive2, INTEGER_OR_NULL, CONFLICTING);
  rule(nonPrimitive2, DOUBLE_OR_NULL, CONFLICTING);
  rule(nonPrimitive2, STRING_OR_NULL, CONFLICTING);
  rule(nonPrimitive2, NULL, CONFLICTING);
  rule(nonPrimitive2, FIXED_ARRAY, CONFLICTING);

  rule(potentialArray, potentialArray, potentialArray);
  rule(potentialArray, potentialString, NULL);
  rule(potentialArray, BOOLEAN_OR_NULL, NULL);
  rule(potentialArray, NUMBER_OR_NULL, NULL);
  rule(potentialArray, INTEGER_OR_NULL, NULL);
  rule(potentialArray, DOUBLE_OR_NULL, NULL);
  rule(potentialArray, STRING_OR_NULL, NULL);
  rule(potentialArray, NULL, NULL);
  rule(potentialArray, FIXED_ARRAY, FIXED_ARRAY);

  rule(potentialString, potentialString, potentialString);
  rule(potentialString, BOOLEAN_OR_NULL, NULL);
  rule(potentialString, NUMBER_OR_NULL, NULL);
  rule(potentialString, INTEGER_OR_NULL, NULL);
  rule(potentialString, DOUBLE_OR_NULL, NULL);
  rule(potentialString, STRING_OR_NULL, STRING_OR_NULL);
  rule(potentialString, NULL, NULL);
  rule(potentialString, FIXED_ARRAY, CONFLICTING);

  rule(BOOLEAN_OR_NULL, BOOLEAN_OR_NULL, BOOLEAN_OR_NULL);
  rule(BOOLEAN_OR_NULL, NUMBER_OR_NULL, NULL);
  rule(BOOLEAN_OR_NULL, INTEGER_OR_NULL, NULL);
  rule(BOOLEAN_OR_NULL, DOUBLE_OR_NULL, NULL);
  rule(BOOLEAN_OR_NULL, STRING_OR_NULL, NULL);
  rule(BOOLEAN_OR_NULL, NULL, NULL);
  rule(BOOLEAN_OR_NULL, FIXED_ARRAY, CONFLICTING);

  rule(NUMBER_OR_NULL, NUMBER_OR_NULL, NUMBER_OR_NULL);
  rule(NUMBER_OR_NULL, INTEGER_OR_NULL, INTEGER_OR_NULL);
  rule(NUMBER_OR_NULL, DOUBLE_OR_NULL, DOUBLE_OR_NULL);
  rule(NUMBER_OR_NULL, STRING_OR_NULL, NULL);
  rule(NUMBER_OR_NULL, NULL, NULL);
  rule(NUMBER_OR_NULL, FIXED_ARRAY, CONFLICTING);

  rule(INTEGER_OR_NULL, INTEGER_OR_NULL, INTEGER_OR_NULL);
  rule(INTEGER_OR_NULL, DOUBLE_OR_NULL, NULL);
  rule(INTEGER_OR_NULL, STRING_OR_NULL, NULL);
  rule(INTEGER_OR_NULL, NULL, NULL);
  rule(INTEGER_OR_NULL, FIXED_ARRAY, CONFLICTING);

  rule(DOUBLE_OR_NULL, DOUBLE_OR_NULL, DOUBLE_OR_NULL);
  rule(DOUBLE_OR_NULL, STRING_OR_NULL, NULL);
  rule(DOUBLE_OR_NULL, NULL, NULL);
  rule(DOUBLE_OR_NULL, FIXED_ARRAY, CONFLICTING);

  rule(STRING_OR_NULL, STRING_OR_NULL, STRING_OR_NULL);
  rule(STRING_OR_NULL, NULL, NULL);
  rule(STRING_OR_NULL, FIXED_ARRAY, CONFLICTING);

  rule(NULL, NULL, NULL);
  rule(NULL, FIXED_ARRAY, CONFLICTING);

  rule(FIXED_ARRAY, FIXED_ARRAY, FIXED_ARRAY);

  ruleSet.validateCoverage();
}

void testRegressions(MockCompiler compiler) {
  HType nonNullPotentialString = new HType.nonNullSubtype(
      patternClass.computeType(compiler), compiler);
  Expect.equals(
      potentialString, STRING_OR_NULL.union(nonNullPotentialString, compiler));
}

void main() {
  MockCompiler compiler = new MockCompiler();
  compiler.interceptorsLibrary.forEachLocalMember((element) {
    if (element.isClass()) {
      compiler.enqueuer.resolution.registerInstantiatedClass(
          element, compiler.globalDependencies);
    }
  });
  compiler.enqueuer.resolution.registerInstantiatedClass(
      compiler.mapClass, compiler.globalDependencies);
  compiler.world.populate();

  // Grab hold of a supertype for String so we can produce potential
  // string types.
  patternClass = compiler.coreLibrary.find(buildSourceString('Pattern'));

  nonPrimitive1 = new HType.nonNullSubtype(
      compiler.mapClass.computeType(compiler), compiler);
  nonPrimitive2 = new HType.nonNullSubtype(
      compiler.functionClass.computeType(compiler), compiler);
  potentialArray = new HType.subtype(
      compiler.listClass.computeType(compiler), compiler);
  potentialString = new HType.subtype(
      patternClass.computeType(compiler), compiler);
  jsInterceptor = new HType.nonNullSubclass(
      compiler.backend.jsInterceptorClass.computeType(compiler), compiler);
  jsArrayOrNull = new HType.subclass(
      compiler.backend.jsArrayClass.computeType(compiler), compiler);
  jsMutableArrayOrNull = new HType.subclass(
      compiler.backend.jsMutableArrayClass.computeType(compiler), compiler);
  jsFixedArrayOrNull = new HType.exact(
      compiler.backend.jsFixedArrayClass.computeType(compiler), compiler);
  jsExtendableArrayOrNull = new HType.exact(
      compiler.backend.jsExtendableArrayClass.computeType(compiler), compiler);
  jsIndexableOrNull = new HType.subtype(
      compiler.backend.jsIndexableClass.computeType(compiler), compiler);
  jsInterceptorOrNull = new HType.subclass(
      compiler.backend.jsInterceptorClass.computeType(compiler), compiler);

  testUnion(compiler);
  testIntersection(compiler);
  testRegressions(compiler);
}
