1f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch// Copyright 2010 the V8 project authors. All rights reserved.
2f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch// Redistribution and use in source and binary forms, with or without
3f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch// modification, are permitted provided that the following conditions are
4f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch// met:
5f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch//
6f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch//     * Redistributions of source code must retain the above copyright
7f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch//       notice, this list of conditions and the following disclaimer.
8f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch//     * Redistributions in binary form must reproduce the above
9f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch//       copyright notice, this list of conditions and the following
10f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch//       disclaimer in the documentation and/or other materials provided
11f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch//       with the distribution.
12f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch//     * Neither the name of Google Inc. nor the names of its
13f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch//       contributors may be used to endorse or promote products derived
14f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch//       from this software without specific prior written permission.
15f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch//
16f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
28f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch// Repeat most the tests in smi-ops.js that use SMI_MIN and SMI_MAX, but
29f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch// with SMI_MIN and SMI_MAX from the 64-bit platform, which represents all
30f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch// signed 32-bit integer values as smis.
31f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
32f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdochconst SMI_MAX = (1 << 30) - 1 + (1 << 30);  // Create without overflowing.
33f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdochconst SMI_MIN = -SMI_MAX - 1;  // Create without overflowing.
34f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdochconst ONE = 1;
35f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdochconst ONE_HUNDRED = 100;
36f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
37f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdochconst OBJ_42 = new (function() {
38f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch  this.valueOf = function() { return 42; };
39f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch})();
40f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
41f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(42, OBJ_42.valueOf());
42f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
43f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
44f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdochfunction Add1(x) {
45f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch  return x + 1;
46f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch}
47f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
48f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdochfunction Add100(x) {
49f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch  return x + 100;
50f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch}
51f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
52f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdochfunction Add1Reversed(x) {
53f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch  return 1 + x;
54f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch}
55f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
56f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdochfunction Add100Reversed(x) {
57f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch  return 100 + x;
58f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch}
59f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
60f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
61f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(1, Add1(0));  // fast case
62f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(1, Add1Reversed(0));  // fast case
63f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(SMI_MAX + ONE, Add1(SMI_MAX), "smimax + 1");
64f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(SMI_MAX + ONE, Add1Reversed(SMI_MAX), "1 + smimax");
65f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(42 + ONE, Add1(OBJ_42));  // non-smi
66f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(42 + ONE, Add1Reversed(OBJ_42));  // non-smi
67f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
68f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(100, Add100(0));  // fast case
69f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(100, Add100Reversed(0));  // fast case
70f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(SMI_MAX + ONE_HUNDRED, Add100(SMI_MAX), "smimax + 100");
71f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(SMI_MAX + ONE_HUNDRED, Add100Reversed(SMI_MAX), " 100 + smimax");
72f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(42 + ONE_HUNDRED, Add100(OBJ_42));  // non-smi
73f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(42 + ONE_HUNDRED, Add100Reversed(OBJ_42));  // non-smi
74f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
75f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
76f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
77f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdochfunction Sub1(x) {
78f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch  return x - 1;
79f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch}
80f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
81f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdochfunction Sub100(x) {
82f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch  return x - 100;
83f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch}
84f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
85f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdochfunction Sub1Reversed(x) {
86f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch  return 1 - x;
87f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch}
88f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
89f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdochfunction Sub100Reversed(x) {
90f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch  return 100 - x;
91f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch}
92f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
93f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
94f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(0, Sub1(1));  // fast case
95f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(-1, Sub1Reversed(2));  // fast case
96f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(SMI_MIN - ONE, Sub1(SMI_MIN));  // overflow
97f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(ONE - SMI_MIN, Sub1Reversed(SMI_MIN));  // overflow
98f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(42 - ONE, Sub1(OBJ_42));  // non-smi
99f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(ONE - 42, Sub1Reversed(OBJ_42));  // non-smi
100f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
101f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(0, Sub100(100));  // fast case
102f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(1, Sub100Reversed(99));  // fast case
103f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(SMI_MIN - ONE_HUNDRED, Sub100(SMI_MIN));  // overflow
104f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(ONE_HUNDRED - SMI_MIN, Sub100Reversed(SMI_MIN));  // overflow
105f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(42 - ONE_HUNDRED, Sub100(OBJ_42));  // non-smi
106f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(ONE_HUNDRED - 42, Sub100Reversed(OBJ_42));  // non-smi
107f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
108f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
109f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdochfunction Shr1(x) {
110f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch  return x >>> 1;
111f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch}
112f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
113f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdochfunction Shr100(x) {
114f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch  return x >>> 100;
115f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch}
116f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
117f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdochfunction Shr1Reversed(x) {
118f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch  return 1 >>> x;
119f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch}
120f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
121f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdochfunction Shr100Reversed(x) {
122f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch  return 100 >>> x;
123f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch}
124f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
125f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdochfunction Sar1(x) {
126f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch  return x >> 1;
127f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch}
128f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
129f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdochfunction Sar100(x) {
130f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch  return x >> 100;
131f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch}
132f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
133f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdochfunction Sar1Reversed(x) {
134f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch  return 1 >> x;
135f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch}
136f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
137f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdochfunction Sar100Reversed(x) {
138f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch  return 100 >> x;
139f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch}
140f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
141f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
142f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(0, Shr1(1));
143f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(0, Sar1(1));
144f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(0, Shr1Reversed(2));
145f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(0, Sar1Reversed(2));
146f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(1073741824, Shr1(SMI_MIN));
147f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(-1073741824, Sar1(SMI_MIN));
148f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(1, Shr1Reversed(SMI_MIN));
149f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(1, Sar1Reversed(SMI_MIN));
150f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(21, Shr1(OBJ_42));
151f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(21, Sar1(OBJ_42));
152f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(0, Shr1Reversed(OBJ_42));
153f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(0, Sar1Reversed(OBJ_42));
154f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
155f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(6, Shr100(100), "100 >>> 100");
156f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(6, Sar100(100), "100 >> 100");
157f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(12, Shr100Reversed(99));
158f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(12, Sar100Reversed(99));
159f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(134217728, Shr100(SMI_MIN));
160f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(-134217728, Sar100(SMI_MIN));
161f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(100, Shr100Reversed(SMI_MIN));
162f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(100, Sar100Reversed(SMI_MIN));
163f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(2, Shr100(OBJ_42));
164f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(2, Sar100(OBJ_42));
165f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(0, Shr100Reversed(OBJ_42));
166f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(0, Sar100Reversed(OBJ_42));
167f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
168f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
169f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdochfunction Xor1(x) {
170f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch  return x ^ 1;
171f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch}
172f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
173f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdochfunction Xor100(x) {
174f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch  return x ^ 100;
175f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch}
176f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
177f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdochfunction Xor1Reversed(x) {
178f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch  return 1 ^ x;
179f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch}
180f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
181f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdochfunction Xor100Reversed(x) {
182f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch  return 100 ^ x;
183f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch}
184f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
185f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
186f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(0, Xor1(1));
187f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(3, Xor1Reversed(2));
188f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(SMI_MIN + 1, Xor1(SMI_MIN));
189f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(SMI_MIN + 1, Xor1Reversed(SMI_MIN));
190f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(43, Xor1(OBJ_42));
191f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(43, Xor1Reversed(OBJ_42));
192f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
193f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(0, Xor100(100));
194f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(7, Xor100Reversed(99));
195f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(-2147483548, Xor100(SMI_MIN));
196f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(-2147483548, Xor100Reversed(SMI_MIN));
197f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(78, Xor100(OBJ_42));
198f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(78, Xor100Reversed(OBJ_42));
199f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
200f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdochvar x = 0x23; var y = 0x35;
201f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(0x16, x ^ y);
202f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
203f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
204f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch// Bitwise not.
205f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdochvar v = 0;
206f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(-1, ~v);
207f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdochv = SMI_MIN;
208f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(0x7fffffff, ~v, "~smimin");
209f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdochv = SMI_MAX;
210f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(-0x80000000, ~v, "~smimax");
211f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
212f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch// Overflowing ++ and --.
213f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdochv = SMI_MAX;
214f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdochv++;
215f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(0x80000000, v, "smimax++");
216f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdochv = SMI_MIN;
217f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdochv--;
218f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertEquals(-0x80000001, v, "smimin--");
219f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch
220f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch// Check that comparisons of numbers separated by MIN_SMI work.
221f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertFalse(SMI_MIN > 0);
222f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertFalse(SMI_MIN + 1 > 1);
223f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertFalse(SMI_MIN + 1 > 2);
224f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertFalse(SMI_MIN + 2 > 1);
225f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertFalse(0 < SMI_MIN);
226f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertTrue(-1 < SMI_MAX);
227f87a203d89e1bbb6708282e0b64dbd13d59b723dBen MurdochassertFalse(SMI_MAX < -1);
228