// Copyright (c) 2020, 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 'dart:async'; final bool isWeakMode = const [] is List; const c0 = null is int?; const c1 = null is int; const c2 = null is Null; const c3 = null is Never?; const c4 = null is Never; const c5 = null is FutureOr; const c6 = null is FutureOr; const c7 = null is FutureOr?; const c8 = null is FutureOr; const c9 = null is FutureOr?; const c10 = null is FutureOr; const c11 = null is FutureOr; const c12 = null is FutureOr?; const e1 = const Class.constructor1(null); const e2 = const Class>.constructor1([null]); const e3 = const Class.constructor1(null); const e4 = const Class.constructor2(null); const e5 = const Class.constructor2(null); const e6 = const Class.constructor2(null); const e7 = const Class.constructor3(null); const e8 = const Class.constructor3(null); const e9 = const Class.constructor3(null); const e10 = const Class.constructor4(null); const e11 = const Class.constructor4(null); const e12 = const Class.constructor4(null); class Class { final bool field; const Class.constructor1(value) : field = value is T; const Class.constructor2(value) : field = value is T?; const Class.constructor3(value) : field = value is Class; const Class.constructor4(value) : field = value is Class?; } main() { expect(null is int?, c0, "null is int?"); expect(null is int, c1, "null is int"); expect(null is Null, c2, "null is Null"); expect(null is Never?, c3, "null is Never?"); expect(null is Never, c4, "null is Never"); expect(null is FutureOr, c5, "null is FutureOr"); expect(null is FutureOr, c6, "null is FutureOr"); expect(null is FutureOr?, c7, "null is FutureOr?"); expect(null is FutureOr, c8, "null is FutureOr"); expect(null is FutureOr?, c9, "null is FutureOr?"); expect(null is FutureOr, c10, "null is FutureOr"); expect(null is FutureOr, c11, "null is FutureOr"); expect(null is FutureOr?, c12, "null is FutureOr?"); expect(new Class.constructor1(null).field, e1.field, "Class.constructor1(null).field"); expect(true, new Class.constructor1(null).field, "new Class.constructor1(null).field"); // const Class> is evaluated as const Class*> in weak // mode: expect(isWeakMode, e2.field, "const Class>.constructor1([null]).field"); expect(new Class.constructor1(null).field, e3.field, "Class.constructor1(null).field"); expect(new Class.constructor2(null).field, e4.field, "Class.constructor2(null).field"); expect(true, new Class.constructor2(null).field, "new Class.constructor2(null).field"); // const Class is evaluated as const Class in weak mode: expect(new Class.constructor2(null).field, e5.field, "Class.constructor2(null).field"); expect(new Class.constructor2(null).field, e6.field, "Class.constructor2(null).field"); expect(new Class.constructor3(null).field, e7.field, "Class.constructor3(null).field"); expect(new Class.constructor3(null).field, e8.field, "Class.constructor3(null).field"); expect(new Class.constructor3(null).field, e8.field, "Class.constructor3(null).field"); expect(new Class.constructor3(null).field, e9.field, "Class.constructor3(null).field"); expect(new Class.constructor4(null).field, e10.field, "Class.constructor4(null).field"); expect(new Class.constructor4(null).field, e11.field, "Class.constructor4(null).field"); expect(new Class.constructor4(null).field, e12.field, "Class.constructor4(null).field"); } expect(expected, actual, String message) { if (expected != actual) throw 'Expected $expected, actual $actual for $message'; }