// 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.

// @dart = 2.9

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));
    });
  }
}
