Index: tests/language/bit_operations_test.dart |
diff --git a/tests/language/bit_operations_test.dart b/tests/language/bit_operations_test.dart |
deleted file mode 100644 |
index 3c2dc93415f60c02912fa6598b6ef405016904c0..0000000000000000000000000000000000000000 |
--- a/tests/language/bit_operations_test.dart |
+++ /dev/null |
@@ -1,218 +0,0 @@ |
-// Copyright (c) 2011, 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. |
-// Dart test for testing bitwise operations. |
-// VMOptions=--optimization-counter-threshold=10 --no-use-osr --no-background-compilation --enable-inlining-annotations |
- |
-import "package:expect/expect.dart"; |
- |
-const neverInline = "NeverInline"; |
- |
-void main() { |
- for (int i = 0; i < 4; i++) { |
- test(); |
- } |
-} |
- |
-void test() { |
- Expect.equals(3, (3 & 7)); |
- Expect.equals(7, (3 | 7)); |
- Expect.equals(4, (3 ^ 7)); |
- Expect.equals(25, (100 >> 2)); |
- Expect.equals(400, (100 << 2)); |
- Expect.equals(-25, (-100 >> 2)); |
- Expect.equals(-101, ~100); |
- Expect.equals(0x10000000000000000, 1 << 64); |
- Expect.equals(-0x10000000000000000, -1 << 64); |
- Expect.equals(0x40000000, 0x04000000 << 4); |
- Expect.equals(0x4000000000000000, 0x0400000000000000 << 4); |
- Expect.equals(0, ~ -1); |
- Expect.equals(-1, ~0); |
- |
- Expect.equals(0, 1 >> 160); |
- Expect.equals(-1, -1 >> 160); |
- |
- Expect.equals( |
- 0x100000000000000001, 0x100000000000000001 & 0x100000100F00000001); |
- Expect.equals(0x1, 0x1 & 0x100000100F00000001); |
- Expect.equals(0x1, 0x100000100F00000001 & 0x1); |
- |
- Expect.equals( |
- 0x100000100F00000001, 0x100000000000000001 | 0x100000100F00000001); |
- Expect.equals(0x100000100F00000011, 0x11 | 0x100000100F00000001); |
- Expect.equals(0x100000100F00000011, 0x100000100F00000001 | 0x11); |
- |
- Expect.equals( |
- 0x0F000F00000000000000, 0x0F00F00000000000001 ^ 0xFF00000000000000001); |
- Expect.equals(0x31, 0xF00F00000000000001 ^ 0xF00F00000000000030); |
- Expect.equals(0xF00F00000000000031, 0xF00F00000000000001 ^ 0x30); |
- Expect.equals(0xF00F00000000000031, 0x30 ^ 0xF00F00000000000001); |
- |
- Expect.equals(0xF0000000000000000F, 0xF0000000000000000F7 >> 4); |
- Expect.equals(15, 0xF00000000 >> 32); |
- Expect.equals(1030792151040, 16492674416655 >> 4); |
- |
- Expect.equals(0xF0000000000000000F0, 0xF0000000000000000F << 4); |
- Expect.equals(0xF00000000, 15 << 32); |
- |
- testNegativeValueShifts(); |
- testPositiveValueShifts(); |
- testNoMaskingOfShiftCount(); |
- testNegativeCountShifts(); |
- for (int i = 0; i < 20; i++) { |
- testCornerCasesRightShifts(); |
- testRightShift64Bit(); |
- testLeftShift64Bit(); |
- testLeftShift64BitWithOverflow1(); |
- testLeftShift64BitWithOverflow2(); |
- testLeftShift64BitWithOverflow3(); |
- } |
- |
- // Test precedence. |
- testPrecedence(4, 5, 3, 1); |
- testPrecedence(3, 4, 5, 9); |
- testPrecedence(0x5c71, 0x6b92, 0x7654, 0x7d28); |
- |
- // Test more special cases. |
- testRightShift65(); |
-} |
- |
-void testCornerCasesRightShifts() { |
- var v32 = 0xFF000000; |
- var v64 = 0xFF00000000000000; |
- Expect.equals(0x3, v32 >> 0x1E); |
- Expect.equals(0x1, v32 >> 0x1F); |
- Expect.equals(0x0, v32 >> 0x20); |
- Expect.equals(0x3, v64 >> 0x3E); |
- Expect.equals(0x1, v64 >> 0x3F); |
- Expect.equals(0x0, v64 >> 0x40); |
-} |
- |
-void testRightShift64Bit() { |
- var t = 0x1ffffffff; |
- Expect.equals(0xffffffff, t >> 1); |
-} |
- |
-void testLeftShift64Bit() { |
- var t = 0xffffffff; |
- Expect.equals(0xffffffff, t << 0); |
- Expect.equals(0x1fffffffe, t << 1); |
- Expect.equals(0x7fffffff80000000, t << 31); |
- Expect.equals(0x10000000000000000, 2*(t+1) << 31); //# 01: static type warning |
- Expect.equals(0x20000000000000000, 4*(t+1) << 31); //# 02: static type warning |
- Expect.equals(0x8000000000000000, (t + 1) << 31); |
-} |
- |
-void testLeftShift64BitWithOverflow1() { |
- var t = 0xffffffff; |
- Expect.equals(0x10000000000000000, 2*(t+1) << 31); //# 03: static type warning |
-} |
- |
-void testLeftShift64BitWithOverflow2() { |
- var t = 0xffffffff; |
- Expect.equals(0x20000000000000000, 4*(t+1) << 31); //# 04: static type warning |
-} |
- |
-void testLeftShift64BitWithOverflow3() { |
- var t = 0xffffffff; |
- Expect.equals(0x8000000000000000, (t + 1) << 31); |
-} |
- |
-void testNegativeCountShifts() { |
- bool throwOnLeft(a, b) { |
- try { |
- var x = a << b; |
- return false; |
- } catch (e) { |
- return true; |
- } |
- } |
- |
- bool throwOnRight(a, b) { |
- try { |
- var x = a >> b; |
- return false; |
- } catch (e) { |
- return true; |
- } |
- } |
- |
- Expect.isTrue(throwOnLeft(12, -3)); |
- Expect.isTrue(throwOnRight(12, -3)); |
- for (int i = 0; i < 20; i++) { |
- Expect.isFalse(throwOnLeft(12, 3)); |
- Expect.isFalse(throwOnRight(12, 3)); |
- } |
-} |
- |
-void testNegativeValueShifts() { |
- for (int value = 0; value > -100; value--) { |
- for (int i = 0; i < 300; i++) { |
- int b = (value << i) >> i; |
- Expect.equals(value, b); |
- } |
- } |
-} |
- |
-void testPositiveValueShifts() { |
- for (int value = 0; value < 100; value++) { |
- for (int i = 0; i < 300; i++) { |
- int b = (value << i) >> i; |
- Expect.equals(value, b); |
- } |
- } |
-} |
- |
-void testNoMaskingOfShiftCount() { |
- // Shifts which would behave differently if shift count was masked into a |
- // range. |
- Expect.equals(0, 0 >> 256); |
- Expect.equals(0, 1 >> 256); |
- Expect.equals(0, 2 >> 256); |
- Expect.equals(0, shiftRight(0, 256)); |
- Expect.equals(0, shiftRight(1, 256)); |
- Expect.equals(0, shiftRight(2, 256)); |
- |
- for (int shift = 1; shift <= 256; shift++) { |
- Expect.equals(0, shiftRight(1, shift)); |
- Expect.equals(-1, shiftRight(-1, shift)); |
- Expect.equals(true, shiftLeft(1, shift) > shiftLeft(1, shift - 1)); |
- } |
-} |
- |
-int shiftLeft(int a, int b) { |
- return a << b; |
-} |
- |
-int shiftRight(int a, int b) { |
- return a >> b; |
-} |
- |
-void testPrecedence(int a, int b, int c, int d) { |
- // & binds stronger than ^, which binds stronger than |. |
- int result = a & b ^ c | d & b ^ c; |
- Expect.equals(((a & b) ^ c) | ((d & b) ^ c), result); // &^| |
- Expect.notEquals((a & (b ^ c)) | (d & (b ^ c)), result); // ^&| |
- Expect.notEquals((a & b) ^ (c | (d & b)) ^ c, result); // &|^ |
- Expect.notEquals((a & b) ^ ((c | d) & b) ^ c, result); // |&^ |
- Expect.notEquals(a & (b ^ (c | d)) & (b ^ c), result); // |^& |
- Expect.notEquals(a & ((b ^ c) | d) & (b ^ c), result); // ^|& |
- // Binds stronger than relational operators. |
- Expect.equals((a & b) < (c & d), a & b < c & d); |
- // Binds weaker than shift operators. |
- Expect.equals((a & (b << c)) ^ d, a & b << c ^ d); |
- Expect.notEquals((a & b) << (c ^ d), a & b << c ^ d); |
-} |
- |
-@neverInline |
-rightShift65Noinline(a) => a >> 65; |
- |
-testRightShift65() { |
- var a = 0x5f22334455667788; |
- var b = -0x5f22334455667788; |
- |
- for (var i = 0; i < 20; ++i) { |
- Expect.equals(0, rightShift65Noinline(a)); |
- Expect.equals(-1, rightShift65Noinline(b)); |
- } |
-} |