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, true,
kj::strTree(spaces(indent), kj::strTree(spaces(indent),
"public static final ", typeName_, ".Reader ", upperCase, " =\n", "public static final ", typeName_, ".Reader ", upperCase, " =\n",
spaces(indent), " new ", typeName_, ".Reader((new org.capnproto.PointerReader(Schemas.b_", spaces(indent), " ",
kj::hex(proto.getId()), ",", schema.getValueSchemaOffset(), ",0x7fffffff)).getStruct());\n") "(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; 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; return this._getBooleanField(offset) ^ mask;
} }

View file

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