From 67df707a6f4e2fe3d1b5a0257a89eb1ea33cd03e Mon Sep 17 00:00:00 2001 From: David Renshaw Date: Sat, 24 May 2014 22:21:41 -0400 Subject: [PATCH] fix bug in getBoolField --- project/build.scala | 2 +- .../main/java/org/capnproto/StructReader.java | 3 +- .../test/java/org/capnproto/LayoutTest.java | 33 ++++++++++++------- 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/project/build.scala b/project/build.scala index 1626c79..b7b203d 100644 --- a/project/build.scala +++ b/project/build.scala @@ -60,7 +60,7 @@ object Build extends sbt.Build { object Shared { val testDeps = Seq( -// "org.scalatest" %% "scalatest" % "2.1.6" % "it,test", + "org.scalatest" %% "scalatest" % "2.1.6" % "it,test", // "org.scalacheck" %% "scalacheck" % "1.11.4" % "it,test", "com.novocode" % "junit-interface" % "0.10" % "test", "junit" % "junit" % "4.11" % "test" diff --git a/runtime/src/main/java/org/capnproto/StructReader.java b/runtime/src/main/java/org/capnproto/StructReader.java index e1168bf..fab4ca7 100644 --- a/runtime/src/main/java/org/capnproto/StructReader.java +++ b/runtime/src/main/java/org/capnproto/StructReader.java @@ -27,7 +27,8 @@ public final class StructReader { if (offset == 0) { offset = this.bit0Offset; } - byte b = this.segment.buffer.get(offset / 8); + byte b = this.segment.buffer.get(this.data + offset / 8); + return (b & (1 << (offset % 8))) != 0; } else { return false; diff --git a/runtime/src/test/java/org/capnproto/LayoutTest.java b/runtime/src/test/java/org/capnproto/LayoutTest.java index e9a0a1c..5bb1bee 100644 --- a/runtime/src/test/java/org/capnproto/LayoutTest.java +++ b/runtime/src/test/java/org/capnproto/LayoutTest.java @@ -4,7 +4,7 @@ import java.nio.ByteBuffer; import org.junit.Test; import static org.hamcrest.core.IsEqual.equalTo; -import static org.junit.Assert.assertThat; +import org.junit.Assert; public class LayoutTest { @@ -19,19 +19,30 @@ public class LayoutTest { PointerReader pointerReader = new PointerReader(new SegmentReader(buffer), 0, 0x7fffffff); StructReader reader = pointerReader.getStruct(); - assertThat(reader.getLongField(0), equalTo(0xefcdab8967452301L)); - assertThat(reader.getLongField(1), equalTo(0L)); - assertThat(reader.getIntField(0), equalTo(0x67452301)); - assertThat(reader.getIntField(1), equalTo(0xefcdab89)); - assertThat(reader.getIntField(2), equalTo(0)); - assertThat(reader.getShortField(0), equalTo((short) 0x2301)); - assertThat(reader.getShortField(1), equalTo((short)0x6745)); - assertThat(reader.getShortField(2), equalTo((short)0xab89)); - assertThat(reader.getShortField(3), equalTo((short)0xefcd)); - assertThat(reader.getShortField(4), equalTo((short)0)); + Assert.assertThat(reader.getLongField(0), equalTo(0xefcdab8967452301L)); + Assert.assertThat(reader.getLongField(1), equalTo(0L)); + Assert.assertThat(reader.getIntField(0), equalTo(0x67452301)); + Assert.assertThat(reader.getIntField(1), equalTo(0xefcdab89)); + Assert.assertThat(reader.getIntField(2), equalTo(0)); + Assert.assertThat(reader.getShortField(0), equalTo((short) 0x2301)); + Assert.assertThat(reader.getShortField(1), equalTo((short)0x6745)); + Assert.assertThat(reader.getShortField(2), equalTo((short)0xab89)); + Assert.assertThat(reader.getShortField(3), equalTo((short)0xefcd)); + Assert.assertThat(reader.getShortField(4), equalTo((short)0)); // TODO masking + Assert.assertTrue(reader.getBoolField(0)); + Assert.assertFalse(reader.getBoolField(1)); + Assert.assertFalse(reader.getBoolField(2)); + Assert.assertFalse(reader.getBoolField(3)); + Assert.assertFalse(reader.getBoolField(4)); + Assert.assertFalse(reader.getBoolField(5)); + Assert.assertFalse(reader.getBoolField(6)); + Assert.assertFalse(reader.getBoolField(7)); + + Assert.assertTrue(reader.getBoolField(8)); + Assert.assertTrue(reader.getBoolField(9)); } }