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

// Test constant folding on numbers.

import 'package:async_helper/async_helper.dart';
import '../helpers/compiler_helper.dart';

const String CODE = """
class A {
  var _link;
  get link => _link;
}
foo(x) {
  if (new DateTime.now().millisecondsSinceEpoch == 42) return null;
  var a = A();
  if (new DateTime.now().millisecondsSinceEpoch == 42) return a;
  a._link = a;
  return a;
}
main() {
  A x = foo(0);
  return x == x.link;
}
""";

main() {
  asyncTest(() async {
    // The `==` is strengthened to a HIdentity instruction. The HIdentity
    // follows `x.link`, so x cannot be `null`.
    var compare = RegExp(r'x === x\.get\$link\(\)');
    await compileAndMatch(CODE, 'main', compare);
  });
}
