Index: pkg/kernel/test/lub_test.dart |
diff --git a/pkg/kernel/test/lub_test.dart b/pkg/kernel/test/lub_test.dart |
deleted file mode 100644 |
index 25a310aae95bb4b18f95dd3a2e06945cb3367456..0000000000000000000000000000000000000000 |
--- a/pkg/kernel/test/lub_test.dart |
+++ /dev/null |
@@ -1,239 +0,0 @@ |
-// Copyright (c) 2017, 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/ast.dart'; |
-import 'package:kernel/class_hierarchy.dart'; |
-import 'package:kernel/core_types.dart'; |
-import 'package:kernel/testing/mock_sdk_program.dart'; |
-import 'package:test/test.dart'; |
- |
-main() { |
- Library makeTestLibrary(Program program) { |
- var library = new Library(Uri.parse('org-dartlang:///test.dart')) |
- ..parent = program; |
- program.libraries.add(library); |
- return library; |
- } |
- |
- test('depth', () { |
- var program = createMockSdkProgram(); |
- var coreTypes = new CoreTypes(program); |
- var defaultSuper = coreTypes.objectClass.asThisSupertype; |
- var library = makeTestLibrary(program); |
- |
- Class addClass(Class c) { |
- library.addClass(c); |
- return c; |
- } |
- |
- var base = addClass(new Class(name: 'base', supertype: defaultSuper)); |
- var extends_ = |
- addClass(new Class(name: 'extends_', supertype: base.asThisSupertype)); |
- var with_ = addClass(new Class( |
- name: 'with_', |
- supertype: defaultSuper, |
- mixedInType: base.asThisSupertype)); |
- var implements_ = addClass(new Class( |
- name: 'implements_', |
- supertype: defaultSuper, |
- implementedTypes: [base.asThisSupertype])); |
- var hierarchy = new ClassHierarchy(program); |
- |
- expect(hierarchy.getClassDepth(coreTypes.objectClass), 0); |
- expect(hierarchy.getClassDepth(base), 1); |
- expect(hierarchy.getClassDepth(extends_), 2); |
- expect(hierarchy.getClassDepth(with_), 2); |
- expect(hierarchy.getClassDepth(implements_), 2); |
- }); |
- |
- test('ranked_superclasses', () { |
- var program = createMockSdkProgram(); |
- var coreTypes = new CoreTypes(program); |
- var defaultSuper = coreTypes.objectClass.asThisSupertype; |
- var library = makeTestLibrary(program); |
- |
- Class addClass(String name, List<Class> implements_) { |
- var c = new Class( |
- name: name, |
- supertype: defaultSuper, |
- implementedTypes: implements_.map((c) => c.asThisSupertype).toList()); |
- library.addClass(c); |
- return c; |
- } |
- |
- // Create the class hierarchy: |
- // |
- // Object |
- // | |
- // A |
- // / \ |
- // B C |
- // | | |
- // | D |
- // \ / |
- // E |
- var a = addClass('A', []); |
- var b = addClass('B', [a]); |
- var c = addClass('C', [a]); |
- var d = addClass('D', [c]); |
- var e = addClass('E', [b, d]); |
- var hierarchy = new ClassHierarchy(program); |
- |
- expect(hierarchy.getRankedSuperclasses(a), [a, coreTypes.objectClass]); |
- expect(hierarchy.getRankedSuperclasses(b), [b, a, coreTypes.objectClass]); |
- expect(hierarchy.getRankedSuperclasses(c), [c, a, coreTypes.objectClass]); |
- expect( |
- hierarchy.getRankedSuperclasses(d), [d, c, a, coreTypes.objectClass]); |
- if (hierarchy.getClassIndex(b) < hierarchy.getClassIndex(c)) { |
- expect(hierarchy.getRankedSuperclasses(e), |
- [e, d, b, c, a, coreTypes.objectClass]); |
- } else { |
- expect(hierarchy.getRankedSuperclasses(e), |
- [e, d, c, b, a, coreTypes.objectClass]); |
- } |
- }); |
- |
- test('least_upper_bound_non_generic', () { |
- var program = createMockSdkProgram(); |
- var coreTypes = new CoreTypes(program); |
- var defaultSuper = coreTypes.objectClass.asThisSupertype; |
- var library = makeTestLibrary(program); |
- |
- Class addClass(String name, List<Class> implements_) { |
- var c = new Class( |
- name: name, |
- supertype: defaultSuper, |
- implementedTypes: implements_.map((c) => c.asThisSupertype).toList()); |
- library.addClass(c); |
- return c; |
- } |
- |
- // Create the class hierarchy: |
- // |
- // Object |
- // / \ |
- // A B |
- // /|\ |
- // C D E |
- // |X|/ |
- // FG HI |
- // |
- // (F and G both implement (C, D); H and I both implement (C, D, E). |
- var a = addClass('A', []); |
- var b = addClass('B', []); |
- var c = addClass('C', [a]); |
- var d = addClass('D', [a]); |
- var e = addClass('E', [a]); |
- var f = addClass('F', [c, d]); |
- var g = addClass('G', [c, d]); |
- var h = addClass('H', [c, d, e]); |
- var i = addClass('I', [c, d, e]); |
- var hierarchy = new ClassHierarchy(program); |
- |
- expect(hierarchy.getClassicLeastUpperBound(a.rawType, b.rawType), |
- coreTypes.objectClass.rawType); |
- expect( |
- hierarchy.getClassicLeastUpperBound( |
- a.rawType, coreTypes.objectClass.rawType), |
- coreTypes.objectClass.rawType); |
- expect( |
- hierarchy.getClassicLeastUpperBound( |
- coreTypes.objectClass.rawType, b.rawType), |
- coreTypes.objectClass.rawType); |
- expect( |
- hierarchy.getClassicLeastUpperBound(c.rawType, d.rawType), a.rawType); |
- expect( |
- hierarchy.getClassicLeastUpperBound(c.rawType, a.rawType), a.rawType); |
- expect( |
- hierarchy.getClassicLeastUpperBound(a.rawType, d.rawType), a.rawType); |
- expect( |
- hierarchy.getClassicLeastUpperBound(f.rawType, g.rawType), a.rawType); |
- expect( |
- hierarchy.getClassicLeastUpperBound(h.rawType, i.rawType), a.rawType); |
- }); |
- |
- test('least_upper_bound_non_generic', () { |
- var program = createMockSdkProgram(); |
- var coreTypes = new CoreTypes(program); |
- var defaultSuper = coreTypes.objectClass.asThisSupertype; |
- var library = makeTestLibrary(program); |
- var int = coreTypes.intClass.rawType; |
- var double = coreTypes.doubleClass.rawType; |
- var bool = coreTypes.boolClass.rawType; |
- |
- Class addClass(String name, List<String> typeParameterNames, |
- List<Supertype> implements_(List<DartType> typeParameterTypes)) { |
- var typeParameters = typeParameterNames |
- .map((name) => new TypeParameter(name, coreTypes.objectClass.rawType)) |
- .toList(); |
- var typeParameterTypes = typeParameters |
- .map((parameter) => new TypeParameterType(parameter)) |
- .toList(); |
- var c = new Class( |
- name: name, |
- typeParameters: typeParameters, |
- supertype: defaultSuper, |
- implementedTypes: implements_(typeParameterTypes)); |
- library.addClass(c); |
- return c; |
- } |
- |
- // Create the class hierarchy: |
- // |
- // Object |
- // | |
- // A |
- // / \ |
- // B<T> C<U> |
- // \ / |
- // D<T,U> |
- // / \ |
- // E F |
- // |
- // Where E implements D<int, double> and F implements D<int, bool>. |
- var a = addClass('A', [], (_) => []); |
- var b = addClass('B', ['T'], (_) => [a.asThisSupertype]); |
- var c = addClass('C', ['U'], (_) => [a.asThisSupertype]); |
- var d = addClass('D', ['T', 'U'], (typeParameterTypes) { |
- var t = typeParameterTypes[0]; |
- var u = typeParameterTypes[1]; |
- return [ |
- new Supertype(b, [t]), |
- new Supertype(c, [u]) |
- ]; |
- }); |
- var e = addClass( |
- 'E', |
- [], |
- (_) => [ |
- new Supertype(d, [int, double]) |
- ]); |
- var f = addClass( |
- 'F', |
- [], |
- (_) => [ |
- new Supertype(d, [int, bool]) |
- ]); |
- var hierarchy = new ClassHierarchy(program); |
- |
- expect( |
- hierarchy.getClassicLeastUpperBound(new InterfaceType(d, [int, double]), |
- new InterfaceType(d, [int, double])), |
- new InterfaceType(d, [int, double])); |
- expect( |
- hierarchy.getClassicLeastUpperBound(new InterfaceType(d, [int, double]), |
- new InterfaceType(d, [int, bool])), |
- new InterfaceType(b, [int])); |
- expect( |
- hierarchy.getClassicLeastUpperBound(new InterfaceType(d, [int, double]), |
- new InterfaceType(d, [bool, double])), |
- new InterfaceType(c, [double])); |
- expect( |
- hierarchy.getClassicLeastUpperBound(new InterfaceType(d, [int, double]), |
- new InterfaceType(d, [bool, int])), |
- a.rawType); |
- expect(hierarchy.getClassicLeastUpperBound(e.rawType, f.rawType), |
- new InterfaceType(b, [int])); |
- }); |
-} |