1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 /** 18 * @author Elena Semukhina 19 */ 20 21 package org.apache.harmony.tests.java.math; 22 23 import junit.framework.TestCase; 24 import java.math.BigInteger; 25 26 /** 27 * Class: java.math.BigInteger 28 * Method: xor 29 */ 30 public class BigIntegerXorTest extends TestCase { 31 /** 32 * Xor for zero and a positive number 33 */ 34 public void testZeroPos() { 35 String numA = "0"; 36 String numB = "27384627835298756289327365"; 37 String res = "27384627835298756289327365"; 38 BigInteger aNumber = new BigInteger(numA); 39 BigInteger bNumber = new BigInteger(numB); 40 BigInteger result = aNumber.xor(bNumber); 41 assertTrue(res.equals(result.toString())); 42 } 43 44 /** 45 * Xor for zero and a negative number 46 */ 47 public void testZeroNeg() { 48 String numA = "0"; 49 String numB = "-27384627835298756289327365"; 50 String res = "-27384627835298756289327365"; 51 BigInteger aNumber = new BigInteger(numA); 52 BigInteger bNumber = new BigInteger(numB); 53 BigInteger result = aNumber.xor(bNumber); 54 assertTrue(res.equals(result.toString())); 55 } 56 57 /** 58 * Xor for a positive number and zero 59 */ 60 public void testPosZero() { 61 String numA = "27384627835298756289327365"; 62 String numB = "0"; 63 String res = "27384627835298756289327365"; 64 BigInteger aNumber = new BigInteger(numA); 65 BigInteger bNumber = new BigInteger(numB); 66 BigInteger result = aNumber.xor(bNumber); 67 assertTrue(res.equals(result.toString())); 68 } 69 70 /** 71 * Xor for a negative number and zero 72 */ 73 public void testNegPos() { 74 String numA = "-27384627835298756289327365"; 75 String numB = "0"; 76 String res = "-27384627835298756289327365"; 77 BigInteger aNumber = new BigInteger(numA); 78 BigInteger bNumber = new BigInteger(numB); 79 BigInteger result = aNumber.xor(bNumber); 80 assertTrue(res.equals(result.toString())); 81 } 82 83 /** 84 * Xor for zero and zero 85 */ 86 public void testZeroZero() { 87 String numA = "0"; 88 String numB = "0"; 89 String res = "0"; 90 BigInteger aNumber = new BigInteger(numA); 91 BigInteger bNumber = new BigInteger(numB); 92 BigInteger result = aNumber.xor(bNumber); 93 assertTrue(res.equals(result.toString())); 94 } 95 96 /** 97 * Xor for zero and one 98 */ 99 public void testZeroOne() { 100 String numA = "0"; 101 String numB = "1"; 102 String res = "1"; 103 BigInteger aNumber = new BigInteger(numA); 104 BigInteger bNumber = new BigInteger(numB); 105 BigInteger result = aNumber.xor(bNumber); 106 assertTrue(res.equals(result.toString())); 107 } 108 109 /** 110 * Xor for one and one 111 */ 112 public void testOneOne() { 113 String numA = "1"; 114 String numB = "1"; 115 String res = "0"; 116 BigInteger aNumber = new BigInteger(numA); 117 BigInteger bNumber = new BigInteger(numB); 118 BigInteger result = aNumber.xor(bNumber); 119 assertTrue(res.equals(result.toString())); 120 } 121 122 /** 123 * Xor for two positive numbers of the same length 124 */ 125 public void testPosPosSameLength() { 126 String numA = "283746278342837476784564875684767"; 127 String numB = "293478573489347658763745839457637"; 128 String res = "71412358434940908477702819237626"; 129 BigInteger aNumber = new BigInteger(numA); 130 BigInteger bNumber = new BigInteger(numB); 131 BigInteger result = aNumber.xor(bNumber); 132 assertTrue(res.equals(result.toString())); 133 } 134 135 /** 136 * Xor for two positive numbers; the first is longer 137 */ 138 public void testPosPosFirstLonger() { 139 String numA = "2837462783428374767845648748973847593874837948575684767"; 140 String numB = "293478573489347658763745839457637"; 141 String res = "2837462783428374767845615168483972194300564226167553530"; 142 BigInteger aNumber = new BigInteger(numA); 143 BigInteger bNumber = new BigInteger(numB); 144 BigInteger result = aNumber.xor(bNumber); 145 assertTrue(res.equals(result.toString())); 146 } 147 148 /** 149 * Xor for two positive numbers; the first is shorter 150 */ 151 public void testPosPosFirstShorter() { 152 String numA = "293478573489347658763745839457637"; 153 String numB = "2837462783428374767845648748973847593874837948575684767"; 154 String res = "2837462783428374767845615168483972194300564226167553530"; 155 BigInteger aNumber = new BigInteger(numA); 156 BigInteger bNumber = new BigInteger(numB); 157 BigInteger result = aNumber.xor(bNumber); 158 assertTrue(res.equals(result.toString())); 159 } 160 161 /** 162 * Xor for two negative numbers of the same length 163 */ 164 public void testNegNegSameLength() { 165 String numA = "-283746278342837476784564875684767"; 166 String numB = "-293478573489347658763745839457637"; 167 String res = "71412358434940908477702819237626"; 168 BigInteger aNumber = new BigInteger(numA); 169 BigInteger bNumber = new BigInteger(numB); 170 BigInteger result = aNumber.xor(bNumber); 171 assertTrue(res.equals(result.toString())); 172 } 173 174 /** 175 * Xor for two negative numbers; the first is longer 176 */ 177 public void testNegNegFirstLonger() { 178 String numA = "-2837462783428374767845648748973847593874837948575684767"; 179 String numB = "-293478573489347658763745839457637"; 180 String res = "2837462783428374767845615168483972194300564226167553530"; 181 BigInteger aNumber = new BigInteger(numA); 182 BigInteger bNumber = new BigInteger(numB); 183 BigInteger result = aNumber.xor(bNumber); 184 assertTrue(res.equals(result.toString())); 185 } 186 187 /** 188 * Xor for two negative numbers; the first is shorter 189 */ 190 public void testNegNegFirstShorter() { 191 String numA = "293478573489347658763745839457637"; 192 String numB = "2837462783428374767845648748973847593874837948575684767"; 193 String res = "2837462783428374767845615168483972194300564226167553530"; 194 BigInteger aNumber = new BigInteger(numA); 195 BigInteger bNumber = new BigInteger(numB); 196 BigInteger result = aNumber.xor(bNumber); 197 assertTrue(res.equals(result.toString())); 198 } 199 200 /** 201 * Xor for two numbers of different signs and the same length 202 */ 203 public void testPosNegSameLength() { 204 String numA = "283746278342837476784564875684767"; 205 String numB = "-293478573489347658763745839457637"; 206 String res = "-71412358434940908477702819237628"; 207 BigInteger aNumber = new BigInteger(numA); 208 BigInteger bNumber = new BigInteger(numB); 209 BigInteger result = aNumber.xor(bNumber); 210 assertTrue(res.equals(result.toString())); 211 } 212 213 /** 214 * Xor for two numbers of different signs and the same length 215 */ 216 public void testNegPosSameLength() { 217 String numA = "-283746278342837476784564875684767"; 218 String numB = "293478573489347658763745839457637"; 219 String res = "-71412358434940908477702819237628"; 220 BigInteger aNumber = new BigInteger(numA); 221 BigInteger bNumber = new BigInteger(numB); 222 BigInteger result = aNumber.xor(bNumber); 223 assertTrue(res.equals(result.toString())); 224 } 225 226 /** 227 * Xor for a negative and a positive numbers; the first is longer 228 */ 229 public void testNegPosFirstLonger() { 230 String numA = "-2837462783428374767845648748973847593874837948575684767"; 231 String numB = "293478573489347658763745839457637"; 232 String res = "-2837462783428374767845615168483972194300564226167553532"; 233 BigInteger aNumber = new BigInteger(numA); 234 BigInteger bNumber = new BigInteger(numB); 235 BigInteger result = aNumber.xor(bNumber); 236 assertTrue(res.equals(result.toString())); 237 } 238 239 /** 240 * Xor for two negative numbers; the first is shorter 241 */ 242 public void testNegPosFirstShorter() { 243 String numA = "-293478573489347658763745839457637"; 244 String numB = "2837462783428374767845648748973847593874837948575684767"; 245 String res = "-2837462783428374767845615168483972194300564226167553532"; 246 BigInteger aNumber = new BigInteger(numA); 247 BigInteger bNumber = new BigInteger(numB); 248 BigInteger result = aNumber.xor(bNumber); 249 assertTrue(res.equals(result.toString())); 250 } 251 252 /** 253 * Xor for a positive and a negative numbers; the first is longer 254 */ 255 public void testPosNegFirstLonger() { 256 String numA = "2837462783428374767845648748973847593874837948575684767"; 257 String numB = "-293478573489347658763745839457637"; 258 String res = "-2837462783428374767845615168483972194300564226167553532"; 259 BigInteger aNumber = new BigInteger(numA); 260 BigInteger bNumber = new BigInteger(numB); 261 BigInteger result = aNumber.xor(bNumber); 262 assertTrue(res.equals(result.toString())); 263 } 264 265 /** 266 * Xor for a positive and a negative number; the first is shorter 267 */ 268 public void testPosNegFirstShorter() { 269 String numA = "293478573489347658763745839457637"; 270 String numB = "-2837462783428374767845648748973847593874837948575684767"; 271 String res = "-2837462783428374767845615168483972194300564226167553532"; 272 BigInteger aNumber = new BigInteger(numA); 273 BigInteger bNumber = new BigInteger(numB); 274 BigInteger result = aNumber.xor(bNumber); 275 assertTrue(res.equals(result.toString())); 276 } 277 } 278