| Index: pkg/kernel/test/class_hierarchy_tester.dart
|
| diff --git a/pkg/kernel/test/class_hierarchy_tester.dart b/pkg/kernel/test/class_hierarchy_tester.dart
|
| deleted file mode 100644
|
| index d4e04ad95f84a0d460d1a347e6ba0ee8b5e3b2ab..0000000000000000000000000000000000000000
|
| --- a/pkg/kernel/test/class_hierarchy_tester.dart
|
| +++ /dev/null
|
| @@ -1,150 +0,0 @@
|
| -// 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/class_hierarchy.dart';
|
| -import 'package:test/test.dart';
|
| -import 'class_hierarchy_basic.dart';
|
| -import 'dart:io';
|
| -import 'dart:math';
|
| -
|
| -void testClassHierarchyOnProgram(Program program, {bool verbose: false}) {
|
| - BasicClassHierarchy basic = new BasicClassHierarchy(program);
|
| - ClassHierarchy classHierarchy = new ClassHierarchy(program);
|
| - int total = classHierarchy.classes.length;
|
| - int progress = 0;
|
| - for (var class1 in classHierarchy.classes) {
|
| - for (var class2 in classHierarchy.classes) {
|
| - bool isSubclass = classHierarchy.isSubclassOf(class1, class2);
|
| - bool isSubmixture = classHierarchy.isSubmixtureOf(class1, class2);
|
| - bool isSubtype = classHierarchy.isSubtypeOf(class1, class2);
|
| - var asInstance = classHierarchy.getClassAsInstanceOf(class1, class2);
|
| - if (isSubclass != basic.isSubclassOf(class1, class2)) {
|
| - fail('isSubclassOf(${class1.name}, ${class2.name}) returned '
|
| - '$isSubclass but should be ${!isSubclass}');
|
| - }
|
| - if (isSubmixture != basic.isSubmixtureOf(class1, class2)) {
|
| - fail('isSubmixtureOf(${class1.name}, ${class2.name}) returned '
|
| - '$isSubclass but should be ${!isSubclass}');
|
| - }
|
| - if (isSubtype != basic.isSubtypeOf(class1, class2)) {
|
| - fail('isSubtypeOf(${class1.name}, ${class2.name}) returned '
|
| - '$isSubtype but should be ${!isSubtype}');
|
| - }
|
| - if (asInstance != basic.getClassAsInstanceOf(class1, class2)) {
|
| - fail('asInstanceOf(${class1.name}, ${class2.name}) returned '
|
| - '$asInstance but should be '
|
| - '${basic.getClassAsInstanceOf(class1, class2)}');
|
| - }
|
| - }
|
| - ++progress;
|
| - if (verbose) {
|
| - stdout.write('\rSubclass queries ${100 * progress ~/ total}%');
|
| - }
|
| - }
|
| - Set<Name> names = new Set<Name>();
|
| - for (var classNode in classHierarchy.classes) {
|
| - for (var member in classNode.members) {
|
| - names.add(member.name);
|
| - }
|
| - }
|
| - List<Name> nameList = names.toList();
|
| - progress = 0;
|
| - for (var classNode in classHierarchy.classes) {
|
| - Iterable<Name> candidateNames = <Iterable<Name>>[
|
| - basic.gettersAndCalls[classNode].keys,
|
| - basic.setters[classNode].keys,
|
| - pickRandom(nameList, 100)
|
| - ].expand((x) => x);
|
| - for (Name name in candidateNames) {
|
| - Member expectedGetter =
|
| - basic.getDispatchTarget(classNode, name, setter: false);
|
| - Member expectedSetter =
|
| - basic.getDispatchTarget(classNode, name, setter: true);
|
| - Member actualGetter =
|
| - classHierarchy.getDispatchTarget(classNode, name, setter: false);
|
| - Member actualSetter =
|
| - classHierarchy.getDispatchTarget(classNode, name, setter: true);
|
| - if (actualGetter != expectedGetter) {
|
| - fail('lookupGetter($classNode, $name) returned '
|
| - '$actualGetter but should be $expectedGetter');
|
| - }
|
| - if (actualSetter != expectedSetter) {
|
| - fail('lookupSetter($classNode, $name) returned '
|
| - '$actualSetter but should be $expectedSetter');
|
| - }
|
| - }
|
| - ++progress;
|
| - if (verbose) {
|
| - stdout.write('\rDispatch queries ${100 * progress ~/ total}%');
|
| - }
|
| - }
|
| - progress = 0;
|
| - for (var classNode in classHierarchy.classes) {
|
| - Iterable<Name> candidateNames = [
|
| - basic.interfaceGettersAndCalls[classNode].keys,
|
| - basic.interfaceSetters[classNode].keys,
|
| - pickRandom(nameList, 100)
|
| - ].expand((x) => x);
|
| - for (Name name in candidateNames) {
|
| - Member expectedGetter =
|
| - basic.getInterfaceMember(classNode, name, setter: false);
|
| - Member expectedSetter =
|
| - basic.getInterfaceMember(classNode, name, setter: true);
|
| - Member actualGetter =
|
| - classHierarchy.getInterfaceMember(classNode, name, setter: false);
|
| - Member actualSetter =
|
| - classHierarchy.getInterfaceMember(classNode, name, setter: true);
|
| - if (actualGetter != expectedGetter) {
|
| - fail('getInterfaceMember($classNode, $name) returned '
|
| - '$actualGetter but should be $expectedGetter');
|
| - }
|
| - if (actualSetter != expectedSetter) {
|
| - fail('getInterfaceMember($classNode, $name, setter: true) '
|
| - 'returned $actualSetter but should be $expectedSetter');
|
| - }
|
| - }
|
| - ++progress;
|
| - if (verbose) {
|
| - stdout.write('\rInterface queries ${100 * progress ~/ total}%');
|
| - }
|
| - }
|
| - for (var classNode in classHierarchy.classes) {
|
| - String getHash(member, superMember, setter) {
|
| - String eq = setter ? '=' : '';
|
| - return '$member$eq overrides $superMember$eq';
|
| - }
|
| - Set<String> expectedOverrides = new Set<String>();
|
| - basic.forEachOverridePair(classNode, (member, superMember, setter) {
|
| - expectedOverrides.add(getHash(member, superMember, setter));
|
| - });
|
| - Set<String> actualOverrides = new Set<String>();
|
| - classHierarchy.forEachOverridePair(classNode, (member, superMember, setter) {
|
| - actualOverrides.add(getHash(member, superMember, setter));
|
| - });
|
| - for (var actual in actualOverrides) {
|
| - if (!expectedOverrides.contains(actual)) {
|
| - fail("forEachOverridePair($classNode) should not report that $actual");
|
| - }
|
| - }
|
| - for (var expected in expectedOverrides) {
|
| - if (!actualOverrides.contains(expected)) {
|
| - fail("forEachOverridePair($classNode) did not report that $expected");
|
| - }
|
| - }
|
| - }
|
| - if (verbose) {
|
| - print('\rProgress 100%. Done.');
|
| - }
|
| -}
|
| -
|
| -var random = new Random(12345);
|
| -
|
| -List/*<T>*/ pickRandom/*<T>*/(List/*<T>*/ items, int n) {
|
| - var result = /*<T>*/[];
|
| - for (int i = 0; i < n; ++i) {
|
| - result.add(items[random.nextInt(items.length)]);
|
| - }
|
| - return result;
|
| -}
|
|
|