// 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 '../compiler_helper.dart';

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

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

  asyncTest(() async {
    print('--test from kernel------------------------------------------------');
    await runTest();
  });
}
