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