// 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.
// Check that initializers of static const fields are compile time constants.

class Point {
  final x_;
  final y_;
  const Point(x, y) : x_ = x, y_ = y;
}

class ConstInitTest {
  static const N = 1;
  static const O = 1 + 3;
  static const P = 2 * (O - N);
  static const Q = const Point(0, 0);

  static const Q2 = const Point(0, 0);
  static const P2 = 2 * (O - N);
  static const O2 = 1 + 3;
  static const N2 = 1;

  static testMain() {
    Expect.equals(1, N);
    Expect.equals(4, O);
    Expect.equals(6, P);
    Expect.equals(0, Q.x_);
    Expect.equals(0, Q.y_);
  }
}

main() {
  ConstInitTest.testMain();
}
