// Copyright (c) 2011, 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 test program for constructors and initializers.

// @dart = 2.9

import "package:expect/expect.dart";

// Expect the initializer expressions E(i) to be evaluated
// in the order 1, 2, 3, ...
// This test has no inheritance but many fields to flush out issues with
// ordering of fields.

String trace = "";

int E(int i) {
  trace += "$i-";
  return i;
}

class A {
  var j; //      Names are in reverse order to detect sorting by name...
  var i = 0; //  Initialized odd/even to detect these inits affecting order.
  var h;
  var g = 0;
  var f;
  var e = 0;
  var d;
  var c = 0;
  var b;
  var a = 0;

  A()
      : a = E(1), // Initializations in different order to decls.  Ascending...
        b = E(2),
        c = E(3),
        f = E(4), // Descending to be perverse...
        e = E(5),
        d = E(6),
        g = E(7), // Ascending again.
        h = E(8),
        i = E(9),
        j = E(10) {
    Expect.equals(1, a);
    Expect.equals(2, b);
    Expect.equals(3, c);

    Expect.equals(4, f);
    Expect.equals(5, e);
    Expect.equals(6, d);

    Expect.equals(7, g);
    Expect.equals(8, h);
    Expect.equals(9, i);
    Expect.equals(10, j);
  }
}

main() {
  var x = new A();
  Expect.equals('1-2-3-4-5-6-7-8-9-10-', trace);
}
