| Index: tests/language/positive_bit_operations_test.dart
|
| diff --git a/tests/language/positive_bit_operations_test.dart b/tests/language/positive_bit_operations_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..730d5cf861c4dc8aae742637527693e44889600d
|
| --- /dev/null
|
| +++ b/tests/language/positive_bit_operations_test.dart
|
| @@ -0,0 +1,115 @@
|
| +// 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.
|
| +
|
| +constants() {
|
| + Expect.equals(0x80000000, 0x80000000 | 0);
|
| + Expect.equals(0x80000001, 0x80000000 | 1);
|
| + Expect.equals(0x80000000, 0x80000000 | 0x80000000);
|
| + Expect.equals(0xFFFFFFFF, 0xFFFF0000 | 0xFFFF);
|
| + Expect.equals(0x80000000, 0x80000000 & 0xFFFFFFFF);
|
| + Expect.equals(0x80000000, 0x80000000 & 0x80000000);
|
| + Expect.equals(0x80000000, 0x80000000 & 0xF0000000);
|
| + Expect.equals(0x80000000, 0xFFFFFFFF & 0x80000000);
|
| + Expect.equals(0x80000000, 0x80000000 ^ 0);
|
| + Expect.equals(0xFFFFFFFF, 0x80000000 ^ 0x7FFFFFFF);
|
| + Expect.equals(0xFFFFFFFF, 0x7FFFFFFF ^ 0x80000000);
|
| + Expect.equals(0xF0000000, 0x70000000 ^ 0x80000000);
|
| + Expect.equals(0x80000000, 1 << 31);
|
| + Expect.equals(0xFFFFFFF0, 0xFFFFFFF << 4);
|
| + Expect.equals(0x7FFFFFFF, 0xFFFFFFFF >> 1);
|
| + Expect.equals(0xFFFFFFFC,
|
| + ((((((0xFFFFFFF << 4) // 0xFFFFFFF0
|
| + >> 1) // 0x7FFFFFF8
|
| + | 0x80000000) // 0xFFFFFFF8
|
| + >> 2) // 0x3FFFFFFE
|
| + ^ 0x40000000) // 0x7FFFFFFE
|
| + << 1));
|
| +}
|
| +
|
| +foo(i) {
|
| + if (i != 0) {
|
| + y--;
|
| + foo(i - 1);
|
| + y++;
|
| + }
|
| +}
|
| +
|
| +var y;
|
| +
|
| +// id returns [x] in a way that should be difficult to predict statically.
|
| +id(x) {
|
| + y = x;
|
| + foo(10);
|
| + return y;
|
| +}
|
| +
|
| +interceptors() {
|
| + Expect.equals(0x80000000, id(0x80000000) | id(0));
|
| + Expect.equals(0x80000001, id(0x80000000) | id(1));
|
| + Expect.equals(0x80000000, id(0x80000000) | id(0x80000000));
|
| + Expect.equals(0xFFFFFFFF, id(0xFFFF0000) | id(0xFFFF));
|
| + Expect.equals(0x80000000, id(0x80000000) & id(0xFFFFFFFF));
|
| + Expect.equals(0x80000000, id(0x80000000) & id(0x80000000));
|
| + Expect.equals(0x80000000, id(0x80000000) & id(0xF0000000));
|
| + Expect.equals(0x80000000, id(0xFFFFFFFF) & id(0x80000000));
|
| + Expect.equals(0x80000000, id(0x80000000) ^ id(0));
|
| + Expect.equals(0xFFFFFFFF, id(0x80000000) ^ id(0x7FFFFFFF));
|
| + Expect.equals(0xFFFFFFFF, id(0x7FFFFFFF) ^ id(0x80000000));
|
| + Expect.equals(0xF0000000, id(0x70000000) ^ id(0x80000000));
|
| + Expect.equals(0x80000000, id(1) << id(31));
|
| + Expect.equals(0xFFFFFFF0, id(0xFFFFFFF) << id(4));
|
| + Expect.equals(0x7FFFFFFF, id(0xFFFFFFFF) >> id(1));
|
| + Expect.equals(0xFFFFFFFC,
|
| + ((((((id(0xFFFFFFF) << 4) // 0xFFFFFFF0
|
| + >> 1) // 0x7FFFFFF8
|
| + | 0x80000000) // 0xFFFFFFF8
|
| + >> 2) // 0x3FFFFFFE
|
| + ^ 0x40000000) // 0x7FFFFFFE
|
| + << 1));
|
| +}
|
| +
|
| +speculative() {
|
| + var a = id(0x80000000);
|
| + var b = id(0);
|
| + var c = id(1);
|
| + var d = id(0xFFFF0000);
|
| + var e = id(0xFFFF);
|
| + var f = id(0xFFFFFFFF);
|
| + var g = id(0xF0000000);
|
| + var h = id(0x7FFFFFFF);
|
| + var j = id(0x70000000);
|
| + var k = id(31);
|
| + var l = id(4);
|
| + var m = id(0xFFFFFFF);
|
| + for (int i = 0; i < 1; i++) {
|
| + Expect.equals(0x80000000, a | b);
|
| + Expect.equals(0x80000001, a | c);
|
| + Expect.equals(0x80000000, a | a);
|
| + Expect.equals(0xFFFFFFFF, d | e);
|
| + Expect.equals(0x80000000, a & f);
|
| + Expect.equals(0x80000000, a & a);
|
| + Expect.equals(0x80000000, a & g);
|
| + Expect.equals(0x80000000, f & a);
|
| + Expect.equals(0x80000000, a ^ b);
|
| + Expect.equals(0xFFFFFFFF, a ^ h);
|
| + Expect.equals(0xFFFFFFFF, h ^ a);
|
| + Expect.equals(0xF0000000, j ^ a);
|
| + Expect.equals(0x80000000, c << k);
|
| + Expect.equals(0xFFFFFFF0, m << l);
|
| + Expect.equals(0x7FFFFFFF, f >> c);
|
| + Expect.equals(0xFFFFFFFC,
|
| + ((((((m << 4) // 0xFFFFFFF0
|
| + >> 1) // 0x7FFFFFF8
|
| + | 0x80000000) // 0xFFFFFFF8
|
| + >> 2) // 0x3FFFFFFE
|
| + ^ 0x40000000) // 0x7FFFFFFE
|
| + << 1));
|
| + }
|
| +}
|
| +
|
| +main() {
|
| + constants();
|
| + interceptors();
|
| + speculative();
|
| +}
|
|
|