// Copyright (c) 2012, 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.

import "package:expect/expect.dart";

// Make sure we use JavaScript semantics when compiling compile-time constants.

const x = 1234567890123456789;
const y = 1234567890123456788;
const z = x - y;

const a = 1.0;
const b = a << 3; // //# 01: compile-time error

const c = -0.0;
const d = c << 1; // //# 02: compile-time error

foo() => 12345678901234567891 - 12345678901234567890;

main() {
  Expect.equals(0, z);
  Expect.equals(0, x - y);
  Expect.equals(0, foo());
  Expect.isTrue(x is double);
  Expect.isTrue(x is int);
  Expect.equals(8, b); // //# 01: continued
  Expect.equals(8, 1.0 << 3); // //# 03: static type warning
  Expect.isTrue(1 == 1.0);
  Expect.equals(0, d); // //# 02: continued
  Expect.equals(0, -0.0 << 1); // //# 04: static type warning
  // Make sure the 1 is not shifted into the 32 bit range.
  Expect.equals(0, 0x100000000 >> 3);
  // The dynamic int-check also allows -0.0.
  Expect.isTrue((-0.0) is int);
}
