blob: 9f4820e308f9bfbc2e06ed8c8dce863c92c9d54a [file] [log] [blame]
// Copyright (c) 2011, 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
/// Dart test program testing generic type allocations and generic type tests.
import "package:expect/expect.dart";
class A {
const A();
}
class AA extends A {
const AA();
}
class AX {
const AX();
}
class B<T extends A> {
final A a_;
final T t_;
const B(T t)
: a_ = t,
t_ = t;
isT(x) {
return x is T;
}
}
class C<T extends A> {
B<T> b_;
C(T t) : b_ = new B<T>(t) {}
}
class D {
C<AA> caa_;
D() : caa_ = new C<AA>(const AA()) {}
}
class E {
C<AX> cax_ = new C<AX>(const AX()); //# 01: compile-time error
}
main() {
D d = new D();
Expect.equals(true, d.caa_.b_ is B<AA>);
Expect.equals(true, d.caa_.b_.isT(const AA()));
C c = new C(const AA()); // inferred as `C<A>` because of the `extends A`.
Expect.equals(true, c is C<A>);
Expect.equals(false, c is C<AA>, 'C<A> is not a subtype of C<AA>');
Expect.equals(true, c.b_ is B);
Expect.equals(false, c.b_ is B<AA>);
Expect.equals(true, c.b_.isT(const AA()), 'AA is a subtype of A');
Expect.equals(false, c.b_.isT(const AX()), 'AX is not a subtype of A');
new E();
}