Home | History | Annotate | Download | only in math
      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