// Copyright (c) 2016, 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 'package:kernel/kernel.dart';
import 'package:kernel/type_algebra.dart';
import 'type_parser.dart';
import 'type_hashcode_test.dart' show testCases;
import 'package:test/test.dart';

checkType(DartType type) {
  var map = {new TypeParameter(): const DynamicType()};
  var other = substitute(type, map);
  if (!identical(type, other)) {
    fail('Identity substitution test failed for $type');
  }
  other = Substitution.fromUpperAndLowerBounds(map, map).substituteType(type);
  if (!identical(type, other)) {
    fail('Identity bounded substitution test failed for $type');
  }
}

main() {
  for (var testCase in testCases) {
    test('$testCase', () {
      var env = new LazyTypeEnvironment();
      checkType(env.parse(testCase.type1));
      checkType(env.parse(testCase.type2));
    });
  }
}
