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: subtract
     29  */
     30 public class BigIntegerSubtractTest extends TestCase {
     31     /**
     32      * Subtract two positive numbers of the same length.
     33      * The first is greater.
     34      */
     35     public void testCase1() {
     36         byte aBytes[] = {10, 20, 30, 40, 50, 60, 70, 10, 20, 30};
     37         byte bBytes[] = {1, 2, 3, 4, 5, 6, 7, 1, 2, 3};
     38         int aSign = 1;
     39         int bSign = 1;
     40         byte rBytes[] = {9, 18, 27, 36, 45, 54, 63, 9, 18, 27};
     41         BigInteger aNumber = new BigInteger(aSign, aBytes);
     42         BigInteger bNumber = new BigInteger(bSign, bBytes);
     43         BigInteger result = aNumber.subtract(bNumber);
     44         byte resBytes[] = new byte[rBytes.length];
     45         resBytes = result.toByteArray();
     46         for(int i = 0; i < resBytes.length; i++) {
     47             assertTrue(resBytes[i] == rBytes[i]);
     48         }
     49         assertEquals(1, result.signum());
     50     }
     51 
     52     /**
     53      * Subtract two positive numbers of the same length.
     54      * The second is greater.
     55      */
     56     public void testCase2() {
     57         byte aBytes[] = {1, 2, 3, 4, 5, 6, 7, 1, 2, 3};
     58         byte bBytes[] = {10, 20, 30, 40, 50, 60, 70, 10, 20, 30};
     59         int aSign = 1;
     60         int bSign = 1;
     61         byte rBytes[] = {-10, -19, -28, -37, -46, -55, -64, -10, -19, -27};
     62         BigInteger aNumber = new BigInteger(aSign, aBytes);
     63         BigInteger bNumber = new BigInteger(bSign, bBytes);
     64         BigInteger result = aNumber.subtract(bNumber);
     65         byte resBytes[] = new byte[rBytes.length];
     66         resBytes = result.toByteArray();
     67         for(int i = 0; i < resBytes.length; i++) {
     68             assertTrue(resBytes[i] == rBytes[i]);
     69         }
     70         assertEquals(-1, result.signum());
     71     }
     72 
     73     /**
     74      * Subtract two numbers of the same length and different signs.
     75      * The first is positive.
     76      * The first is greater in absolute value.
     77      */
     78     public void testCase3() {
     79         byte aBytes[] = {10, 20, 30, 40, 50, 60, 70, 10, 20, 30};
     80         byte bBytes[] = {1, 2, 3, 4, 5, 6, 7, 1, 2, 3};
     81         int aSign = 1;
     82         int bSign = -1;
     83         byte rBytes[] = {11, 22, 33, 44, 55, 66, 77, 11, 22, 33};
     84         BigInteger aNumber = new BigInteger(aSign, aBytes);
     85         BigInteger bNumber = new BigInteger(bSign, bBytes);
     86         BigInteger result = aNumber.subtract(bNumber);
     87         byte resBytes[] = new byte[rBytes.length];
     88         resBytes = result.toByteArray();
     89         for(int i = 0; i < resBytes.length; i++) {
     90             assertTrue(resBytes[i] == rBytes[i]);
     91         }
     92         assertEquals(1, result.signum());
     93     }
     94 
     95     /**
     96      * Subtract two numbers of the same length and different signs.
     97      * The first is positive.
     98      * The second is greater in absolute value.
     99      */
    100     public void testCase4() {
    101         byte aBytes[] = {1, 2, 3, 4, 5, 6, 7, 1, 2, 3};
    102         byte bBytes[] = {10, 20, 30, 40, 50, 60, 70, 10, 20, 30};
    103         int aSign = 1;
    104         int bSign = -1;
    105         byte rBytes[] = {11, 22, 33, 44, 55, 66, 77, 11, 22, 33};
    106         BigInteger aNumber = new BigInteger(aSign, aBytes);
    107         BigInteger bNumber = new BigInteger(bSign, bBytes);
    108         BigInteger result = aNumber.subtract(bNumber);
    109         byte resBytes[] = new byte[rBytes.length];
    110         resBytes = result.toByteArray();
    111         for(int i = 0; i < resBytes.length; i++) {
    112             assertTrue(resBytes[i] == rBytes[i]);
    113         }
    114         assertEquals(1, result.signum());
    115     }
    116 
    117     /**
    118      * Subtract two negative numbers of the same length.
    119      * The first is greater in absolute value.
    120      */
    121     public void testCase5() {
    122         byte aBytes[] = {10, 20, 30, 40, 50, 60, 70, 10, 20, 30};
    123         byte bBytes[] = {1, 2, 3, 4, 5, 6, 7, 1, 2, 3};
    124         int aSign = -1;
    125         int bSign = -1;
    126         byte rBytes[] = {-10, -19, -28, -37, -46, -55, -64, -10, -19, -27};
    127         BigInteger aNumber = new BigInteger(aSign, aBytes);
    128         BigInteger bNumber = new BigInteger(bSign, bBytes);
    129         BigInteger result = aNumber.subtract(bNumber);
    130         byte resBytes[] = new byte[rBytes.length];
    131         resBytes = result.toByteArray();
    132         for(int i = 0; i < resBytes.length; i++) {
    133             assertTrue(resBytes[i] == rBytes[i]);
    134         }
    135         assertEquals(-1, result.signum());
    136     }
    137 
    138     /**
    139      * Subtract two negative numbers of the same length.
    140      * The second is greater in absolute value.
    141      */
    142     public void testCase6() {
    143         byte aBytes[] = {1, 2, 3, 4, 5, 6, 7, 1, 2, 3};
    144         byte bBytes[] = {10, 20, 30, 40, 50, 60, 70, 10, 20, 30};
    145         int aSign = -1;
    146         int bSign = -1;
    147         byte rBytes[] = {9, 18, 27, 36, 45, 54, 63, 9, 18, 27};
    148         BigInteger aNumber = new BigInteger(aSign, aBytes);
    149         BigInteger bNumber = new BigInteger(bSign, bBytes);
    150         BigInteger result = aNumber.subtract(bNumber);
    151         byte resBytes[] = new byte[rBytes.length];
    152         resBytes = result.toByteArray();
    153         for(int i = 0; i < resBytes.length; i++) {
    154             assertTrue(resBytes[i] == rBytes[i]);
    155         }
    156         assertEquals(1, result.signum());
    157     }
    158 
    159     /**
    160      * Subtract two numbers of the same length and different signs.
    161      * The first is negative.
    162      * The first is greater in absolute value.
    163      */
    164     public void testCase7() {
    165         byte aBytes[] = {10, 20, 30, 40, 50, 60, 70, 10, 20, 30};
    166         byte bBytes[] = {1, 2, 3, 4, 5, 6, 7, 1, 2, 3};
    167         int aSign = -1;
    168         int bSign = 1;
    169         byte rBytes[] = {-12, -23, -34, -45, -56, -67, -78, -12, -23, -33};
    170         BigInteger aNumber = new BigInteger(aSign, aBytes);
    171         BigInteger bNumber = new BigInteger(bSign, bBytes);
    172         BigInteger result = aNumber.subtract(bNumber);
    173         byte resBytes[] = new byte[rBytes.length];
    174         resBytes = result.toByteArray();
    175         for(int i = 0; i < resBytes.length; i++) {
    176             assertTrue(resBytes[i] == rBytes[i]);
    177         }
    178         assertEquals(-1, result.signum());
    179     }
    180 
    181     /**
    182      * Subtract two numbers of the same length and different signs.
    183      * The first is negative.
    184      * The second is greater in absolute value.
    185      */
    186     public void testCase8() {
    187         byte aBytes[] = {1, 2, 3, 4, 5, 6, 7, 1, 2, 3};
    188         byte bBytes[] = {10, 20, 30, 40, 50, 60, 70, 10, 20, 30};
    189         int aSign = -1;
    190         int bSign = 1;
    191         byte rBytes[] = {-12, -23, -34, -45, -56, -67, -78, -12, -23, -33};
    192         BigInteger aNumber = new BigInteger(aSign, aBytes);
    193         BigInteger bNumber = new BigInteger(bSign, bBytes);
    194         BigInteger result = aNumber.subtract(bNumber);
    195         byte resBytes[] = new byte[rBytes.length];
    196         resBytes = result.toByteArray();
    197         for(int i = 0; i < resBytes.length; i++) {
    198             assertTrue(resBytes[i] == rBytes[i]);
    199         }
    200         assertEquals(-1, result.signum());
    201     }
    202 
    203     /**
    204      * Subtract two positive numbers of different length.
    205      * The first is longer.
    206      */
    207     public void testCase9() {
    208         byte aBytes[] = {1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7};
    209         byte bBytes[] = {10, 20, 30, 40, 50, 60, 70, 10, 20, 30};
    210         int aSign = 1;
    211         int bSign = 1;
    212         byte rBytes[] = {1, 2, 3, 3, -6, -15, -24, -40, -49, -58, -67, -6, -15, -23};
    213         BigInteger aNumber = new BigInteger(aSign, aBytes);
    214         BigInteger bNumber = new BigInteger(bSign, bBytes);
    215         BigInteger result = aNumber.subtract(bNumber);
    216         byte resBytes[] = new byte[rBytes.length];
    217         resBytes = result.toByteArray();
    218         for(int i = 0; i < resBytes.length; i++) {
    219             assertTrue(resBytes[i] == rBytes[i]);
    220         }
    221         assertEquals(1, result.signum());
    222     }
    223 
    224     /**
    225      * Subtract two positive numbers of different length.
    226      * The second is longer.
    227      */
    228     public void testCase10() {
    229         byte aBytes[] = {10, 20, 30, 40, 50, 60, 70, 10, 20, 30};
    230         byte bBytes[] = {1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7};
    231         int aSign = 1;
    232         int bSign = 1;
    233         byte rBytes[] = {-2, -3, -4, -4, 5, 14, 23, 39, 48, 57, 66, 5, 14, 23};
    234         BigInteger aNumber = new BigInteger(aSign, aBytes);
    235         BigInteger bNumber = new BigInteger(bSign, bBytes);
    236         BigInteger result = aNumber.subtract(bNumber);
    237         byte resBytes[] = new byte[rBytes.length];
    238         resBytes = result.toByteArray();
    239         for(int i = 0; i < resBytes.length; i++) {
    240             assertTrue(resBytes[i] == rBytes[i]);
    241         }
    242         assertEquals(-1, result.signum());
    243     }
    244 
    245     /**
    246      * Subtract two numbers of different length and different signs.
    247      * The first is positive.
    248      * The first is greater in absolute value.
    249      */
    250     public void testCase11() {
    251         byte aBytes[] = {1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7};
    252         byte bBytes[] = {10, 20, 30, 40, 50, 60, 70, 10, 20, 30};
    253         int aSign = 1;
    254         int bSign = -1;
    255         byte rBytes[] = {1, 2, 3, 4, 15, 26, 37, 41, 52, 63, 74, 15, 26, 37};
    256         BigInteger aNumber = new BigInteger(aSign, aBytes);
    257         BigInteger bNumber = new BigInteger(bSign, bBytes);
    258         BigInteger result = aNumber.subtract(bNumber);
    259         byte resBytes[] = new byte[rBytes.length];
    260         resBytes = result.toByteArray();
    261         for(int i = 0; i < resBytes.length; i++) {
    262             assertTrue(resBytes[i] == rBytes[i]);
    263         }
    264         assertEquals(1, result.signum());
    265     }
    266 
    267     /**
    268      * Subtract two numbers of the same length and different signs.
    269      * The first is positive.
    270      * The second is greater in absolute value.
    271      */
    272     public void testCase12() {
    273         byte aBytes[] = {10, 20, 30, 40, 50, 60, 70, 10, 20, 30};
    274         byte bBytes[] = {1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7};
    275         int aSign = 1;
    276         int bSign = -1;
    277         byte rBytes[] = {1, 2, 3, 4, 15, 26, 37, 41, 52, 63, 74, 15, 26, 37};
    278         BigInteger aNumber = new BigInteger(aSign, aBytes);
    279         BigInteger bNumber = new BigInteger(bSign, bBytes);
    280         BigInteger result = aNumber.subtract(bNumber);
    281         byte resBytes[] = new byte[rBytes.length];
    282         resBytes = result.toByteArray();
    283         for(int i = 0; i < resBytes.length; i++) {
    284             assertTrue(resBytes[i] == rBytes[i]);
    285         }
    286         assertEquals(1, result.signum());
    287     }
    288 
    289     /**
    290      * Subtract two numbers of different length and different signs.
    291      * The first is negative.
    292      * The first is longer.
    293      */
    294     public void testCase13() {
    295         byte aBytes[] = {1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7};
    296         byte bBytes[] = {10, 20, 30, 40, 50, 60, 70, 10, 20, 30};
    297         int aSign = -1;
    298         int bSign = 1;
    299         byte rBytes[] = {-2, -3, -4, -5, -16, -27, -38, -42, -53, -64, -75, -16, -27, -37};
    300         BigInteger aNumber = new BigInteger(aSign, aBytes);
    301         BigInteger bNumber = new BigInteger(bSign, bBytes);
    302         BigInteger result = aNumber.subtract(bNumber);
    303         byte resBytes[] = new byte[rBytes.length];
    304         resBytes = result.toByteArray();
    305         for(int i = 0; i < resBytes.length; i++) {
    306             assertTrue(resBytes[i] == rBytes[i]);
    307         }
    308         assertEquals(-1, result.signum());
    309     }
    310 
    311     /**
    312      * Subtract two numbers of the same length and different signs.
    313      * The first is negative.
    314      * The second is longer.
    315      */
    316     public void testCase14() {
    317         byte aBytes[] = {1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7};
    318         byte bBytes[] = {10, 20, 30, 40, 50, 60, 70, 10, 20, 30};
    319         int aSign = -1;
    320         int bSign = 1;
    321         byte rBytes[] = {-2, -3, -4, -5, -16, -27, -38, -42, -53, -64, -75, -16, -27, -37};
    322         BigInteger aNumber = new BigInteger(aSign, aBytes);
    323         BigInteger bNumber = new BigInteger(bSign, bBytes);
    324         BigInteger result = aNumber.subtract(bNumber);
    325         byte resBytes[] = new byte[rBytes.length];
    326         resBytes = result.toByteArray();
    327         for(int i = 0; i < resBytes.length; i++) {
    328             assertTrue(resBytes[i] == rBytes[i]);
    329         }
    330         assertEquals(-1, result.signum());
    331     }
    332 
    333     /**
    334      * Subtract two negative numbers of different length.
    335      * The first is longer.
    336      */
    337     public void testCase15() {
    338         byte aBytes[] = {1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7};
    339         byte bBytes[] = {10, 20, 30, 40, 50, 60, 70, 10, 20, 30};
    340         int aSign = -1;
    341         int bSign = -1;
    342         byte rBytes[] = {-2, -3, -4, -4, 5, 14, 23, 39, 48, 57, 66, 5, 14, 23};
    343         BigInteger aNumber = new BigInteger(aSign, aBytes);
    344         BigInteger bNumber = new BigInteger(bSign, bBytes);
    345         BigInteger result = aNumber.subtract(bNumber);
    346         byte resBytes[] = new byte[rBytes.length];
    347         resBytes = result.toByteArray();
    348         for(int i = 0; i < resBytes.length; i++) {
    349             assertTrue(resBytes[i] == rBytes[i]);
    350         }
    351         assertEquals(-1, result.signum());
    352 }
    353 
    354     /**
    355      * Subtract two negative numbers of different length.
    356      * The second is longer.
    357      */
    358     public void testCase16() {
    359         byte aBytes[] = {10, 20, 30, 40, 50, 60, 70, 10, 20, 30};
    360         byte bBytes[] = {1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7};
    361         int aSign = -1;
    362         int bSign = -1;
    363         byte rBytes[] = {1, 2, 3, 3, -6, -15, -24, -40, -49, -58, -67, -6, -15, -23};
    364         BigInteger aNumber = new BigInteger(aSign, aBytes);
    365         BigInteger bNumber = new BigInteger(bSign, bBytes);
    366         BigInteger result = aNumber.subtract(bNumber);
    367         byte resBytes[] = new byte[rBytes.length];
    368         resBytes = result.toByteArray();
    369         for(int i = 0; i < resBytes.length; i++) {
    370             assertTrue(resBytes[i] == rBytes[i]);
    371         }
    372         assertEquals(1, result.signum());
    373     }
    374 
    375     /**
    376      * Subtract two positive equal in absolute value numbers.
    377      */
    378     public void testCase17() {
    379         byte aBytes[] = {-120, 34, 78, -23, -111, 45, 127, 23, 45, -3};
    380         byte bBytes[] = {-120, 34, 78, -23, -111, 45, 127, 23, 45, -3};
    381         byte rBytes[] = {0};
    382         int aSign = 1;
    383         int bSign = 1;
    384         BigInteger aNumber = new BigInteger(aSign, aBytes);
    385         BigInteger bNumber = new BigInteger(bSign, bBytes);
    386         BigInteger result = aNumber.subtract(bNumber);
    387         byte resBytes[] = new byte[rBytes.length];
    388         resBytes = result.toByteArray();
    389         for(int i = 0; i < resBytes.length; i++) {
    390             assertTrue(resBytes[i] == rBytes[i]);
    391         }
    392         assertEquals(0, result.signum());
    393     }
    394 
    395     /**
    396      * Subtract zero from a number.
    397      * The number is positive.
    398      */
    399     public void testCase18() {
    400         byte aBytes[] = {120, 34, 78, -23, -111, 45, 127, 23, 45, -3};
    401         byte bBytes[] = {0};
    402         byte rBytes[] = {120, 34, 78, -23, -111, 45, 127, 23, 45, -3};
    403         int aSign = 1;
    404         int bSign = 0;
    405         BigInteger aNumber = new BigInteger(aSign, aBytes);
    406         BigInteger bNumber = new BigInteger(bSign, bBytes);
    407         BigInteger result = aNumber.subtract(bNumber);
    408         byte resBytes[] = new byte[rBytes.length];
    409         resBytes = result.toByteArray();
    410         for(int i = 0; i < resBytes.length; i++) {
    411             assertTrue(resBytes[i] == rBytes[i]);
    412         }
    413         assertEquals(1, result.signum());
    414     }
    415 
    416     /**
    417      * Subtract a number from zero.
    418      * The number is negative.
    419      */
    420     public void testCase19() {
    421         byte aBytes[] = {0};
    422         byte bBytes[] = {120, 34, 78, -23, -111, 45, 127, 23, 45, -3};
    423         byte rBytes[] = {120, 34, 78, -23, -111, 45, 127, 23, 45, -3};
    424         int aSign = 0;
    425         int bSign = -1;
    426         BigInteger aNumber = new BigInteger(aSign, aBytes);
    427         BigInteger bNumber = new BigInteger(bSign, bBytes);
    428         BigInteger result = aNumber.subtract(bNumber);
    429         byte resBytes[] = new byte[rBytes.length];
    430         resBytes = result.toByteArray();
    431         for(int i = 0; i < resBytes.length; i++) {
    432             assertTrue(resBytes[i] == rBytes[i]);
    433         }
    434         assertEquals(1, result.signum());
    435     }
    436 
    437     /**
    438      * Subtract zero from zero.
    439      */
    440     public void testCase20() {
    441         byte aBytes[] = {0};
    442         byte bBytes[] = {0};
    443         byte rBytes[] = {0};
    444         int aSign = 0;
    445         int bSign = 0;
    446         BigInteger aNumber = new BigInteger(aSign, aBytes);
    447         BigInteger bNumber = new BigInteger(bSign, bBytes);
    448         BigInteger result = aNumber.subtract(bNumber);
    449         byte resBytes[] = new byte[rBytes.length];
    450         resBytes = result.toByteArray();
    451         for(int i = 0; i < resBytes.length; i++) {
    452             assertTrue(resBytes[i] == rBytes[i]);
    453         }
    454         assertEquals(0, result.signum());
    455     }
    456 
    457     /**
    458      * Subtract ZERO from a number.
    459      * The number is positive.
    460      */
    461     public void testCase21() {
    462         byte aBytes[] = {120, 34, 78, -23, -111, 45, 127, 23, 45, -3};
    463         byte rBytes[] = {120, 34, 78, -23, -111, 45, 127, 23, 45, -3};
    464         int aSign = 1;
    465         BigInteger aNumber = new BigInteger(aSign, aBytes);
    466         BigInteger bNumber = BigInteger.ZERO;
    467         BigInteger result = aNumber.subtract(bNumber);
    468         byte resBytes[] = new byte[rBytes.length];
    469         resBytes = result.toByteArray();
    470         for(int i = 0; i < resBytes.length; i++) {
    471             assertTrue(resBytes[i] == rBytes[i]);
    472         }
    473         assertEquals(1, result.signum());
    474     }
    475 
    476     /**
    477      * Subtract a number from ZERO.
    478      * The number is negative.
    479      */
    480     public void testCase22() {
    481         byte bBytes[] = {120, 34, 78, -23, -111, 45, 127, 23, 45, -3};
    482         byte rBytes[] = {120, 34, 78, -23, -111, 45, 127, 23, 45, -3};
    483         int bSign = -1;
    484         BigInteger aNumber = BigInteger.ZERO;
    485         BigInteger bNumber = new BigInteger(bSign, bBytes);
    486         BigInteger result = aNumber.subtract(bNumber);
    487         byte resBytes[] = new byte[rBytes.length];
    488         resBytes = result.toByteArray();
    489         for(int i = 0; i < resBytes.length; i++) {
    490             assertTrue(resBytes[i] == rBytes[i]);
    491         }
    492         assertEquals(1, result.signum());
    493     }
    494 
    495     /**
    496      * Subtract ZERO from ZERO.
    497      */
    498     public void testCase23() {
    499         byte rBytes[] = {0};
    500         BigInteger aNumber = BigInteger.ZERO;
    501         BigInteger bNumber = BigInteger.ZERO;
    502         BigInteger result = aNumber.subtract(bNumber);
    503         byte resBytes[] = new byte[rBytes.length];
    504         resBytes = result.toByteArray();
    505         for(int i = 0; i < resBytes.length; i++) {
    506             assertTrue(resBytes[i] == rBytes[i]);
    507         }
    508         assertEquals(0, result.signum());
    509     }
    510 
    511     /**
    512      * Subtract ONE from ONE.
    513      */
    514     public void testCase24() {
    515         byte rBytes[] = {0};
    516         BigInteger aNumber = BigInteger.ONE;
    517         BigInteger bNumber = BigInteger.ONE;
    518         BigInteger result = aNumber.subtract(bNumber);
    519         byte resBytes[] = new byte[rBytes.length];
    520         resBytes = result.toByteArray();
    521         for(int i = 0; i < resBytes.length; i++) {
    522             assertTrue(resBytes[i] == rBytes[i]);
    523         }
    524         assertEquals(0, result.signum());
    525     }
    526 
    527     /**
    528      * Subtract two numbers so that borrow is 1.
    529      */
    530     public void testCase25() {
    531         byte aBytes[] = {-1, -1, -1, -1, -1, -1, -1, -1};
    532         byte bBytes[] = {-128, -128, -128, -128, -128, -128, -128, -128, -128};
    533         int aSign = 1;
    534         int bSign = 1;
    535         byte rBytes[] = {-128, 127, 127, 127, 127, 127, 127, 127, 127};
    536         BigInteger aNumber = new BigInteger(aSign, aBytes);
    537         BigInteger bNumber = new BigInteger(bSign, bBytes);
    538         BigInteger result = aNumber.subtract(bNumber);
    539         byte resBytes[] = new byte[rBytes.length];
    540         resBytes = result.toByteArray();
    541         for(int i = 0; i < resBytes.length; i++) {
    542             assertTrue(resBytes[i] == rBytes[i]);
    543         }
    544         assertEquals(-1, result.signum());
    545     }
    546 }
    547 
    548