Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Side by Side Diff: tests/compiler/dart2js/equivalence/check_functions.dart

Issue 2913713004: Add model test of CodegenWorldBuilder to compile_from_dill_test (Closed)
Patch Set: So much patch set for so small a typo. Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 /// Equivalence test functions for data objects. 5 /// Equivalence test functions for data objects.
6 6
7 library dart2js.equivalence.functions; 7 library dart2js.equivalence.functions;
8 8
9 import 'package:expect/expect.dart'; 9 import 'package:expect/expect.dart';
10 import 'package:compiler/src/common/resolution.dart'; 10 import 'package:compiler/src/common/resolution.dart';
11 import 'package:compiler/src/common_elements.dart'; 11 import 'package:compiler/src/common_elements.dart';
12 import 'package:compiler/src/compiler.dart'; 12 import 'package:compiler/src/compiler.dart';
13 import 'package:compiler/src/elements/types.dart'; 13 import 'package:compiler/src/elements/types.dart';
14 import 'package:compiler/src/elements/elements.dart'; 14 import 'package:compiler/src/elements/elements.dart';
15 import 'package:compiler/src/elements/entities.dart'; 15 import 'package:compiler/src/elements/entities.dart';
16 import 'package:compiler/src/enqueue.dart'; 16 import 'package:compiler/src/enqueue.dart';
17 import 'package:compiler/src/js_backend/backend_usage.dart'; 17 import 'package:compiler/src/js_backend/backend_usage.dart';
18 import 'package:compiler/src/js_backend/enqueuer.dart';
18 import 'package:compiler/src/js_backend/native_data.dart'; 19 import 'package:compiler/src/js_backend/native_data.dart';
19 import 'package:compiler/src/js_backend/interceptor_data.dart'; 20 import 'package:compiler/src/js_backend/interceptor_data.dart';
20 import 'package:compiler/src/serialization/equivalence.dart'; 21 import 'package:compiler/src/serialization/equivalence.dart';
21 import 'package:compiler/src/universe/class_set.dart'; 22 import 'package:compiler/src/universe/class_set.dart';
22 import 'package:compiler/src/universe/world_builder.dart'; 23 import 'package:compiler/src/universe/world_builder.dart';
23 import 'package:compiler/src/world.dart'; 24 import 'package:compiler/src/world.dart';
24 import 'check_helpers.dart'; 25 import 'check_helpers.dart';
25 26
26 void checkClosedWorlds(ClosedWorld closedWorld1, ClosedWorld closedWorld2, 27 void checkClosedWorlds(ClosedWorld closedWorld1, ClosedWorld closedWorld2,
27 {TestStrategy strategy: const TestStrategy(), 28 {TestStrategy strategy: const TestStrategy(),
(...skipping 580 matching lines...) Expand 10 before | Expand all | Expand 10 after
608 609
609 bool areInstancesEquivalent(Instance instance1, Instance instance2, 610 bool areInstancesEquivalent(Instance instance1, Instance instance2,
610 bool typeEquivalence(DartType a, DartType b)) { 611 bool typeEquivalence(DartType a, DartType b)) {
611 InterfaceType type1 = instance1.type; 612 InterfaceType type1 = instance1.type;
612 InterfaceType type2 = instance2.type; 613 InterfaceType type2 = instance2.type;
613 return typeEquivalence(type1, type2) && 614 return typeEquivalence(type1, type2) &&
614 instance1.kind == instance2.kind && 615 instance1.kind == instance2.kind &&
615 instance1.isRedirection == instance2.isRedirection; 616 instance1.isRedirection == instance2.isRedirection;
616 } 617 }
617 618
619 bool areAbstractUsagesEquivalent(AbstractUsage usage1, AbstractUsage usage2) {
620 return usage1.hasSameUsage(usage2);
621 }
622
618 void checkResolutionEnqueuers( 623 void checkResolutionEnqueuers(
619 BackendUsage backendUsage1, 624 BackendUsage backendUsage1,
620 BackendUsage backendUsage2, 625 BackendUsage backendUsage2,
621 ResolutionEnqueuer enqueuer1, 626 ResolutionEnqueuer enqueuer1,
622 ResolutionEnqueuer enqueuer2, 627 ResolutionEnqueuer enqueuer2,
623 {bool elementEquivalence(Entity a, Entity b): areElementsEquivalent, 628 {bool elementEquivalence(Entity a, Entity b): areElementsEquivalent,
624 bool typeEquivalence(DartType a, DartType b): areTypesEquivalent, 629 bool typeEquivalence(DartType a, DartType b): areTypesEquivalent,
625 bool elementFilter(Element element), 630 bool elementFilter(Element element),
626 bool verbose: false}) { 631 bool verbose: false,
632 bool skipClassUsageTesting: false}) {
633 elementFilter ??= (_) => true;
634
627 ResolutionWorldBuilderBase worldBuilder1 = enqueuer1.worldBuilder; 635 ResolutionWorldBuilderBase worldBuilder1 = enqueuer1.worldBuilder;
628 ResolutionWorldBuilderBase worldBuilder2 = enqueuer2.worldBuilder; 636 ResolutionWorldBuilderBase worldBuilder2 = enqueuer2.worldBuilder;
629 637
630 checkSets( 638 checkSets(worldBuilder1.instantiatedTypes, worldBuilder2.instantiatedTypes,
631 enqueuer1.worldBuilder.instantiatedTypes, 639 "Instantiated types mismatch", typeEquivalence,
632 enqueuer2.worldBuilder.instantiatedTypes,
633 "Instantiated types mismatch",
634 typeEquivalence,
635 verbose: verbose); 640 verbose: verbose);
636 641
637 checkSets( 642 checkSets(
638 enqueuer1.worldBuilder.directlyInstantiatedClasses, 643 worldBuilder1.directlyInstantiatedClasses,
639 enqueuer2.worldBuilder.directlyInstantiatedClasses, 644 worldBuilder2.directlyInstantiatedClasses,
640 "Directly instantiated classes mismatch", 645 "Directly instantiated classes mismatch",
641 elementEquivalence, 646 elementEquivalence,
642 verbose: verbose); 647 verbose: verbose);
643 648
644 checkMaps( 649 checkMaps(
645 worldBuilder1.getInstantiationMap(), 650 worldBuilder1.getInstantiationMap(),
646 worldBuilder2.getInstantiationMap(), 651 worldBuilder2.getInstantiationMap(),
647 "Instantiated classes mismatch", 652 "Instantiated classes mismatch",
648 elementEquivalence, 653 elementEquivalence,
649 (a, b) => areInstantiationInfosEquivalent( 654 (a, b) => areInstantiationInfosEquivalent(
650 a, b, elementEquivalence, typeEquivalence), 655 a, b, elementEquivalence, typeEquivalence),
651 verbose: verbose); 656 verbose: verbose);
652 657
653 checkSets(enqueuer1.processedEntities, enqueuer2.processedEntities, 658 checkSets(enqueuer1.processedEntities, enqueuer2.processedEntities,
654 "Processed element mismatch", elementEquivalence, elementFilter: (e) { 659 "Processed element mismatch", elementEquivalence,
655 return elementFilter != null ? elementFilter(e) : true; 660 elementFilter: elementFilter, verbose: verbose);
656 }, verbose: verbose);
657 661
658 checkSets(enqueuer1.worldBuilder.isChecks, enqueuer2.worldBuilder.isChecks, 662 checkSets(worldBuilder1.isChecks, worldBuilder2.isChecks, "Is-check mismatch",
659 "Is-check mismatch", typeEquivalence, 663 typeEquivalence,
664 verbose: verbose);
665
666 checkSets(worldBuilder1.closurizedMembers, worldBuilder2.closurizedMembers,
667 "closurizedMembers", elementEquivalence,
668 verbose: verbose);
669 checkSets(worldBuilder1.fieldSetters, worldBuilder2.fieldSetters,
670 "fieldSetters", elementEquivalence,
671 verbose: verbose);
672 checkSets(
673 worldBuilder1.methodsNeedingSuperGetter,
674 worldBuilder2.methodsNeedingSuperGetter,
675 "methodsNeedingSuperGetter",
676 elementEquivalence,
677 verbose: verbose);
678
679 if (!skipClassUsageTesting) {
680 checkMaps(
681 worldBuilder1.classUsageForTesting,
682 worldBuilder2.classUsageForTesting,
683 'classUsageForTesting',
684 elementEquivalence,
685 areAbstractUsagesEquivalent,
686 verbose: verbose);
687 }
688 checkMaps(
689 worldBuilder1.staticMemberUsageForTesting,
690 worldBuilder2.staticMemberUsageForTesting,
691 'staticMemberUsageForTesting',
692 elementEquivalence,
693 areAbstractUsagesEquivalent,
694 keyFilter: elementFilter,
695 verbose: verbose);
696 checkMaps(
697 worldBuilder1.instanceMemberUsageForTesting,
698 worldBuilder2.instanceMemberUsageForTesting,
699 'instanceMemberUsageForTesting',
700 elementEquivalence,
701 areAbstractUsagesEquivalent,
660 verbose: verbose); 702 verbose: verbose);
661 703
662 Expect.equals(backendUsage1.isInvokeOnUsed, backendUsage2.isInvokeOnUsed, 704 Expect.equals(backendUsage1.isInvokeOnUsed, backendUsage2.isInvokeOnUsed,
663 "JavaScriptBackend.hasInvokeOnSupport mismatch"); 705 "JavaScriptBackend.hasInvokeOnSupport mismatch");
664 Expect.equals( 706 Expect.equals(
665 backendUsage1.isFunctionApplyUsed, 707 backendUsage1.isFunctionApplyUsed,
666 backendUsage1.isFunctionApplyUsed, 708 backendUsage1.isFunctionApplyUsed,
667 "JavaScriptBackend.hasFunctionApplySupport mismatch"); 709 "JavaScriptBackend.hasFunctionApplySupport mismatch");
668 Expect.equals( 710 Expect.equals(
669 backendUsage1.isRuntimeTypeUsed, 711 backendUsage1.isRuntimeTypeUsed,
670 backendUsage2.isRuntimeTypeUsed, 712 backendUsage2.isRuntimeTypeUsed,
671 "JavaScriptBackend.hasRuntimeTypeSupport mismatch"); 713 "JavaScriptBackend.hasRuntimeTypeSupport mismatch");
672 Expect.equals(backendUsage1.isIsolateInUse, backendUsage2.isIsolateInUse, 714 Expect.equals(backendUsage1.isIsolateInUse, backendUsage2.isIsolateInUse,
673 "JavaScriptBackend.hasIsolateSupport mismatch"); 715 "JavaScriptBackend.hasIsolateSupport mismatch");
674 } 716 }
717
718 void checkCodegenEnqueuers(CodegenEnqueuer enqueuer1, CodegenEnqueuer enqueuer2,
719 {bool elementEquivalence(Entity a, Entity b): areElementsEquivalent,
720 bool typeEquivalence(DartType a, DartType b): areTypesEquivalent,
721 bool elementFilter(Element element),
722 bool verbose: false}) {
723 CodegenWorldBuilderImpl worldBuilder1 = enqueuer1.worldBuilder;
724 CodegenWorldBuilderImpl worldBuilder2 = enqueuer2.worldBuilder;
725
726 checkSets(worldBuilder1.instantiatedTypes, worldBuilder2.instantiatedTypes,
727 "Instantiated types mismatch", typeEquivalence,
728 verbose: verbose);
729
730 checkSets(
731 worldBuilder1.directlyInstantiatedClasses,
732 worldBuilder2.directlyInstantiatedClasses,
733 "Directly instantiated classes mismatch",
734 elementEquivalence,
735 verbose: verbose);
736
737 checkSets(enqueuer1.processedEntities, enqueuer2.processedEntities,
738 "Processed element mismatch", elementEquivalence, elementFilter: (e) {
739 return elementFilter != null ? elementFilter(e) : true;
740 }, verbose: verbose);
741
742 checkSets(worldBuilder1.isChecks, worldBuilder2.isChecks, "Is-check mismatch",
743 typeEquivalence,
744 verbose: verbose);
745
746 checkSets(
747 worldBuilder1.allReferencedStaticFields,
748 worldBuilder2.allReferencedStaticFields,
749 "Directly instantiated classes mismatch",
750 elementEquivalence,
751 verbose: verbose);
752 checkSets(worldBuilder1.closurizedMembers, worldBuilder2.closurizedMembers,
753 "closurizedMembers", elementEquivalence,
754 verbose: verbose);
755 checkSets(worldBuilder1.processedClasses, worldBuilder2.processedClasses,
756 "processedClasses", elementEquivalence,
757 verbose: verbose);
758 checkSets(
759 worldBuilder1.methodsNeedingSuperGetter,
760 worldBuilder2.methodsNeedingSuperGetter,
761 "methodsNeedingSuperGetter",
762 elementEquivalence,
763 verbose: verbose);
764 checkSets(
765 worldBuilder1.staticFunctionsNeedingGetter,
766 worldBuilder2.staticFunctionsNeedingGetter,
767 "staticFunctionsNeedingGetter",
768 elementEquivalence,
769 verbose: verbose);
770
771 checkMaps(
772 worldBuilder1.classUsageForTesting,
773 worldBuilder2.classUsageForTesting,
774 'classUsageForTesting',
775 elementEquivalence,
776 areAbstractUsagesEquivalent,
777 verbose: verbose);
778 checkMaps(
779 worldBuilder1.staticMemberUsageForTesting,
780 worldBuilder2.staticMemberUsageForTesting,
781 'staticMemberUsageForTesting',
782 elementEquivalence,
783 areAbstractUsagesEquivalent,
784 verbose: verbose);
785 checkMaps(
786 worldBuilder1.instanceMemberUsageForTesting,
787 worldBuilder2.instanceMemberUsageForTesting,
788 'instanceMemberUsageForTesting',
789 elementEquivalence,
790 areAbstractUsagesEquivalent,
791 verbose: verbose);
792 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/universe/resolution_world_builder.dart ('k') | tests/compiler/dart2js/equivalence/check_helpers.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698