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

// @dart = 2.9

// 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();
}
