StructBuilder tests
This commit is contained in:
parent
05d1cc22c6
commit
904faa3a6c
2 changed files with 73 additions and 4 deletions
|
@ -19,7 +19,31 @@ public final class StructBuilder {
|
|||
this.bit0Offset = bit0Offset;
|
||||
}
|
||||
|
||||
public final int getShortField(int offset) {
|
||||
public final boolean getBoolField(int offset) {
|
||||
int bitOffset = (offset == 0 ? this.bit0Offset : offset);
|
||||
int position = this.data + (bitOffset / 8);
|
||||
return (this.segment.buffer.get(position) & (1 << (bitOffset % 8))) != 0;
|
||||
}
|
||||
|
||||
public final void setBoolField(int offset, boolean value) {
|
||||
int bitOffset = offset;
|
||||
if (offset == 0) { bitOffset = this.bit0Offset; }
|
||||
byte bitnum = (byte)(bitOffset % 8);
|
||||
int position = this.data + (bitOffset / 8);
|
||||
byte oldValue = this.segment.buffer.get(position);
|
||||
this.segment.buffer.put(position,
|
||||
(byte)((oldValue & (~(1 << bitnum))) | (( value ? 1 : 0) << bitnum)));
|
||||
}
|
||||
|
||||
public final byte getByteField(int offset) {
|
||||
return this.segment.buffer.get(this.data + offset);
|
||||
}
|
||||
|
||||
public final void setByteField(int offset, byte value) {
|
||||
this.segment.buffer.put(this.data + offset, value);
|
||||
}
|
||||
|
||||
public final short getShortField(int offset) {
|
||||
return this.segment.buffer.getShort(this.data + offset * 2);
|
||||
}
|
||||
|
||||
|
@ -35,6 +59,14 @@ public final class StructBuilder {
|
|||
this.segment.buffer.putInt(this.data + offset * 4, value);
|
||||
}
|
||||
|
||||
public final long getLongField(int offset) {
|
||||
return this.segment.buffer.getLong(this.data + offset * 8);
|
||||
}
|
||||
|
||||
public final void setLongField(int offset, long value) {
|
||||
this.segment.buffer.putLong(this.data + offset * 8, value);
|
||||
}
|
||||
|
||||
public final PointerBuilder getPointerField(int index) {
|
||||
return new PointerBuilder(this.segment, this.pointers + index);
|
||||
}
|
||||
|
|
|
@ -56,9 +56,46 @@ class ExampleSuite extends FunSuite {
|
|||
|
||||
}
|
||||
|
||||
def setupStruct(builder : StructBuilder) = {
|
||||
builder.setLongField(0, 0x1011121314151617L);
|
||||
builder.setIntField(2, 0x20212223);
|
||||
builder.setShortField(6, 0x3031.toShort);
|
||||
builder.setByteField(14, 0x40);
|
||||
builder.setBoolField(120, false);
|
||||
builder.setBoolField(121, false);
|
||||
builder.setBoolField(122, true);
|
||||
builder.setBoolField(123, false);
|
||||
builder.setBoolField(124, true);
|
||||
builder.setBoolField(125, true);
|
||||
builder.setBoolField(126, true);
|
||||
builder.setBoolField(127, false);
|
||||
}
|
||||
|
||||
def checkStruct(builder : StructBuilder) {
|
||||
assert(0x1011121314151617L === builder.getLongField(0));
|
||||
assert(0x20212223 == builder.getIntField(2));
|
||||
assert(0x3031 === builder.getShortField(6));
|
||||
assert(0x40 === builder.getByteField(14));
|
||||
assert(false === builder.getBoolField(120));
|
||||
assert(false === builder.getBoolField(121));
|
||||
assert(true === builder.getBoolField(122));
|
||||
assert(false === builder.getBoolField(123));
|
||||
assert(true === builder.getBoolField(124));
|
||||
assert(true === builder.getBoolField(125));
|
||||
assert(true === builder.getBoolField(126));
|
||||
assert(false === builder.getBoolField(127));
|
||||
}
|
||||
|
||||
test("StructRoundTrip_OneSegment") {
|
||||
val message = new MessageBuilder();
|
||||
// ...
|
||||
val buffer = java.nio.ByteBuffer.allocate(1024 * 8);
|
||||
buffer.order(java.nio.ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.mark();
|
||||
|
||||
val pointerBuilder = PointerBuilder.getRoot(new SegmentBuilder(buffer), 0);
|
||||
val builder = pointerBuilder.initStruct(new StructSize(2, 4, FieldSize.INLINE_COMPOSITE));
|
||||
setupStruct(builder);
|
||||
|
||||
checkStruct(builder);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue