// 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.

// VMOptions=--optimization_counter_threshold=10
import 'package:expect/expect.dart';

int initCalls = 0;
int init() {
  ++initCalls;
  return 123;
}

main() {
  for (int i = 0; i < 20; ++i) {
    late int varWithInit = init();
    late int varWithTrivialInit = 123;
    late int? varWithNullInit = null;
    late int varWithNoInit;
    Expect.equals(0, initCalls);
    Expect.equals(123, varWithInit);
    Expect.equals(123, varWithTrivialInit);
    Expect.equals(null, varWithNullInit);
    Expect.throws<Error>(() => varWithNoInit);
    Expect.equals(1, initCalls);
    Expect.equals(123, varWithInit);
    Expect.equals(123, varWithTrivialInit);
    Expect.equals(null, varWithNullInit);
    Expect.throws<Error>(() => varWithNoInit);
    Expect.equals(1, initCalls);
    varWithInit = 456;
    varWithTrivialInit = 456;
    varWithNullInit = 456;
    varWithNoInit = 456;
    Expect.equals(1, initCalls);
    Expect.equals(456, varWithInit);
    Expect.equals(456, varWithTrivialInit);
    Expect.equals(456, varWithNullInit);
    Expect.equals(456, varWithNoInit);
    Expect.equals(1, initCalls);
    initCalls = 0;

    late int varWithInit2 = init();
    Expect.equals(0, initCalls);
    varWithInit2 = 456;
    Expect.equals(0, initCalls);
    Expect.equals(456, varWithInit2);
    Expect.equals(0, initCalls);

    late int? varWithInit3 = init();
    Expect.equals(0, initCalls);
    varWithInit3 = null;
    Expect.equals(0, initCalls);
    Expect.equals(null, varWithInit3);
    Expect.equals(0, initCalls);

    late int varWithCondInit = null ?? init();
    var lambda = () {
      Expect.equals(123, varWithCondInit);
      Expect.equals(1, initCalls);
    };
    lambda();
    lambda();
    lambda();
    initCalls = 0;

    if (true) late int varNotInBlock = init();
    Expect.equals(0, initCalls);
    initCalls = 0;
  }
}
