// Copyright (c) 2014, 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 compile-time evaluation of constants is consistent with runtime
// evaluation.

import 'package:expect/expect.dart';

const top_const = identical(-0.0, 0);
final top_final = identical(-0.0, 0);
var top_var = identical(-0.0, 0);

@top_const
class C {
  static const static_const = identical(-0.0, 0);
  static final static_final = identical(-0.0, 0);
  static var static_var = identical(-0.0, 0);

  final instance_final = identical(-0.0, 0);
  var instance_var = identical(-0.0, 0);

  void test() {
    const local_const = identical(-0.0, 0);
    final local_final = identical(-0.0, 0);
    var local_var = identical(-0.0, 0);

    Expect.equals(identical(-0.0, 0), top_const);
    Expect.equals(top_const, top_final);
    Expect.equals(top_final, top_var);
    Expect.equals(top_var, static_const);
    Expect.equals(static_const, static_final);
    Expect.equals(static_final, static_var);
    Expect.equals(static_var, instance_final);
    Expect.equals(instance_final, instance_var);
    Expect.equals(instance_var, local_const);
    Expect.equals(local_const, local_final);
    Expect.equals(local_final, local_var);
  }
}

void main() {
  new C().test();
}
