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