1 package serp.bytecode;
2
3 import junit.framework.*;
4 import junit.textui.*;
5
6
7
8
9
10
11 public class TestStoreInstruction extends TestCase {
12 private Code _code = new Code();
13
14 public TestStoreInstruction(String test) {
15 super(test);
16 }
17
18
19
20
21 public void testInitialize() {
22 assertEquals(Constants.NOP, _code.xstore().getOpcode());
23 assertNull(_code.xstore().getType());
24 assertEquals(Constants.NOP, _code.istore().getOpcode());
25 assertEquals(int.class, _code.istore().getType());
26 assertEquals(Constants.NOP, _code.lstore().getOpcode());
27 assertEquals(long.class, _code.lstore().getType());
28 assertEquals(Constants.NOP, _code.fstore().getOpcode());
29 assertEquals(float.class, _code.fstore().getType());
30 assertEquals(Constants.NOP, _code.dstore().getOpcode());
31 assertEquals(double.class, _code.dstore().getType());
32 assertEquals(Constants.NOP, _code.astore().getOpcode());
33 assertEquals(Object.class, _code.astore().getType());
34 }
35
36
37
38
39 public void testGetType() {
40 StoreInstruction ins = _code.xstore();
41 assertNull(ins.getType());
42 assertEquals(-1, ins.getLocal());
43
44 ins = _code.istore();
45 assertEquals(int.class, ins.getType());
46 assertEquals(int.class, ins.setLocal(1).getType());
47 assertEquals(int.class, ins.setLocal(2).getType());
48 assertEquals(int.class, ins.setLocal(3).getType());
49 assertEquals(int.class, ins.setLocal(100).getType());
50
51 ins = _code.lstore();
52 assertEquals(long.class, ins.getType());
53 assertEquals(long.class, ins.setLocal(1).getType());
54 assertEquals(long.class, ins.setLocal(2).getType());
55 assertEquals(long.class, ins.setLocal(3).getType());
56 assertEquals(long.class, ins.setLocal(100).getType());
57
58 ins = _code.fstore();
59 assertEquals(float.class, ins.getType());
60 assertEquals(float.class, ins.setLocal(1).getType());
61 assertEquals(float.class, ins.setLocal(2).getType());
62 assertEquals(float.class, ins.setLocal(3).getType());
63 assertEquals(float.class, ins.setLocal(100).getType());
64
65 ins = _code.dstore();
66 assertEquals(double.class, ins.getType());
67 assertEquals(double.class, ins.setLocal(1).getType());
68 assertEquals(double.class, ins.setLocal(2).getType());
69 assertEquals(double.class, ins.setLocal(3).getType());
70 assertEquals(double.class, ins.setLocal(100).getType());
71
72 ins = _code.astore();
73 assertEquals(Object.class, ins.getType());
74 assertEquals(Object.class, ins.setLocal(1).getType());
75 assertEquals(Object.class, ins.setLocal(2).getType());
76 assertEquals(Object.class, ins.setLocal(3).getType());
77 assertEquals(Object.class, ins.setLocal(100).getType());
78 }
79
80
81
82
83
84 public void testOpcodeMorph() {
85 StoreInstruction ins = _code.xstore();
86
87 assertEquals(Constants.NOP, ins.getOpcode());
88 assertEquals(Constants.NOP, ins.setType(int.class).getOpcode());
89 assertEquals(Constants.ISTORE, ins.setLocal(10).getOpcode());
90 assertEquals(Constants.ISTORE, ins.setType(boolean.class).getOpcode());
91 assertEquals(Constants.ISTORE, ins.setType(byte.class).getOpcode());
92 assertEquals(Constants.ISTORE, ins.setType(char.class).getOpcode());
93 assertEquals(Constants.ISTORE, ins.setType(short.class).getOpcode());
94 assertEquals(Constants.ISTORE0, ins.setLocal(0).getOpcode());
95 assertEquals(0, ins.getLocal());
96 assertEquals(Constants.ISTORE1, ins.setLocal(1).getOpcode());
97 assertEquals(1, ins.getLocal());
98 assertEquals(Constants.ISTORE2, ins.setLocal(2).getOpcode());
99 assertEquals(2, ins.getLocal());
100 assertEquals(Constants.ISTORE3, ins.setLocal(3).getOpcode());
101 assertEquals(3, ins.getLocal());
102 assertEquals(Constants.ISTORE, ins.setLocal(4).getOpcode());
103 assertEquals(4, ins.getLocal());
104
105 assertEquals(Constants.LSTORE, ins.setType(long.class).getOpcode());
106 assertEquals(Constants.LSTORE0, ins.setLocal(0).getOpcode());
107 assertEquals(0, ins.getLocal());
108 assertEquals(Constants.LSTORE1, ins.setLocal(1).getOpcode());
109 assertEquals(1, ins.getLocal());
110 assertEquals(Constants.LSTORE2, ins.setLocal(2).getOpcode());
111 assertEquals(2, ins.getLocal());
112 assertEquals(Constants.LSTORE3, ins.setLocal(3).getOpcode());
113 assertEquals(3, ins.getLocal());
114 assertEquals(Constants.LSTORE, ins.setLocal(4).getOpcode());
115 assertEquals(4, ins.getLocal());
116
117 assertEquals(Constants.FSTORE, ins.setType(float.class).getOpcode());
118 assertEquals(Constants.FSTORE0, ins.setLocal(0).getOpcode());
119 assertEquals(0, ins.getLocal());
120 assertEquals(Constants.FSTORE1, ins.setLocal(1).getOpcode());
121 assertEquals(1, ins.getLocal());
122 assertEquals(Constants.FSTORE2, ins.setLocal(2).getOpcode());
123 assertEquals(2, ins.getLocal());
124 assertEquals(Constants.FSTORE3, ins.setLocal(3).getOpcode());
125 assertEquals(3, ins.getLocal());
126 assertEquals(Constants.FSTORE, ins.setLocal(4).getOpcode());
127 assertEquals(4, ins.getLocal());
128
129 assertEquals(Constants.DSTORE, ins.setType(double.class).getOpcode());
130 assertEquals(Constants.DSTORE0, ins.setLocal(0).getOpcode());
131 assertEquals(0, ins.getLocal());
132 assertEquals(Constants.DSTORE1, ins.setLocal(1).getOpcode());
133 assertEquals(1, ins.getLocal());
134 assertEquals(Constants.DSTORE2, ins.setLocal(2).getOpcode());
135 assertEquals(2, ins.getLocal());
136 assertEquals(Constants.DSTORE3, ins.setLocal(3).getOpcode());
137 assertEquals(3, ins.getLocal());
138 assertEquals(Constants.DSTORE, ins.setLocal(4).getOpcode());
139 assertEquals(4, ins.getLocal());
140
141 assertEquals(Constants.ASTORE, ins.setType(Object.class).getOpcode());
142 assertEquals(Constants.ASTORE, ins.setType(String.class).getOpcode());
143 assertEquals(Constants.ASTORE0, ins.setLocal(0).getOpcode());
144 assertEquals(0, ins.getLocal());
145 assertEquals(Constants.ASTORE1, ins.setLocal(1).getOpcode());
146 assertEquals(1, ins.getLocal());
147 assertEquals(Constants.ASTORE2, ins.setLocal(2).getOpcode());
148 assertEquals(2, ins.getLocal());
149 assertEquals(Constants.ASTORE3, ins.setLocal(3).getOpcode());
150 assertEquals(3, ins.getLocal());
151 assertEquals(Constants.ASTORE, ins.setLocal(4).getOpcode());
152 assertEquals(4, ins.getLocal());
153 }
154
155 public static Test suite() {
156 return new TestSuite(TestStoreInstruction.class);
157 }
158
159 public static void main(String[] args) {
160 TestRunner.run(suite());
161 }
162 }