fc1b1ecc71
Change-Id: Idbcc965a27e9ffeedf5e0a1068b019de4193070f Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/127745 Commit-Queue: Bob Nystrom <rnystrom@google.com> Reviewed-by: Alexander Thomas <athom@google.com>
145 lines
4.4 KiB
Dart
145 lines
4.4 KiB
Dart
// 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";
|
|
|
|
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));
|
|
}
|
|
}
|
|
|
|
// Due to bad precedence rules this example was broken in Dart2Js.
|
|
precedence() {
|
|
Expect.equals(0x80000000, -1 & 0x80000000);
|
|
Expect.equals(0x80000000, id(-1) & 0x80000000);
|
|
Expect.equals(0x80000000, ~(~(0x80000000)));
|
|
Expect.equals(0x80000000, ~(~(id(0x80000000))));
|
|
}
|
|
|
|
main() {
|
|
constants();
|
|
interceptors();
|
|
speculative();
|
|
precedence();
|
|
}
|