Home | History | Annotate | Download | only in rem_long
      1 /*
      2  * Copyright (C) 2008 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package dot.junit.opcodes.rem_long;
     18 
     19 import dot.junit.DxTestCase;
     20 import dot.junit.DxUtil;
     21 import dot.junit.opcodes.rem_long.d.T_rem_long_1;
     22 import dot.junit.opcodes.rem_long.d.T_rem_long_3;
     23 
     24 public class Test_rem_long extends DxTestCase {
     25 
     26     /**
     27      * @title Arguments = 10000000000l, 4000000000l
     28      */
     29     public void testN1() {
     30         T_rem_long_1 t = new T_rem_long_1();
     31         assertEquals(2000000000l, t.run(10000000000l, 4000000000l));
     32     }
     33 
     34     /**
     35      * @title Arguments = 1234567890123l, 123456789l
     36      */
     37     public void testN2() {
     38         T_rem_long_1 t = new T_rem_long_1();
     39         assertEquals(123l, t.run(1234567890123l, 123456789l));
     40     }
     41 
     42     /**
     43      * @title Dividend = 0
     44      */
     45     public void testN3() {
     46         T_rem_long_1 t = new T_rem_long_1();
     47         assertEquals(0l, t.run(0l, 1234567890123l));
     48     }
     49 
     50     /**
     51      * @title Dividend is negative
     52      */
     53     public void testN4() {
     54         T_rem_long_1 t = new T_rem_long_1();
     55         assertEquals(-2000000000l, t.run(-10000000000l, 4000000000l));
     56     }
     57 
     58     /**
     59      * @title Divisor is negative
     60      */
     61     public void testN5() {
     62         T_rem_long_1 t = new T_rem_long_1();
     63         assertEquals(2000000000l, t.run(10000000000l, -4000000000l));
     64     }
     65 
     66     /**
     67      * @title Both Dividend and divisor are negative
     68      */
     69     public void testN6() {
     70         T_rem_long_1 t = new T_rem_long_1();
     71         assertEquals(-2000000000l, t.run(-10000000000l, -4000000000l));
     72     }
     73 
     74     /**
     75      * @title Types of arguments - double, long. Dalvik doens't distinguish 64-bits types internally,
     76      * so this operation of double and long makes no sense but shall not crash the VM.
     77      */
     78     public void testN7() {
     79         T_rem_long_3 t = new T_rem_long_3();
     80         try {
     81             t.run(500000l, 1.05d);
     82         } catch (Throwable e) {
     83         }
     84     }
     85 
     86     /**
     87      * @title Arguments = Long.MIN_VALUE, -1l
     88      */
     89     public void testB1() {
     90         T_rem_long_1 t = new T_rem_long_1();
     91         assertEquals(0l, t.run(Long.MIN_VALUE, -1l));
     92     }
     93 
     94     /**
     95      * @title Arguments = Long.MIN_VALUE, 1l
     96      */
     97     public void testB2() {
     98         T_rem_long_1 t = new T_rem_long_1();
     99         assertEquals(0l, t.run(Long.MIN_VALUE, 1l));
    100     }
    101 
    102     /**
    103      * @title Arguments = Long.MAX_VALUE, 1l
    104      */
    105     public void testB3() {
    106         T_rem_long_1 t = new T_rem_long_1();
    107         assertEquals(0l, t.run(Long.MAX_VALUE, 1l));
    108     }
    109 
    110     /**
    111      * @title Arguments = Long.MIN_VALUE, Long.MAX_VALUE
    112      */
    113     public void testB4() {
    114         T_rem_long_1 t = new T_rem_long_1();
    115         assertEquals(-1l, t.run(Long.MIN_VALUE, Long.MAX_VALUE));
    116     }
    117 
    118     /**
    119      * @title Arguments = 1l, Long.MAX_VALUE
    120      */
    121     public void testB5() {
    122         T_rem_long_1 t = new T_rem_long_1();
    123         assertEquals(1l, t.run(1l, Long.MAX_VALUE));
    124     }
    125 
    126     /**
    127      * @title Arguments = 1l, Long.MIN_VALUE
    128      */
    129     public void testB6() {
    130         T_rem_long_1 t = new T_rem_long_1();
    131         assertEquals(1l, t.run(1l, Long.MIN_VALUE));
    132     }
    133 
    134     /**
    135      * @title Divisor is 0
    136      */
    137     public void testE1() {
    138         T_rem_long_1 t = new T_rem_long_1();
    139         try {
    140             t.run(1234567890123l, 0l);
    141             fail("expected ArithmeticException");
    142         } catch (ArithmeticException ae) {
    143             // expected
    144         }
    145     }
    146 
    147     /**
    148      * @constraint A24
    149      * @title number of registers
    150      */
    151     public void testVFE1() {
    152         try {
    153             Class.forName("dot.junit.opcodes.rem_long.d.T_rem_long_2");
    154             fail("expected a verification exception");
    155         } catch (Throwable t) {
    156             DxUtil.checkVerifyException(t);
    157         }
    158     }
    159 
    160 
    161 
    162     /**
    163      * @constraint B1
    164      * @title types of arguments - int, long
    165      */
    166     public void testVFE2() {
    167         try {
    168             Class.forName("dot.junit.opcodes.rem_long.d.T_rem_long_4");
    169             fail("expected a verification exception");
    170         } catch (Throwable t) {
    171             DxUtil.checkVerifyException(t);
    172         }
    173     }
    174 
    175     /**
    176      * @constraint B1
    177      * @title types of arguments - long, float
    178      */
    179     public void testVFE3() {
    180         try {
    181             Class.forName("dot.junit.opcodes.rem_long.d.T_rem_long_5");
    182             fail("expected a verification exception");
    183         } catch (Throwable t) {
    184             DxUtil.checkVerifyException(t);
    185         }
    186     }
    187 
    188     /**
    189      * @constraint B1
    190      * @title types of arguments - reference, long
    191      */
    192     public void testVFE4() {
    193         try {
    194             Class.forName("dot.junit.opcodes.rem_long.d.T_rem_long_6");
    195             fail("expected a verification exception");
    196         } catch (Throwable t) {
    197             DxUtil.checkVerifyException(t);
    198         }
    199     }
    200 
    201 }
    202