package de.persosim.simulator.utils;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.junit.Before;
import org.junit.Test;
import de.persosim.simulator.test.PersoSimTestCase;
public class BitFieldTest extends PersoSimTestCase {
byte [] field1Content;
byte [] field2Content;
BitField field1;
BitField field2;
@Before
public void setUp(){
field1Content = new byte []{(byte) 0xFF, 0b01010101};
field2Content = new byte []{0x00, (byte) 0b10101010, (byte)0xF};
field1 = new BitField(16, field1Content);
field2 = new BitField(20, field2Content);
}
@Test
public void testBuildFromBigEndian(){
BitField field = BitField.buildFromBigEndian(10, new byte [] {0b01001011, (byte) 0b10110100});
assertFalse(field.getBit(0));
assertFalse(field.getBit(1));
assertTrue(field.getBit(2));
assertFalse(field.getBit(3));
assertTrue(field.getBit(4));
assertTrue(field.getBit(5));
assertFalse(field.getBit(6));
assertTrue(field.getBit(7));
assertTrue(field.getBit(8));
assertTrue(field.getBit(9));
}
@Test
public void testConstructorByteArray(){
BitField field = new BitField(10, new byte [] {0b01001011, 0b00001111});
assertTrue(field.getBit(0));
assertTrue(field.getBit(1));
assertFalse(field.getBit(2));
assertTrue(field.getBit(3));
assertFalse(field.getBit(4));
assertFalse(field.getBit(5));
assertTrue(field.getBit(6));
assertFalse(field.getBit(7));
assertTrue(field.getBit(8));
assertTrue(field.getBit(9));
}
@Test
public void testConstructorSetBits(){
BitField field = new BitField(10, 2, 5);
assertFalse(field.getBit(0));
assertFalse(field.getBit(1));
assertTrue(field.getBit(2));
assertFalse(field.getBit(3));
assertFalse(field.getBit(4));
assertTrue(field.getBit(5));
assertFalse(field.getBit(6));
assertFalse(field.getBit(7));
assertFalse(field.getBit(8));
assertFalse(field.getBit(9));
}
@Test(expected = IllegalArgumentException.class)
public void testConstructorSetBitsNegativeBit(){
new BitField(10, 2, -5);
}
@Test(expected = IllegalArgumentException.class)
public void testConstructorSetBitsToBig(){
new BitField(10, 2, 200);
}
@Test
public void testConstructor(){
BitField field = new BitField(10);
for (int i = 0; i < 10; i++){
assertFalse(field.getBit(i));
}
}
@Test
public void testEquals(){
BitField equal = new BitField(16, field1Content);
//run mut
assertEquals(field1, equal);
}
@Test
public void testEqualsNegative(){
//run mut
assertTrue(!field1.equals(field2));
}
@Test
public void testGetAsZeroPaddedByteArray(){
assertArrayEquals(field2Content, field2.getAsZeroPaddedByteArray());
}
@Test
public void testGetAsZeroPaddedBigEndianByteArray() {
BitField bf = BitField.buildFromBigEndian(16, field1Content);
assertArrayEquals(field1Content, bf.getAsZeroPaddedBigEndianByteArray());
}
@Test
public void testConcatenate(){
//create test data
byte [] concatenated = Utils.concatByteArrays(field1Content, field2Content);
BitField concatenatedField = new BitField(36, concatenated);
//call mut
BitField result = field1.concatenate(field2);
//check result
assertEquals(36, result.getNumberOfBits());
assertEquals(concatenatedField, result);
}
@Test
public void testOr(){
//create test data
BitField expected = new BitField(20, new byte []{(byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xF0});
//call mut
BitField result = field1.or(field2);
assertEquals(expected, result);
}
@Test
public void testAnd(){
//create test data
BitField expected = new BitField(20, new byte []{0,0,0});
//call mut
BitField result = field1.and(field2);
assertEquals(expected, result);
}
@Test
public void testGetNumberOfBits(){
assertEquals(16, field1.getNumberOfBits());
}
@Test
public void testFlip(){
//create test data
BitField expected = new BitField(16, new byte []{(byte) 0xFF, (byte) 0b01010100});
//call mut
BitField result = field1.flipBit(8);
assertEquals(expected, result);
}
}