Commit | Line | Data |
---|---|---|
866e5b51 FC |
1 | package org.eclipse.linuxtools.ctf.core.tests.io; |
2 | ||
3 | import static org.junit.Assert.assertEquals; | |
4 | ||
5 | import java.nio.ByteBuffer; | |
6 | import java.nio.ByteOrder; | |
7 | ||
ce2388e0 | 8 | import org.eclipse.linuxtools.internal.ctf.core.event.io.BitBuffer; |
866e5b51 FC |
9 | import org.junit.After; |
10 | import org.junit.Before; | |
11 | import org.junit.Test; | |
12 | ||
13 | /** | |
14 | * Part of the BitBuffet tests with test the methods to read/write integers. | |
15 | * These are separated from the main file because the fixture is different. | |
8b8e48ed | 16 | * |
866e5b51 | 17 | * @author alexmont |
8b8e48ed | 18 | * |
866e5b51 FC |
19 | */ |
20 | public class BitBufferIntTest { | |
21 | ||
22 | private BitBuffer fixture; | |
23 | ||
24 | /** | |
25 | * Launch the test. | |
8b8e48ed | 26 | * |
866e5b51 FC |
27 | * @param args |
28 | * the command line arguments | |
29 | */ | |
30 | public static void main(String[] args) { | |
31 | new org.junit.runner.JUnitCore().run(BitBufferTest.class); | |
32 | } | |
33 | ||
34 | /** | |
35 | * Perform pre-test initialization. | |
36 | */ | |
37 | @Before | |
38 | public void setUp() { | |
39 | fixture = new BitBuffer(java.nio.ByteBuffer.allocateDirect(128)); | |
40 | fixture.setByteOrder(ByteOrder.BIG_ENDIAN); | |
41 | createBuffer(fixture); | |
42 | } | |
43 | ||
44 | /** | |
45 | * Perform post-test clean-up. | |
46 | */ | |
47 | @After | |
48 | public void tearDown() { | |
49 | // Add additional tear down code here | |
50 | } | |
51 | ||
52 | private static void createBuffer(BitBuffer fixture) { | |
53 | createBuffer(fixture, 16); | |
54 | } | |
55 | ||
56 | private static void createBuffer(BitBuffer fixture, int j) { | |
57 | byte[] bytes = new byte[j]; | |
58 | for (int i = 0; i < j; i++) { | |
59 | bytes[i] = (byte) (i % 0xff); | |
60 | } | |
61 | fixture.setByteBuffer(ByteBuffer.wrap(bytes)); | |
62 | fixture.position(1); | |
63 | } | |
64 | ||
65 | /** | |
66 | * Run the int getInt() method test. | |
67 | */ | |
68 | @Test | |
69 | public void testGetInt_base() { | |
70 | int result = fixture.getInt(); | |
71 | assertEquals(0x020406, result); | |
72 | } | |
73 | ||
74 | /** | |
75 | * Run the int getInt(int) method test. | |
76 | */ | |
77 | @Test | |
78 | public void testGetInt_pos0() { | |
79 | fixture.position(0); | |
80 | int result = fixture.getInt(); | |
81 | assertEquals(0x010203, result); | |
82 | } | |
83 | ||
84 | /** | |
85 | * Run the int getInt(int,boolean) method test. | |
86 | */ | |
87 | @Test | |
88 | public void testGetInt_pos1() { | |
89 | fixture.position(1); | |
90 | int length = 1; | |
91 | boolean signed = true; | |
92 | ||
93 | int result = fixture.getInt(length, signed); | |
94 | assertEquals(0, result); | |
95 | } | |
96 | ||
97 | /** | |
98 | * Run the int getInt(int,boolean) method test. | |
99 | */ | |
100 | @Test | |
101 | public void testGetInt_pos2() { | |
102 | fixture.position(2); | |
103 | int length = 0; | |
104 | boolean signed = true; | |
105 | ||
106 | int result = fixture.getInt(length, signed); | |
107 | assertEquals(0, result); | |
108 | } | |
109 | ||
110 | /** | |
111 | * Run the int getInt(int,int,boolean) method test. | |
112 | */ | |
113 | @Test | |
114 | public void testGetInt_signed() { | |
115 | fixture.position(1); | |
866e5b51 FC |
116 | int length = 0; |
117 | boolean signed = true; | |
118 | ||
8b8e48ed | 119 | int result = fixture.getInt(length, signed); |
866e5b51 FC |
120 | assertEquals(0, result); |
121 | } | |
122 | ||
123 | /** | |
124 | * Run the int getInt(int,int,boolean) method test. | |
125 | */ | |
126 | @Test | |
127 | public void testGetInt_signed_length1() { | |
128 | fixture.position(1); | |
866e5b51 FC |
129 | int length = 1; |
130 | boolean signed = true; | |
131 | ||
8b8e48ed | 132 | int result = fixture.getInt(length, signed); |
866e5b51 FC |
133 | assertEquals(0, result); |
134 | } | |
135 | ||
136 | /** | |
137 | * Run the int getInt(int,int,boolean) method test with a little-endian | |
138 | * BitBuffer. | |
139 | */ | |
140 | @Test | |
141 | public void testGetInt_le1() { | |
142 | BitBuffer le_fixture = new BitBuffer( | |
143 | java.nio.ByteBuffer.allocateDirect(128)); | |
144 | le_fixture.setByteOrder(ByteOrder.LITTLE_ENDIAN); | |
145 | createBuffer(le_fixture); | |
146 | le_fixture.position(1); | |
866e5b51 | 147 | int length = 24; |
8b8e48ed | 148 | int result = le_fixture.getInt(length, false); |
866e5b51 FC |
149 | |
150 | /* 0x020100 downshifted */ | |
151 | assertEquals(0x810080, result); | |
152 | } | |
153 | ||
154 | /** | |
155 | * Run the int getInt(int,int,boolean) method test with a little-endian | |
156 | * BitBuffer. | |
157 | */ | |
158 | @Test | |
159 | public void testGetInt_le2() { | |
160 | BitBuffer le_fixture = new BitBuffer( | |
161 | java.nio.ByteBuffer.allocateDirect(128)); | |
162 | le_fixture.setByteOrder(ByteOrder.LITTLE_ENDIAN); | |
163 | createBuffer(le_fixture); | |
164 | le_fixture.position(0); | |
866e5b51 | 165 | int length = 24; |
8b8e48ed | 166 | int result = le_fixture.getInt(length, false); |
866e5b51 FC |
167 | assertEquals(0x020100, result); |
168 | } | |
169 | ||
170 | /** | |
171 | * Run the int getInt(int,boolean) method test and expect an overflow. | |
172 | */ | |
173 | @Test(expected = java.nio.BufferOverflowException.class) | |
174 | public void testGetInt_invalid() { | |
175 | BitBuffer small_fixture = new BitBuffer( | |
176 | java.nio.ByteBuffer.allocateDirect(128)); | |
177 | small_fixture.setByteOrder(ByteOrder.BIG_ENDIAN); | |
178 | createBuffer(small_fixture, 2); | |
179 | small_fixture.position(10); | |
180 | int length = 32; | |
181 | boolean signed = true; | |
182 | ||
183 | int result = small_fixture.getInt(length, signed); | |
184 | assertEquals(0, result); | |
185 | } | |
186 | ||
187 | /** | |
188 | * Run the int getInt(int,int,boolean) method test and expect an overflow. | |
189 | */ | |
190 | @Test(expected = java.nio.BufferOverflowException.class) | |
191 | public void testGetInt_invalid2() { | |
192 | BitBuffer small_fixture = new BitBuffer( | |
193 | java.nio.ByteBuffer.allocateDirect(128)); | |
194 | small_fixture.setByteOrder(ByteOrder.BIG_ENDIAN); | |
195 | createBuffer(small_fixture, 2); | |
196 | small_fixture.position(1); | |
866e5b51 FC |
197 | int length = 64; |
198 | boolean signed = true; | |
199 | ||
8b8e48ed | 200 | int result = small_fixture.getInt(length, signed); |
866e5b51 FC |
201 | assertEquals(0, result); |
202 | } | |
203 | ||
204 | /** | |
205 | * Run the void putInt(int) method test. | |
206 | */ | |
207 | @Test | |
208 | public void testPutInt() { | |
209 | int value = 1; | |
210 | fixture.position(1); | |
211 | fixture.putInt(value); | |
212 | } | |
213 | ||
214 | /** | |
215 | * Run the void putInt(int,int,boolean) method test. | |
216 | */ | |
217 | @Test | |
218 | public void testPutInt_signed() { | |
219 | int length = 1; | |
220 | int value = 1; | |
221 | ||
222 | fixture.position(1); | |
223 | fixture.putInt(length, value); | |
224 | } | |
225 | ||
226 | /** | |
227 | * Run the void putInt(int,int,int,boolean) method test. | |
228 | */ | |
229 | @Test | |
230 | public void testPutInt_length0() { | |
866e5b51 FC |
231 | int length = 0; |
232 | int value = 1; | |
233 | ||
234 | fixture.position(1); | |
8b8e48ed | 235 | fixture.putInt(length, value); |
866e5b51 FC |
236 | } |
237 | ||
238 | /** | |
239 | * Run the void putInt(int,int,int,boolean) method test. | |
240 | */ | |
241 | @Test | |
242 | public void testPutInt_length1() { | |
866e5b51 FC |
243 | int length = 1; |
244 | int value = 1; | |
245 | ||
246 | fixture.position(1); | |
8b8e48ed | 247 | fixture.putInt(length, value); |
866e5b51 FC |
248 | } |
249 | ||
250 | /** | |
251 | * Run the void putInt(int) method test. | |
252 | */ | |
253 | @Test | |
254 | public void testPutInt_hex() { | |
8b8e48ed MK |
255 | final int value = 0x010203; |
256 | int read; | |
866e5b51 | 257 | |
8b8e48ed MK |
258 | for (int i = 0; i <= 32; i++) { |
259 | fixture.position(i); | |
260 | fixture.putInt(value); | |
261 | ||
262 | fixture.position(i); | |
263 | read = fixture.getInt(); | |
264 | ||
265 | assertEquals(value, read); | |
266 | } | |
866e5b51 FC |
267 | } |
268 | ||
269 | /** | |
270 | * Run the void putInt(int,int,int,boolean) method test. | |
271 | */ | |
272 | @Test(expected = java.nio.BufferOverflowException.class) | |
273 | public void testPutInt_invalid() { | |
274 | BitBuffer fixture2; | |
275 | fixture2 = new BitBuffer(java.nio.ByteBuffer.allocateDirect(128)); | |
276 | fixture2.setByteOrder(ByteOrder.BIG_ENDIAN); | |
277 | createBuffer(fixture2, 4); | |
278 | fixture2.position(1); | |
279 | ||
866e5b51 FC |
280 | int length = 32; |
281 | int value = 1; | |
282 | ||
8b8e48ed | 283 | fixture2.putInt(length, value); |
866e5b51 FC |
284 | |
285 | int read = fixture2.getInt(1, true); | |
286 | assertEquals(value, read); | |
287 | } | |
288 | } |