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.sparse_switch;
18 
19 import dot.junit.DxTestCase;
20 import dot.junit.DxUtil;
21 import dot.junit.opcodes.sparse_switch.d.T_sparse_switch_1;
22 import dot.junit.opcodes.sparse_switch.d.T_sparse_switch_2
23 ;
24 
25 public class Test_sparse_switch extends DxTestCase {
26 
27     /**
28      * @title try different values
29      */
testN1()30     public void testN1() {
31         T_sparse_switch_1 t = new T_sparse_switch_1();
32         assertEquals(2, t.run(-1));
33 
34         assertEquals(-1, t.run(9));
35         assertEquals(20, t.run(10));
36         assertEquals(-1, t.run(11));
37 
38         assertEquals(-1, t.run(14));
39         assertEquals(20, t.run(15));
40         assertEquals(-1, t.run(16));
41     }
42 
43     /**
44      * @title Argument = Integer.MAX_VALUE
45      */
testB1()46     public void testB1() {
47         T_sparse_switch_1 t = new T_sparse_switch_1();
48         assertEquals(-1, t.run(Integer.MAX_VALUE));
49     }
50 
51     /**
52      * @title Argument = Integer.MIN_VALUE
53      */
testB2()54     public void testB2() {
55         T_sparse_switch_1 t = new T_sparse_switch_1();
56         assertEquals(-1, t.run(Integer.MIN_VALUE));
57     }
58 
59     /**
60      * @title Argument = 0
61      */
testB3()62     public void testB3() {
63         T_sparse_switch_1 t = new T_sparse_switch_1();
64         assertEquals(-1, t.run(0));
65     }
66 
67     /**
68      * @constraint A23
69      * @title number of registers
70      */
testVFE1()71     public void testVFE1() {
72         load("dot.junit.opcodes.sparse_switch.d.T_sparse_switch_3", VerifyError.class);
73     }
74 
75 
76 
77     /**
78      * @constraint B1
79      * @title type of argument - double
80      */
testVFE2()81     public void testVFE2() {
82         load("dot.junit.opcodes.sparse_switch.d.T_sparse_switch_4", VerifyError.class);
83     }
84 
85     /**
86      * @constraint B1
87      * @title  type of argument - long
88      */
testVFE3()89     public void testVFE3() {
90         load("dot.junit.opcodes.sparse_switch.d.T_sparse_switch_5", VerifyError.class);
91     }
92 
93     /**
94      * @constraint B1
95      * @title type of argument - reference
96      */
testVFE4()97     public void testVFE4() {
98         load("dot.junit.opcodes.sparse_switch.d.T_sparse_switch_6", VerifyError.class);
99     }
100 
101     /**
102      * @constraint A8
103      * @title branch target shall be inside the method
104      */
testVFE5()105     public void testVFE5() {
106         load("dot.junit.opcodes.sparse_switch.d.T_sparse_switch_7", VerifyError.class);
107     }
108 
109     /**
110      * @constraint A8
111      * @title branch target shall not be "inside" instruction
112      */
testVFE6()113     public void testVFE6() {
114         load("dot.junit.opcodes.sparse_switch.d.T_sparse_switch_8", VerifyError.class);
115     }
116 
117     /**
118      * @constraint A8
119      * @title offset to table shall be inside method
120      */
testVFE7()121     public void testVFE7() {
122         load("dot.junit.opcodes.sparse_switch.d.T_sparse_switch_9", VerifyError.class);
123     }
124 
125     /**
126      * @constraint B1
127      * @title Types of arguments - float, int. The verifier checks that ints
128      * and floats are not used interchangeably.
129      */
testVFE8()130     public void testVFE8() {
131         load("dot.junit.opcodes.sparse_switch.d.T_sparse_switch_2", VerifyError.class);
132     }
133 
134     /**
135      * @constraint A8
136      * @title pairs shall be sorted in ascending order
137      */
testVFE9()138     public void testVFE9() {
139         load("dot.junit.opcodes.sparse_switch.d.T_sparse_switch_11", VerifyError.class);
140     }
141 
142     /**
143      * @constraint A8
144      * @title number of entries in jump table
145      */
testVFE10()146     public void testVFE10() {
147         load("dot.junit.opcodes.sparse_switch.d.T_sparse_switch_12", VerifyError.class);
148     }
149 
150     /**
151      * @constraint B22
152      * @title sparse-switch-data pseudo-instructions must not be reachable by control flow
153      */
testVFE11()154     public void testVFE11() {
155         load("dot.junit.opcodes.sparse_switch.d.T_sparse_switch_13", VerifyError.class);
156     }
157 
158     /**
159      * @constraint A8
160      * @title table has wrong ident code
161      */
testVFE12()162     public void testVFE12() {
163         load("dot.junit.opcodes.sparse_switch.d.T_sparse_switch_14", VerifyError.class);
164     }
165 }
166