// Copyright (c) 2018, 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.

// Bug in unboxed int spilling (https://github.com/flutter/flutter/issues/23879).
//
// VMOptions=--deterministic

import "package:expect/expect.dart";

List<int?> list = new List<int?>.filled(10, null);

List<int?> expected_values =
    [null, 152, 168, 184, 200, 216, 232, 248, 264, 280];

int count = 0;

bool getNext() {
  return ++count <= 9;
}

int foo() {
  int a = 1;
  int b = 2;
  int c = 3;
  int d = 4;
  int e = 5;
  int f = 6;
  int g = 7;
  int h = 8;
  int i = 9;
  int j = 10;
  int k = 11;
  int l = 12;
  int m = 13;
  int n = 14;
  int o = 15;
  int p = 16;
  count = 0;
  int componentIndex = 1;
  while (getNext()) {
    // Make spilling likely.
    a++;
    b++;
    c++;
    d++;
    e++;
    f++;
    g++;
    h++;
    i++;
    j++;
    k++;
    l++;
    m++;
    n++;
    o++;
    p++;
    list[componentIndex] =
        a + b + c + d + e + f + g + h + i + j + k + l + m + n + o + p;
    componentIndex++;
  }
  return componentIndex;
}

void main() {
  int x = foo();
  Expect.equals(10, x);
  Expect.equals(10, count);
  for (int i = 0; i < 10; i++) {
    Expect.equals(expected_values[i], list[i]);
  }
}
