| // Copyright (c) 2013, 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:expect/expect.dart"; |
| |
| class M<T> { |
| t() { |
| return T; |
| } |
| } |
| |
| class A<U> = Object with M<List<U>>; |
| |
| class B0 = Object with A<Set<bool>>; |
| |
| class B1 = Object with A<Set<int>>; |
| |
| class C0 extends B0 {} |
| |
| class C1 extends B1 {} |
| |
| class A2<K, V> = Object with M<Map<K, V>>; |
| |
| class B2<V> = Object with A2<Set<V>, List<V>>; |
| |
| class B3<K, V> = Object with A2<Set<K>, List<V>>; |
| |
| class C2<T> extends B2<T> {} |
| |
| class C3<T> extends B3<T, int> {} |
| |
| class N { |
| q() { |
| return 42; |
| } |
| } |
| |
| class O<U> = Object with N; |
| |
| class P<K, V> = Object with O<V>; |
| |
| class Q<K, V> extends P<K, V> {} |
| |
| main() { |
| Expect.equals("List<Set<bool>>", new C0().t().toString()); |
| Expect.equals("List<Set<int>>", new C1().t().toString()); |
| Expect.equals("Map<Set<bool>, List<bool>>", new C2<bool>().t().toString()); |
| Expect.equals("Map<Set<bool>, List<int>>", new C3<bool>().t().toString()); |
| Expect.equals(42, new Q<bool, int>().q()); |
| } |