* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
- * Alexandre Montplaisir - Initial API and implementation
- * Matthew Khouzam - additional tests
+ * Alexandre Montplaisir - Extracted from BitBufferTest, cleanup
+ * Matthew Khouzam - Additional tests
*******************************************************************************/
package org.eclipse.linuxtools.ctf.core.tests.io;
import org.junit.Test;
/**
- * Part of the BitBuffer tests which test the methods to read/write integers.
- * These are separated from the main file because the fixture is different.
+ * Part of the {@link BitBuffer} tests which test the methods to read/write
+ * integers. These are separated from the main file because the fixture is
+ * different.
*
* @author Alexandre Montplaisir
*/
}
/**
- * Run the int getInt() method test.
+ * Test {@link BitBuffer#getInt} with a basic value
*
* @throws CTFReaderException
* Not expected
}
/**
- * Run the int getInt(int) method test.
+ * Test {@link BitBuffer#getInt} with explicit seek at pos 0.
*
* @throws CTFReaderException
* Not expected
}
/**
- * Run the int getInt(int,boolean) method test.
+ * Test {@link BitBuffer#get} with seek at pos 1.
*
* @throws CTFReaderException
* Not expected
@Test
public void testGetInt_pos1() throws CTFReaderException {
fixture.position(1);
- int length = 1;
- boolean signed = true;
- long result = fixture.get(length, signed);
+ long result = fixture.get(1, true);
assertEquals(0, result);
}
/**
- * Run the int getInt(int,boolean) method test.
+ * Test {@link BitBuffer#get} with seek at pos 2.
*
* @throws CTFReaderException
* Not expected
@Test
public void testGetInt_pos2() throws CTFReaderException {
fixture.position(2);
- int length = 0;
- boolean signed = true;
- long result = fixture.get(length, signed);
+ long result = fixture.get(0, true);
assertEquals(0, result);
}
- /**
- * Run the get method test.
- *
- * @throws CTFReaderException
- * Not expected
- */
- @Test
- public void testGetInt_signed() throws CTFReaderException {
- fixture.position(1);
- int length = 0;
- boolean signed = true;
-
- long result = fixture.get(length, signed);
- assertEquals(0, result);
- }
/**
- * Run the get method test.
+ * Test {@link BitBuffer#get} with explicit little-endian reading.
*
* @throws CTFReaderException
* Not expected
*/
@Test
- public void testGetInt_signed_length1() throws CTFReaderException {
- fixture.position(1);
- int length = 1;
- boolean signed = true;
+ public void testGetInt_le2() throws CTFReaderException {
+ BitBuffer leFixture = new BitBuffer(ByteBuffer.allocateDirect(128));
+ leFixture.setByteOrder(ByteOrder.LITTLE_ENDIAN);
+ createBuffer(leFixture);
+ leFixture.position(0);
- long result = fixture.get(length, signed);
- assertEquals(0, result);
+ long result = leFixture.get(24, false);
+ assertEquals(0x020100, result);
}
/**
- * Run the get method test with a little-endian BitBuffer.
+ * Test {@link BitBuffer#get} with explicit little-endian reading, with an
+ * offset.
*
* @throws CTFReaderException
* Not expected
*/
@Test
public void testGetInt_le1() throws CTFReaderException {
- BitBuffer le_fixture = new BitBuffer(ByteBuffer.allocateDirect(128));
- le_fixture.setByteOrder(ByteOrder.LITTLE_ENDIAN);
- createBuffer(le_fixture);
- le_fixture.position(1);
- int length = 24;
- long result = le_fixture.get(length, false);
+ BitBuffer leFixture = new BitBuffer(ByteBuffer.allocateDirect(128));
+ leFixture.setByteOrder(ByteOrder.LITTLE_ENDIAN);
+ createBuffer(leFixture);
+ leFixture.position(1);
- /* 0x020100 downshifted */
- assertEquals(0x810080, result);
+ long result = leFixture.get(24, false);
+ assertEquals(0x810080, result); /* 0x020100 down-shifted */
}
- /**
- * Run the get method test with a little-endian BitBuffer.
- *
- * @throws CTFReaderException
- * Not expected
- */
- @Test
- public void testGetInt_le2() throws CTFReaderException {
- BitBuffer le_fixture = new BitBuffer(ByteBuffer.allocateDirect(128));
- le_fixture.setByteOrder(ByteOrder.LITTLE_ENDIAN);
- createBuffer(le_fixture);
- le_fixture.position(0);
- int length = 24;
- long result = le_fixture.get(length, false);
- assertEquals(0x020100, result);
- }
/**
- * Run the int getInt(int,boolean) method test and expect an overflow.
+ * Test {@link BitBuffer#get} with a 32-bit out-of-bounds read. Should throw
+ * an exception.
*
* @throws CTFReaderException
* Expected
*/
@Test(expected = CTFReaderException.class)
public void testGetInt_invalid() throws CTFReaderException {
- BitBuffer small_fixture = new BitBuffer(ByteBuffer.allocateDirect(128));
- small_fixture.setByteOrder(ByteOrder.BIG_ENDIAN);
- createBuffer(small_fixture, 2);
- small_fixture.position(10);
- int length = 32;
- boolean signed = true;
- small_fixture.get(length, signed);
+ BitBuffer smallFixture = new BitBuffer(ByteBuffer.allocateDirect(128));
+ smallFixture.setByteOrder(ByteOrder.BIG_ENDIAN);
+ createBuffer(smallFixture, 2);
+ smallFixture.position(10);
+
+ /* This will attempt to read past the buffer's end. */
+ smallFixture.get(32, true);
}
/**
- * Run the get method test and expect an overflow.
+ * Test {@link BitBuffer#get} with a 64-bit out-of-bounds read. Should throw
+ * an exception.
*
* @throws CTFReaderException
* Expected
*/
@Test(expected = CTFReaderException.class)
public void testGetInt_invalid2() throws CTFReaderException {
- BitBuffer small_fixture = new BitBuffer(ByteBuffer.allocateDirect(128));
- small_fixture.setByteOrder(ByteOrder.BIG_ENDIAN);
- createBuffer(small_fixture, 2);
- small_fixture.position(1);
- int length = 64;
- boolean signed = true;
+ BitBuffer smallFixture = new BitBuffer(ByteBuffer.allocateDirect(128));
+ smallFixture.setByteOrder(ByteOrder.BIG_ENDIAN);
+ createBuffer(smallFixture, 2);
+ smallFixture.position(1);
- small_fixture.get(length, signed);
+ /* This will attempt to read past the buffer's end. */
+ smallFixture.get(64, true);
}
/**
- * Run the getLong method test.
+ * Test {@link BitBuffer#getLong}.
*
* @throws CTFReaderException
* error
}
/**
- * Run the getLong method test.
+ * Test {@link BitBuffer#getLong} with an offset of 7.
*
* @throws CTFReaderException
* error
}
/**
- * Run the getLong method test.
+ * Test {@link BitBuffer#getLong} with an offset of 8.
*
* @throws CTFReaderException
* error
public void testGetLong_pos8() throws CTFReaderException {
fixture.position(8);
long result = fixture.getLong();
- assertEquals(result, 0x0102030405060708L);
+ assertEquals(0x0102030405060708L, result);
}
/**
- * Run the getLong method test.
+ * Test {@link BitBuffer#getLong} with a little-endian buffer.
*
* @throws CTFReaderException
* error
fixture.position(0);
fixture.setByteOrder(ByteOrder.LITTLE_ENDIAN);
long result = fixture.getLong();
- assertEquals(result, 0x0706050403020100L);
+ assertEquals(0x0706050403020100L, result);
}
/**
- * Run the getLong method test.
+ * Test {@link BitBuffer#getLong} with a little-endian buffer at pos 7.
*
* @throws CTFReaderException
* error
fixture.position(7);
fixture.setByteOrder(ByteOrder.LITTLE_ENDIAN);
long result = fixture.getLong();
- assertEquals(result, 0x100e0c0a08060402L);
+ assertEquals(0x100e0c0a08060402L, result);
}
/**
- * Run the getLong method test.
+ * Test {@link BitBuffer#getLong} with a little-endian buffer at pos 8.
*
* @throws CTFReaderException
* error
fixture.position(8);
fixture.setByteOrder(ByteOrder.LITTLE_ENDIAN);
long result = fixture.getLong();
- assertEquals(result, 0x0807060504030201L);
+ assertEquals(0x0807060504030201L, result);
}
/**
- * Run the get method test.
+ * Test {@link BitBuffer#get} for >32 bits in length.
*
* @throws CTFReaderException
* error
public void testGet35_pos0BE() throws CTFReaderException {
fixture.position(0);
long result = fixture.get(35, false);
- assertEquals(result, 0x081018L);
+ assertEquals(0x081018L, result);
}
/**
- * Run the get method test.
+ * Test {@link BitBuffer#get} for >32 bits in length at an offset position.
*
* @throws CTFReaderException
* error
public void testGet35_pos8BE() throws CTFReaderException {
fixture.position(8);
long result = fixture.get(35, false);
- assertEquals(result, 0x08101820L);
+ assertEquals(0x08101820L, result);
}
/**
- * Run the get method test.
+ * Test {@link BitBuffer#get} for >32 bits in length in little-endian.
*
* @throws CTFReaderException
* error
fixture.position(0);
fixture.setByteOrder(ByteOrder.LITTLE_ENDIAN);
long result = fixture.get(35, false);
-
- assertEquals(result, 0x0403020100L);
+ assertEquals(0x0403020100L, result);
}
/**
- * Run the get method test.
+ * Test {@link BitBuffer#get} for >32 bits in length, in little-endian, at
+ * position 7.
*
* @throws CTFReaderException
* error
fixture.position(7);
fixture.setByteOrder(ByteOrder.LITTLE_ENDIAN);
long result = fixture.get(35, false);
- assertEquals(result, 0x0208060402L);
+ assertEquals(0x0208060402L, result);
}
/**
- * Run the get method test.
+ * Test {@link BitBuffer#get} for >32 bits in length, in little-endian, at
+ * position 8.
*
* @throws CTFReaderException
* error
fixture.position(8);
fixture.setByteOrder(ByteOrder.LITTLE_ENDIAN);
long result = fixture.get(35, false);
- assertEquals(result, 0x0504030201L);
+ assertEquals(0x0504030201L, result);
}
/**
- * Run the get method test.
+ * Test {@link BitBuffer#get} for >32 bits in length, in little-endian, for
+ * a signed value.
*
* @throws CTFReaderException
* error
fixture.position(0);
fixture.setByteOrder(ByteOrder.LITTLE_ENDIAN);
long result = fixture.get(35, true);
- assertEquals(result, 0xfffffffc03020100L);
+ assertEquals(0xfffffffc03020100L, result);
}
/**
- * Run the get method test.
+ * Test {@link BitBuffer#get} for >32 bits in length, in little-endian, for
+ * a signed value, at position 7.
*
* @throws CTFReaderException
* error
fixture.position(7);
fixture.setByteOrder(ByteOrder.LITTLE_ENDIAN);
long result = fixture.get(35, true);
- assertEquals(result, 0x0208060402L);
+ assertEquals(0x0208060402L, result);
}
/**
- * Run the get method test.
+ * Test {@link BitBuffer#get} for >32 bits in length, in little-endian, for
+ * a signed value, at position 8.
*
* @throws CTFReaderException
* error
fixture.position(8);
fixture.setByteOrder(ByteOrder.LITTLE_ENDIAN);
long result = fixture.get(35, true);
- assertEquals(result, 0xfffffffd04030201L);
+ assertEquals(0xfffffffd04030201L, result);
}
/**
- * Run the get method test.
+ * Test reading negative values as signed values.
*
* @throws CTFReaderException
* error
fixture.putInt(-1);
fixture.position(0);
fixture.setByteOrder(ByteOrder.LITTLE_ENDIAN);
+
long result = fixture.get(32, true);
- assertEquals(result, -1L);
+ assertEquals(-1L, result);
}
/**
- * Run the get method test.
+ * Test reading negative values as unsigned values.
*
* @throws CTFReaderException
* error
fixture.putInt(-1);
fixture.position(0);
fixture.setByteOrder(ByteOrder.LITTLE_ENDIAN);
+
long result = fixture.get(32, false);
assertEquals(0xFFFFFFFFL, result);
}
/**
- * Run the get method test.
+ * Test reading 24 bits of a 32-bit negative value as a signed value.
*
* @throws CTFReaderException
* error
fixture.putInt(-1);
fixture.position(0);
fixture.setByteOrder(ByteOrder.LITTLE_ENDIAN);
+
long result = fixture.get(24, true);
assertEquals(-1L, result);
}
/**
- * Run the get method test.
+ * Test reading 24 bits of a 32-bit negative value as an unsigned value.
*
* @throws CTFReaderException
* error
fixture.putInt(-1);
fixture.position(0);
fixture.setByteOrder(ByteOrder.LITTLE_ENDIAN);
+
long result = fixture.get(24, false);
assertEquals(0xFFFFFFL, result);
}
/**
- * Run the void putInt(int) method test.
+ * Test {@link BitBuffer#putInt(int)}
*
* @throws CTFReaderException
* Not expected
*/
@Test
public void testPutInt() throws CTFReaderException {
- int value = 1;
fixture.position(1);
- fixture.putInt(value);
+ fixture.putInt(1);
}
/**
- * Run the void putInt(int,int,boolean) method test.
+ * Test {@link BitBuffer#putInt(int, int)}
*
* @throws CTFReaderException
* Not expected
*/
@Test
- public void testPutInt_signed() throws CTFReaderException {
- int length = 1;
- int value = 1;
-
+ public void testPutInt_length1() throws CTFReaderException {
fixture.position(1);
- fixture.putInt(length, value);
+ fixture.putInt(1, 1);
}
/**
- * Run the void putInt(int,int,int,boolean) method test.
+ * Test {@link BitBuffer#putInt(int, int)} with length = 0.
*
* @throws CTFReaderException
* Not expected
*/
@Test
public void testPutInt_length0() throws CTFReaderException {
- int length = 0;
- int value = 1;
-
- fixture.position(1);
- fixture.putInt(length, value);
- }
-
- /**
- * Run the void putInt(int,int,int,boolean) method test.
- *
- * @throws CTFReaderException
- * Not expected
- */
- @Test
- public void testPutInt_length1() throws CTFReaderException {
- int length = 1;
- int value = 1;
-
fixture.position(1);
- fixture.putInt(length, value);
+ fixture.putInt(0, 1);
}
/**
- * Run the void putInt(int) method test.
+ * Test writing and reading a value defined in hex format.
*
* @throws CTFReaderException
* Not expected
@Test
public void testPutInt_hex() throws CTFReaderException {
final int value = 0x010203;
- int read;
for (int i = 0; i <= 32; i++) {
fixture.position(i);
fixture.putInt(value);
fixture.position(i);
- read = fixture.getInt();
+ int read = fixture.getInt();
assertEquals(value, read);
}
}
/**
- * Run the void putInt(int,int,int,boolean) method test.
+ * Test {@link BitBuffer#putInt} with an out-of-bounds length. An exception
+ * should be thrown.
*
* @throws CTFReaderException
* Expected
createBuffer(fixture2, 4);
fixture2.position(1);
- int length = 32;
- int value = 1;
-
- fixture2.putInt(length, value);
- fixture2.get(1, true);
+ /* This will try writing past the buffer's end */
+ fixture2.putInt(32, 1);
}
}