// Copyright (c) 2021, 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:expect/expect.dart'; // Tests where late variable or field has a predictable value. An incorrect // optimization might try to eliminate part of the check. class C1 { late String lastTag; int zero(String tag) { lastTag = tag; return 0; } int one(String tag) { lastTag = tag; return 1; } int? returnNull(String tag) { lastTag = tag; return null; } late int? i1 = zero('C1.i1'); late int i2 = zero('C1.i2'); late int? i3 = returnNull('C1.i3'); late int i4 = one('C1.i4'); } void test1() { for (int i = 0; i < 10; i++) { final c = C1(); Expect.equals(0, c.i1); Expect.equals('C1.i1', c.lastTag); Expect.equals(0, c.i2); Expect.equals('C1.i2', c.lastTag); Expect.equals(null, c.i3); Expect.equals('C1.i3', c.lastTag); Expect.equals(0, c.i1); Expect.equals('C1.i3', c.lastTag); Expect.equals(0, c.i2); Expect.equals('C1.i3', c.lastTag); Expect.equals(null, c.i3); Expect.equals('C1.i3', c.lastTag); Expect.equals(1, c.i4); Expect.equals('C1.i4', c.lastTag); } } class C2 { late String lastTag; int zero(String tag) { lastTag = tag; return 0; } int one(String tag) { lastTag = tag; return 1; } int? returnNull(String tag) { lastTag = tag; return null; } late final int? i1 = zero('C2.i1'); late final int i2 = zero('C2.i2'); late final int? i3 = returnNull('C2.i3'); late int i4 = one('C2.i4'); } void test2() { final c = C2(); Expect.equals(0, c.i1); Expect.equals('C2.i1', c.lastTag); Expect.equals(0, c.i2); Expect.equals('C2.i2', c.lastTag); Expect.equals(null, c.i3); Expect.equals('C2.i3', c.lastTag); Expect.equals(0, c.i1); Expect.equals('C2.i3', c.lastTag); Expect.equals(0, c.i2); Expect.equals('C2.i3', c.lastTag); Expect.equals(null, c.i3); Expect.equals('C2.i3', c.lastTag); Expect.equals(1, c.i4); Expect.equals('C2.i4', c.lastTag); } main() { test1(); test2(); }