get the tests passing once again

This commit is contained in:
David Renshaw 2014-10-07 12:12:34 -04:00
parent 24e4183fc0
commit 6495ab1da8
3 changed files with 79 additions and 55 deletions

View file

@ -1303,8 +1303,10 @@ private:
true,
kj::strTree(spaces(indent),
"public static final ", typeName_, ".Reader ", upperCase, " =\n",
spaces(indent), " new ", typeName_, ".Reader((new org.capnproto.PointerReader(Schemas.b_",
kj::hex(proto.getId()), ",", schema.getValueSchemaOffset(), ",0x7fffffff)).getStruct());\n")
spaces(indent), " ",
"(new org.capnproto.PointerReader(Schemas.b_",
kj::hex(proto.getId()), ",", schema.getValueSchemaOffset(), ",0x7fffffff)).getStruct(",
typeName_, ".factory"");\n")
};
}

View file

@ -25,7 +25,7 @@ public class StructBuilder {
return (this.segment.buffer.get(position) & (1 << (bitOffset % 8))) != 0;
}
protected final boolean getBooleanField(int offset, boolean mask) {
protected final boolean _getBooleanField(int offset, boolean mask) {
return this._getBooleanField(offset) ^ mask;
}

View file

@ -2,8 +2,17 @@ package org.capnproto;
import org.scalatest.FunSuite
class LayoutSuite extends FunSuite {
class BareStructReader extends FromStructReader[StructReader] {
def fromStructReader(segment: org.capnproto.SegmentReader, data: Int, pointers: Int,
dataSize: Int, pointerCount: Short, bit0Offset: Byte, nestingLimit:Int) : StructReader = {
return new StructReader(segment,data,pointers,dataSize,pointerCount,bit0Offset,nestingLimit);
}
}
test("SimpleRawDataStruct") {
val data : Array[Byte] =
Array(0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
@ -15,78 +24,91 @@ class LayoutSuite extends FunSuite {
val arena = new ReaderArena(Array(buffer));
val pointerReader = new PointerReader(arena.tryGetSegment(0), 0, 0x7fffffff);
val reader = pointerReader.getStruct();
val reader = pointerReader.getStruct(new BareStructReader());
assert(reader._getLongField(0) === 0xefcdab8967452301L);
assert(reader._getLongField(1) === 0L);
assert(reader.getIntField(0) === 0x67452301);
assert(reader.getIntField(1) === 0xefcdab89);
assert(reader.getIntField(2) === 0);
assert(reader.getShortField(0) === 0x2301.toShort);
assert(reader.getShortField(1) === 0x6745.toShort);
assert(reader.getShortField(2) === 0xab89.toShort);
assert(reader.getShortField(3) === 0xefcd.toShort);
assert(reader.getShortField(4) === 0.toShort);
assert(reader._getIntField(0) === 0x67452301);
assert(reader._getIntField(1) === 0xefcdab89);
assert(reader._getIntField(2) === 0);
assert(reader._getShortField(0) === 0x2301.toShort);
assert(reader._getShortField(1) === 0x6745.toShort);
assert(reader._getShortField(2) === 0xab89.toShort);
assert(reader._getShortField(3) === 0xefcd.toShort);
assert(reader._getShortField(4) === 0.toShort);
// TODO masking
assert(reader.getBooleanField(0) === true);
assert(reader.getBooleanField(1) === false);
assert(reader.getBooleanField(2) === false);
assert(reader._getBooleanField(0) === true);
assert(reader._getBooleanField(1) === false);
assert(reader._getBooleanField(2) === false);
assert(reader.getBooleanField(3) === false);
assert(reader.getBooleanField(4) === false);
assert(reader.getBooleanField(5) === false);
assert(reader.getBooleanField(6) === false);
assert(reader.getBooleanField(7) == false);
assert(reader._getBooleanField(3) === false);
assert(reader._getBooleanField(4) === false);
assert(reader._getBooleanField(5) === false);
assert(reader._getBooleanField(6) === false);
assert(reader._getBooleanField(7) == false);
assert(reader.getBooleanField(8) === true);
assert(reader.getBooleanField(9) === true);
assert(reader.getBooleanField(10) === false);
assert(reader.getBooleanField(11) === false);
assert(reader.getBooleanField(12) === false);
assert(reader.getBooleanField(13) === true);
assert(reader.getBooleanField(14) === false);
assert(reader.getBooleanField(15) === false);
assert(reader._getBooleanField(8) === true);
assert(reader._getBooleanField(9) === true);
assert(reader._getBooleanField(10) === false);
assert(reader._getBooleanField(11) === false);
assert(reader._getBooleanField(12) === false);
assert(reader._getBooleanField(13) === true);
assert(reader._getBooleanField(14) === false);
assert(reader._getBooleanField(15) === false);
assert(reader.getBooleanField(63) === true);
assert(reader.getBooleanField(64) === false);
assert(reader._getBooleanField(63) === true);
assert(reader._getBooleanField(64) === false);
// TODO masking
}
def setupStruct(builder : StructBuilder) = {
builder.setLongField(0, 0x1011121314151617L);
builder.setIntField(2, 0x20212223);
builder.setShortField(6, 0x3031.toShort);
builder.setByteField(14, 0x40);
builder.setBooleanField(120, false);
builder.setBooleanField(121, false);
builder.setBooleanField(122, true);
builder.setBooleanField(123, false);
builder.setBooleanField(124, true);
builder.setBooleanField(125, true);
builder.setBooleanField(126, true);
builder.setBooleanField(127, false);
builder._setLongField(0, 0x1011121314151617L);
builder._setIntField(2, 0x20212223);
builder._setShortField(6, 0x3031.toShort);
builder._setByteField(14, 0x40);
builder._setBooleanField(120, false);
builder._setBooleanField(121, false);
builder._setBooleanField(122, true);
builder._setBooleanField(123, false);
builder._setBooleanField(124, true);
builder._setBooleanField(125, true);
builder._setBooleanField(126, true);
builder._setBooleanField(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.getBooleanField(120));
assert(false === builder.getBooleanField(121));
assert(true === builder.getBooleanField(122));
assert(false === builder.getBooleanField(123));
assert(true === builder.getBooleanField(124));
assert(true === builder.getBooleanField(125));
assert(true === builder.getBooleanField(126));
assert(false === builder.getBooleanField(127));
assert(0x1011121314151617L === builder._getLongField(0));
assert(0x20212223 == builder._getIntField(2));
assert(0x3031 === builder._getShortField(6));
assert(0x40 === builder._getByteField(14));
assert(false === builder._getBooleanField(120));
assert(false === builder._getBooleanField(121));
assert(true === builder._getBooleanField(122));
assert(false === builder._getBooleanField(123));
assert(true === builder._getBooleanField(124));
assert(true === builder._getBooleanField(125));
assert(true === builder._getBooleanField(126));
assert(false === builder._getBooleanField(127));
}
class BareStructBuilder(structSize : StructSize) extends FromStructBuilder[StructBuilder] {
def fromStructBuilder(segment: org.capnproto.SegmentBuilder, data: Int, pointers: Int,
dataSize: Int, pointerCount: Short, bit0Offset: Byte) : StructBuilder = {
return new StructBuilder(segment,data,pointers,dataSize,pointerCount,bit0Offset);
}
def structSize() : StructSize = {
return structSize;
}
}
test("StructRoundTrip_OneSegment") {
val buffer = java.nio.ByteBuffer.allocate(1024 * 8);
buffer.order(java.nio.ByteOrder.LITTLE_ENDIAN);
@ -95,7 +117,7 @@ class LayoutSuite extends FunSuite {
new SegmentBuilder(buffer, new BuilderArena(BuilderArena.SUGGESTED_FIRST_SEGMENT_WORDS,
BuilderArena.SUGGESTED_ALLOCATION_STRATEGY)),
0);
val builder = pointerBuilder.initStruct(new StructSize(2, 4, FieldSize.INLINE_COMPOSITE));
val builder = pointerBuilder.initStruct(new BareStructBuilder(new StructSize(2, 4, FieldSize.INLINE_COMPOSITE)));
setupStruct(builder);
checkStruct(builder);