blob: 2d27065e7630e20c8833fbe8e27ca6b8f84823f2 [file] [log] [blame]
// Copyright (c) 2019, 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.7
//
// dart2jsOptions=--experiment-new-rti --no-minify
import 'dart:_rti' as rti;
import "package:expect/expect.dart";
class Thingy {}
class Generic<AA> {
checkMethod(o) => o is AA;
}
@pragma('dart2js:noInline')
void check<T>(o) {
Expect.isTrue(o is T);
Expect.isFalse(o is! T);
}
main() {
check<Thingy>(Thingy());
check<Generic<int>>(Generic<int>());
check<Generic<dynamic>>(Generic<dynamic>());
check<Generic<Object>>(Generic<Object>());
check<Generic<Object>>(Generic<dynamic>());
check<Generic<dynamic>>(Generic<Object>());
Expect.isTrue(Generic<Thingy>().checkMethod(Thingy()));
Expect.isTrue(Generic<Object>().checkMethod(Object()));
Expect.isTrue(Generic<Object>().checkMethod(Thingy()));
Expect.isFalse(Generic<Thingy>().checkMethod(Object()));
Expect.isTrue(Generic<dynamic>().checkMethod(Object()));
Expect.isFalse(Generic<Thingy>().checkMethod(123));
Expect.isFalse(Generic<Thingy>().checkMethod(Object()));
}