aboutsummaryrefslogtreecommitdiffstats
path: root/java/src/test
diff options
context:
space:
mode:
authorWink Saville <wink@google.com>2010-05-29 13:13:38 -0700
committerWink Saville <wink@google.com>2010-05-29 13:13:38 -0700
commite2d542951c059563a3b7f74c257dac4f222d9dc5 (patch)
tree2025d0dd0c8963081fef2e340a2789ae6e24f652 /java/src/test
parentd0332953cda33fb4f8e24ebff9c49159b69c43d6 (diff)
downloadexternal_protobuf-e2d542951c059563a3b7f74c257dac4f222d9dc5.zip
external_protobuf-e2d542951c059563a3b7f74c257dac4f222d9dc5.tar.gz
external_protobuf-e2d542951c059563a3b7f74c257dac4f222d9dc5.tar.bz2
Add support for Java micro protobuf's to protobuf-2.3.0.
See README.android for additional information. Change-Id: I6693e405c0d651eacacd3227a876129865dd0d3c
Diffstat (limited to 'java/src/test')
-rw-r--r--java/src/test/java/com/google/protobuf/MicroTest.java2138
-rw-r--r--java/src/test/java/com/google/protobuf/PerfTimer.java832
2 files changed, 2970 insertions, 0 deletions
diff --git a/java/src/test/java/com/google/protobuf/MicroTest.java b/java/src/test/java/com/google/protobuf/MicroTest.java
new file mode 100644
index 0000000..ebfccc2
--- /dev/null
+++ b/java/src/test/java/com/google/protobuf/MicroTest.java
@@ -0,0 +1,2138 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2008 Google Inc. All rights reserved.
+// http://code.google.com/p/protobuf/
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package com.google.protobuf;
+
+import com.google.protobuf.micro.MicroOuterClass;
+import com.google.protobuf.micro.MicroOuterClass.TestAllTypesMicro;
+import com.google.protobuf.micro.RecursiveMessageMicro;
+import com.google.protobuf.micro.SimpleMessageMicro;
+import com.google.protobuf.micro.StringUtf8;
+import com.google.protobuf.micro.StringUtf8Micro;
+import com.google.protobuf.micro.UnittestImportMicro;
+import com.google.protobuf.micro.ByteStringMicro;
+
+import junit.framework.TestCase;
+
+/**
+ * Test micro runtime.
+ *
+ * @author wink@google.com Wink Saville
+ */
+public class MicroTest extends TestCase {
+ public void setUp() throws Exception {
+ }
+
+ public void testSimpleMessageMicro() throws Exception {
+ SimpleMessageMicro msg = new SimpleMessageMicro();
+ assertFalse(msg.hasD());
+ assertEquals(123, msg.getD());
+ assertFalse(msg.hasNestedMsg());
+ assertEquals(null, msg.getNestedMsg());
+ assertFalse(msg.hasDefaultNestedEnum());
+ assertEquals(SimpleMessageMicro.BAZ, msg.getDefaultNestedEnum());
+
+ msg.setD(456);
+ assertTrue(msg.hasD());
+ assertEquals(456, msg.getD());
+ msg.clearD()
+ .setD(456);
+ assertTrue(msg.hasD());
+
+ SimpleMessageMicro.NestedMessage nestedMsg = new SimpleMessageMicro.NestedMessage()
+ .setBb(2);
+ assertTrue(nestedMsg.hasBb());
+ assertEquals(2, nestedMsg.getBb());
+ msg.setNestedMsg(nestedMsg);
+ assertTrue(msg.hasNestedMsg());
+ assertEquals(2, msg.getNestedMsg().getBb());
+
+ msg.setDefaultNestedEnum(SimpleMessageMicro.BAR);
+ assertTrue(msg.hasDefaultNestedEnum());
+ assertEquals(SimpleMessageMicro.BAR, msg.getDefaultNestedEnum());
+
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 9);
+ assertEquals(result.length, msgSerializedSize);
+
+ SimpleMessageMicro newMsg = SimpleMessageMicro.parseFrom(result);
+ assertTrue(newMsg.hasD());
+ assertTrue(newMsg.hasNestedMsg());
+ assertTrue(newMsg.hasDefaultNestedEnum());
+ assertEquals(456, newMsg.getD());
+ assertEquals(2, msg.getNestedMsg().getBb());
+ assertEquals(SimpleMessageMicro.BAR, msg.getDefaultNestedEnum());
+ }
+
+ public void testRecursiveMessageMicro() throws Exception {
+ RecursiveMessageMicro msg = new RecursiveMessageMicro();
+ assertFalse(msg.hasId());
+ assertFalse(msg.hasNestedMessage());
+ assertFalse(msg.hasOptionalRecursiveMessageMicro());
+ assertEquals(0, msg.getRepeatedRecursiveMessageMicroCount());
+
+ RecursiveMessageMicro msg1 = new RecursiveMessageMicro();
+ msg1.setId(1);
+ assertEquals(1, msg1.getId());
+ RecursiveMessageMicro msg2 = new RecursiveMessageMicro();
+ msg2.setId(2);
+ RecursiveMessageMicro msg3 = new RecursiveMessageMicro();
+ msg3.setId(3);
+
+ RecursiveMessageMicro.NestedMessage nestedMsg = new RecursiveMessageMicro.NestedMessage();
+ nestedMsg.setA(msg1);
+ assertEquals(1, nestedMsg.getA().getId());
+
+ msg.setId(0);
+ msg.setNestedMessage(nestedMsg);
+ msg.setOptionalRecursiveMessageMicro(msg2);
+ msg.addRepeatedRecursiveMessageMicro(msg3);
+
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 16);
+ assertEquals(result.length, msgSerializedSize);
+
+ RecursiveMessageMicro newMsg = RecursiveMessageMicro.parseFrom(result);
+ assertTrue(newMsg.hasId());
+ assertTrue(newMsg.hasNestedMessage());
+ assertTrue(newMsg.hasOptionalRecursiveMessageMicro());
+ assertEquals(1, newMsg.getRepeatedRecursiveMessageMicroCount());
+
+ assertEquals(0, newMsg.getId());
+ assertEquals(1, newMsg.getNestedMessage().getA().getId());
+ assertEquals(2, newMsg.getOptionalRecursiveMessageMicro().getId());
+ assertEquals(3, newMsg.getRepeatedRecursiveMessageMicro(0).getId());
+ }
+
+ public void testMicroRequiredInt32() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ assertFalse(msg.hasId());
+ assertFalse(msg.isInitialized());
+ msg.setId(123);
+ assertTrue(msg.hasId());
+ assertTrue(msg.isInitialized());
+ assertEquals(123, msg.getId());
+ msg.clearId();
+ assertFalse(msg.hasId());
+ assertFalse(msg.isInitialized());
+ msg.clearId()
+ .setId(456);
+ assertTrue(msg.hasId());
+ msg.clear();
+ assertFalse(msg.hasId());
+ assertFalse(msg.isInitialized());
+
+ msg.setId(123);
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 3);
+ assertEquals(result.length, msgSerializedSize);
+
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertTrue(newMsg.hasId());
+ assertTrue(newMsg.isInitialized());
+ assertEquals(123, newMsg.getId());
+ }
+
+ public void testMicroOptionalInt32() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ assertFalse(msg.hasOptionalInt32());
+ msg.setOptionalInt32(123);
+ assertTrue(msg.hasOptionalInt32());
+ assertEquals(123, msg.getOptionalInt32());
+ msg.clearOptionalInt32();
+ assertFalse(msg.hasOptionalInt32());
+ msg.clearOptionalInt32()
+ .setOptionalInt32(456);
+ assertTrue(msg.hasOptionalInt32());
+ msg.clear();
+ assertFalse(msg.hasOptionalInt32());
+
+ msg.setOptionalInt32(123);
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 2);
+ assertEquals(result.length, msgSerializedSize);
+
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertTrue(newMsg.hasOptionalInt32());
+ assertEquals(123, newMsg.getOptionalInt32());
+ }
+
+ public void testMicroOptionalInt64() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ assertFalse(msg.hasOptionalInt64());
+ msg.setOptionalInt64(123);
+ assertTrue(msg.hasOptionalInt64());
+ assertEquals(123, msg.getOptionalInt64());
+ msg.clearOptionalInt64();
+ assertFalse(msg.hasOptionalInt64());
+ msg.clearOptionalInt64()
+ .setOptionalInt64(456);
+ assertTrue(msg.hasOptionalInt64());
+ msg.clear();
+ assertFalse(msg.hasOptionalInt64());
+
+ msg.setOptionalInt64(123);
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 2);
+ assertEquals(result.length, msgSerializedSize);
+
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertTrue(newMsg.hasOptionalInt64());
+ assertEquals(123, newMsg.getOptionalInt64());
+ }
+
+ public void testMicroOptionalUint32() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ assertFalse(msg.hasOptionalUint32());
+ msg.setOptionalUint32(123);
+ assertTrue(msg.hasOptionalUint32());
+ assertEquals(123, msg.getOptionalUint32());
+ msg.clearOptionalUint32();
+ assertFalse(msg.hasOptionalUint32());
+ msg.clearOptionalUint32()
+ .setOptionalUint32(456);
+ assertTrue(msg.hasOptionalUint32());
+ msg.clear();
+ assertFalse(msg.hasOptionalUint32());
+
+ msg.setOptionalUint32(123);
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 2);
+ assertEquals(result.length, msgSerializedSize);
+
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertTrue(newMsg.hasOptionalUint32());
+ assertEquals(123, newMsg.getOptionalUint32());
+ }
+
+ public void testMicroOptionalUint64() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ assertFalse(msg.hasOptionalUint64());
+ msg.setOptionalUint64(123);
+ assertTrue(msg.hasOptionalUint64());
+ assertEquals(123, msg.getOptionalUint64());
+ msg.clearOptionalUint64();
+ assertFalse(msg.hasOptionalUint64());
+ msg.clearOptionalUint64()
+ .setOptionalUint64(456);
+ assertTrue(msg.hasOptionalUint64());
+ msg.clear();
+ assertFalse(msg.hasOptionalUint64());
+
+ msg.setOptionalUint64(123);
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 2);
+ assertEquals(result.length, msgSerializedSize);
+
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertTrue(newMsg.hasOptionalUint64());
+ assertEquals(123, newMsg.getOptionalUint64());
+ }
+
+ public void testMicroOptionalSint32() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ assertFalse(msg.hasOptionalSint32());
+ msg.setOptionalSint32(123);
+ assertTrue(msg.hasOptionalSint32());
+ assertEquals(123, msg.getOptionalSint32());
+ msg.clearOptionalSint32();
+ assertFalse(msg.hasOptionalSint32());
+ msg.clearOptionalSint32()
+ .setOptionalSint32(456);
+ assertTrue(msg.hasOptionalSint32());
+ msg.clear();
+ assertFalse(msg.hasOptionalSint32());
+
+ msg.setOptionalSint32(-123);
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 3);
+ assertEquals(result.length, msgSerializedSize);
+
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertTrue(newMsg.hasOptionalSint32());
+ assertEquals(-123, newMsg.getOptionalSint32());
+ }
+
+ public void testMicroOptionalSint64() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ assertFalse(msg.hasOptionalSint64());
+ msg.setOptionalSint64(123);
+ assertTrue(msg.hasOptionalSint64());
+ assertEquals(123, msg.getOptionalSint64());
+ msg.clearOptionalSint64();
+ assertFalse(msg.hasOptionalSint64());
+ msg.clearOptionalSint64()
+ .setOptionalSint64(456);
+ assertTrue(msg.hasOptionalSint64());
+ msg.clear();
+ assertFalse(msg.hasOptionalSint64());
+
+ msg.setOptionalSint64(-123);
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 3);
+ assertEquals(result.length, msgSerializedSize);
+
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertTrue(newMsg.hasOptionalSint64());
+ assertEquals(-123, newMsg.getOptionalSint64());
+ }
+
+ public void testMicroOptionalFixed32() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ assertFalse(msg.hasOptionalFixed32());
+ msg.setOptionalFixed32(123);
+ assertTrue(msg.hasOptionalFixed32());
+ assertEquals(123, msg.getOptionalFixed32());
+ msg.clearOptionalFixed32();
+ assertFalse(msg.hasOptionalFixed32());
+ msg.clearOptionalFixed32()
+ .setOptionalFixed32(456);
+ assertTrue(msg.hasOptionalFixed32());
+ msg.clear();
+ assertFalse(msg.hasOptionalFixed32());
+
+ msg.setOptionalFixed32(123);
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 5);
+ assertEquals(result.length, msgSerializedSize);
+
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertTrue(newMsg.hasOptionalFixed32());
+ assertEquals(123, newMsg.getOptionalFixed32());
+ }
+
+ public void testMicroOptionalFixed64() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ assertFalse(msg.hasOptionalFixed64());
+ msg.setOptionalFixed64(123);
+ assertTrue(msg.hasOptionalFixed64());
+ assertEquals(123, msg.getOptionalFixed64());
+ msg.clearOptionalFixed64();
+ assertFalse(msg.hasOptionalFixed64());
+ msg.clearOptionalFixed64()
+ .setOptionalFixed64(456);
+ assertTrue(msg.hasOptionalFixed64());
+ msg.clear();
+ assertFalse(msg.hasOptionalFixed64());
+
+ msg.setOptionalFixed64(123);
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 9);
+ assertEquals(result.length, msgSerializedSize);
+
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertTrue(newMsg.hasOptionalFixed64());
+ assertEquals(123, newMsg.getOptionalFixed64());
+ }
+ public void testMicroOptionalSfixed32() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ assertFalse(msg.hasOptionalSfixed32());
+ msg.setOptionalSfixed32(123);
+ assertTrue(msg.hasOptionalSfixed32());
+ assertEquals(123, msg.getOptionalSfixed32());
+ msg.clearOptionalSfixed32();
+ assertFalse(msg.hasOptionalSfixed32());
+ msg.clearOptionalSfixed32()
+ .setOptionalSfixed32(456);
+ assertTrue(msg.hasOptionalSfixed32());
+ msg.clear();
+ assertFalse(msg.hasOptionalSfixed32());
+
+ msg.setOptionalSfixed32(123);
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 5);
+ assertEquals(result.length, msgSerializedSize);
+
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertTrue(newMsg.hasOptionalSfixed32());
+ assertEquals(123, newMsg.getOptionalSfixed32());
+ }
+
+ public void testMicroOptionalSfixed64() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ assertFalse(msg.hasOptionalSfixed64());
+ msg.setOptionalSfixed64(123);
+ assertTrue(msg.hasOptionalSfixed64());
+ assertEquals(123, msg.getOptionalSfixed64());
+ msg.clearOptionalSfixed64();
+ assertFalse(msg.hasOptionalSfixed64());
+ msg.clearOptionalSfixed64()
+ .setOptionalSfixed64(456);
+ assertTrue(msg.hasOptionalSfixed64());
+ msg.clear();
+ assertFalse(msg.hasOptionalSfixed64());
+
+ msg.setOptionalSfixed64(-123);
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 9);
+ assertEquals(result.length, msgSerializedSize);
+
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertTrue(newMsg.hasOptionalSfixed64());
+ assertEquals(-123, newMsg.getOptionalSfixed64());
+ }
+
+ public void testMicroOptionalFloat() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ assertFalse(msg.hasOptionalFloat());
+ msg.setOptionalFloat(123f);
+ assertTrue(msg.hasOptionalFloat());
+ assertTrue(123.0f == msg.getOptionalFloat());
+ msg.clearOptionalFloat();
+ assertFalse(msg.hasOptionalFloat());
+ msg.clearOptionalFloat()
+ .setOptionalFloat(456.0f);
+ assertTrue(msg.hasOptionalFloat());
+ msg.clear();
+ assertFalse(msg.hasOptionalFloat());
+
+ msg.setOptionalFloat(-123.456f);
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 5);
+ assertEquals(result.length, msgSerializedSize);
+
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertTrue(newMsg.hasOptionalFloat());
+ assertTrue(-123.456f == newMsg.getOptionalFloat());
+ }
+
+ public void testMicroOptionalDouble() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ assertFalse(msg.hasOptionalDouble());
+ msg.setOptionalDouble(123);
+ assertTrue(msg.hasOptionalDouble());
+ assertTrue(123.0 == msg.getOptionalDouble());
+ msg.clearOptionalDouble();
+ assertFalse(msg.hasOptionalDouble());
+ msg.clearOptionalDouble()
+ .setOptionalDouble(456.0);
+ assertTrue(msg.hasOptionalDouble());
+ msg.clear();
+ assertFalse(msg.hasOptionalDouble());
+
+ msg.setOptionalDouble(-123.456);
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 9);
+ assertEquals(result.length, msgSerializedSize);
+
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertTrue(newMsg.hasOptionalDouble());
+ assertTrue(-123.456 == newMsg.getOptionalDouble());
+ }
+
+ public void testMicroOptionalBool() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ assertFalse(msg.hasOptionalBool());
+ msg.setOptionalBool(true);
+ assertTrue(msg.hasOptionalBool());
+ assertEquals(true, msg.getOptionalBool());
+ msg.clearOptionalBool();
+ assertFalse(msg.hasOptionalBool());
+ msg.clearOptionalBool()
+ .setOptionalBool(true);
+ assertTrue(msg.hasOptionalBool());
+ msg.clear();
+ assertFalse(msg.hasOptionalBool());
+
+ msg.setOptionalBool(false);
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 2);
+ assertEquals(result.length, msgSerializedSize);
+
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertTrue(newMsg.hasOptionalBool());
+ assertEquals(false, newMsg.getOptionalBool());
+ }
+
+ public void testMicroOptionalString() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ assertFalse(msg.hasOptionalString());
+ msg.setOptionalString("hello");
+ assertTrue(msg.hasOptionalString());
+ assertEquals("hello", msg.getOptionalString());
+ msg.clearOptionalString();
+ assertFalse(msg.hasOptionalString());
+ msg.clearOptionalString()
+ .setOptionalString("hello");
+ assertTrue(msg.hasOptionalString());
+ msg.clear();
+ assertFalse(msg.hasOptionalString());
+
+ msg.setOptionalString("bye");
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 5);
+ assertEquals(result.length, msgSerializedSize);
+
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertTrue(newMsg.hasOptionalString());
+ assertEquals("bye", newMsg.getOptionalString());
+ }
+
+ public void testMicroOptionalBytes() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ assertFalse(msg.hasOptionalBytes());
+ msg.setOptionalBytes(ByteStringMicro.copyFromUtf8("hello"));
+ assertTrue(msg.hasOptionalBytes());
+ assertEquals("hello", msg.getOptionalBytes().toStringUtf8());
+ msg.clearOptionalBytes();
+ assertFalse(msg.hasOptionalBytes());
+ msg.clearOptionalBytes()
+ .setOptionalBytes(ByteStringMicro.copyFromUtf8("hello"));
+ assertTrue(msg.hasOptionalBytes());
+ msg.clear();
+ assertFalse(msg.hasOptionalBytes());
+
+ msg.setOptionalBytes(ByteStringMicro.copyFromUtf8("bye"));
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 5);
+ assertEquals(result.length, msgSerializedSize);
+
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertTrue(newMsg.hasOptionalBytes());
+ assertEquals("bye", newMsg.getOptionalBytes().toStringUtf8());
+ }
+
+ public void testMicroOptionalGroup() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ TestAllTypesMicro.OptionalGroup grp = new TestAllTypesMicro.OptionalGroup();
+ grp.setA(1);
+ assertFalse(msg.hasOptionalGroup());
+ msg.setOptionalGroup(grp);
+ assertTrue(msg.hasOptionalGroup());
+ assertEquals(1, msg.getOptionalGroup().getA());
+ msg.clearOptionalGroup();
+ assertFalse(msg.hasOptionalGroup());
+ msg.clearOptionalGroup()
+ .setOptionalGroup(new TestAllTypesMicro.OptionalGroup().setA(2));
+ assertTrue(msg.hasOptionalGroup());
+ msg.clear();
+ assertFalse(msg.hasOptionalGroup());
+
+ msg.setOptionalGroup(grp);
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 7);
+ assertEquals(result.length, msgSerializedSize);
+
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertTrue(newMsg.hasOptionalGroup());
+ assertEquals(1, newMsg.getOptionalGroup().getA());
+ }
+
+ public void testMicroOptionalNestedMessage() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ TestAllTypesMicro.NestedMessage nestedMsg = new TestAllTypesMicro.NestedMessage();
+ nestedMsg.setBb(1);
+ assertFalse(msg.hasOptionalNestedMessage());
+ msg.setOptionalNestedMessage(nestedMsg);
+ assertTrue(msg.hasOptionalNestedMessage());
+ assertEquals(1, msg.getOptionalNestedMessage().getBb());
+ msg.clearOptionalNestedMessage();
+ assertFalse(msg.hasOptionalNestedMessage());
+ msg.clearOptionalNestedMessage()
+ .setOptionalNestedMessage(new TestAllTypesMicro.NestedMessage().setBb(2));
+ assertTrue(msg.hasOptionalNestedMessage());
+ msg.clear();
+ assertFalse(msg.hasOptionalNestedMessage());
+
+ msg.setOptionalNestedMessage(nestedMsg);
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 5);
+ assertEquals(result.length, msgSerializedSize);
+
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertTrue(newMsg.hasOptionalNestedMessage());
+ assertEquals(1, newMsg.getOptionalNestedMessage().getBb());
+ }
+
+ public void testMicroOptionalForeignMessage() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ MicroOuterClass.ForeignMessageMicro foreignMsg =
+ new MicroOuterClass.ForeignMessageMicro();
+ assertFalse(foreignMsg.hasC());
+ foreignMsg.setC(1);
+ assertTrue(foreignMsg.hasC());
+ assertFalse(msg.hasOptionalForeignMessage());
+ msg.setOptionalForeignMessage(foreignMsg);
+ assertTrue(msg.hasOptionalForeignMessage());
+ assertEquals(1, msg.getOptionalForeignMessage().getC());
+ msg.clearOptionalForeignMessage();
+ assertFalse(msg.hasOptionalForeignMessage());
+ msg.clearOptionalForeignMessage()
+ .setOptionalForeignMessage(new MicroOuterClass.ForeignMessageMicro().setC(2));
+ assertTrue(msg.hasOptionalForeignMessage());
+ msg.clear();
+ assertFalse(msg.hasOptionalForeignMessage());
+
+ msg.setOptionalForeignMessage(foreignMsg);
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 5);
+ assertEquals(result.length, msgSerializedSize);
+
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertTrue(newMsg.hasOptionalForeignMessage());
+ assertEquals(1, newMsg.getOptionalForeignMessage().getC());
+ }
+
+ public void testMicroOptionalImportMessage() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ UnittestImportMicro.ImportMessageMicro importMsg =
+ new UnittestImportMicro.ImportMessageMicro();
+ assertFalse(importMsg.hasD());
+ importMsg.setD(1);
+ assertTrue(importMsg.hasD());
+ assertFalse(msg.hasOptionalImportMessage());
+ msg.setOptionalImportMessage(importMsg);
+ assertTrue(msg.hasOptionalImportMessage());
+ assertEquals(1, msg.getOptionalImportMessage().getD());
+ msg.clearOptionalImportMessage();
+ assertFalse(msg.hasOptionalImportMessage());
+ msg.clearOptionalImportMessage()
+ .setOptionalImportMessage(new UnittestImportMicro.ImportMessageMicro().setD(2));
+ assertTrue(msg.hasOptionalImportMessage());
+ msg.clear();
+ assertFalse(msg.hasOptionalImportMessage());
+
+ msg.setOptionalImportMessage(importMsg);
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 5);
+ assertEquals(result.length, msgSerializedSize);
+
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertTrue(newMsg.hasOptionalImportMessage());
+ assertEquals(1, newMsg.getOptionalImportMessage().getD());
+ }
+
+ public void testMicroOptionalNestedEnum() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ msg.setOptionalNestedEnum(TestAllTypesMicro.BAR);
+ assertTrue(msg.hasOptionalNestedEnum());
+ assertEquals(TestAllTypesMicro.BAR, msg.getOptionalNestedEnum());
+ msg.clearOptionalNestedEnum();
+ assertFalse(msg.hasOptionalNestedEnum());
+ msg.clearOptionalNestedEnum()
+ .setOptionalNestedEnum(TestAllTypesMicro.BAZ);
+ assertTrue(msg.hasOptionalNestedEnum());
+ msg.clear();
+ assertFalse(msg.hasOptionalNestedEnum());
+
+ msg.setOptionalNestedEnum(TestAllTypesMicro.BAR);
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 3);
+ assertEquals(result.length, msgSerializedSize);
+
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertTrue(newMsg.hasOptionalNestedEnum());
+ assertEquals(TestAllTypesMicro.BAR, newMsg.getOptionalNestedEnum());
+ }
+
+ public void testMicroOptionalForeignEnum() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ msg.setOptionalForeignEnum(MicroOuterClass.FOREIGN_MICRO_BAR);
+ assertTrue(msg.hasOptionalForeignEnum());
+ assertEquals(MicroOuterClass.FOREIGN_MICRO_BAR,
+ msg.getOptionalForeignEnum());
+ msg.clearOptionalForeignEnum();
+ assertFalse(msg.hasOptionalForeignEnum());
+ msg.clearOptionalForeignEnum()
+ .setOptionalForeignEnum(MicroOuterClass.FOREIGN_MICRO_BAZ);
+ assertTrue(msg.hasOptionalForeignEnum());
+ msg.clear();
+ assertFalse(msg.hasOptionalForeignEnum());
+
+ msg.setOptionalForeignEnum(MicroOuterClass.FOREIGN_MICRO_BAR);
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 3);
+ assertEquals(result.length, msgSerializedSize);
+
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertTrue(newMsg.hasOptionalForeignEnum());
+ assertEquals(MicroOuterClass.FOREIGN_MICRO_BAR,
+ newMsg.getOptionalForeignEnum());
+ }
+
+ public void testMicroOptionalImportEnum() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ msg.setOptionalImportEnum(UnittestImportMicro.IMPORT_MICRO_BAR);
+ assertTrue(msg.hasOptionalImportEnum());
+ assertEquals(UnittestImportMicro.IMPORT_MICRO_BAR,
+ msg.getOptionalImportEnum());
+ msg.clearOptionalImportEnum();
+ assertFalse(msg.hasOptionalImportEnum());
+ msg.clearOptionalImportEnum()
+ .setOptionalImportEnum(UnittestImportMicro.IMPORT_MICRO_BAZ);
+ assertTrue(msg.hasOptionalImportEnum());
+ msg.clear();
+ assertFalse(msg.hasOptionalImportEnum());
+
+ msg.setOptionalImportEnum(UnittestImportMicro.IMPORT_MICRO_BAR);
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 3);
+ assertEquals(result.length, msgSerializedSize);
+
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertTrue(newMsg.hasOptionalImportEnum());
+ assertEquals(UnittestImportMicro.IMPORT_MICRO_BAR,
+ newMsg.getOptionalImportEnum());
+ }
+
+ public void testMicroOptionalStringPiece() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ assertFalse(msg.hasOptionalStringPiece());
+ msg.setOptionalStringPiece("hello");
+ assertTrue(msg.hasOptionalStringPiece());
+ assertEquals("hello", msg.getOptionalStringPiece());
+ msg.clearOptionalStringPiece();
+ assertFalse(msg.hasOptionalStringPiece());
+ msg.clearOptionalStringPiece()
+ .setOptionalStringPiece("hello");
+ assertTrue(msg.hasOptionalStringPiece());
+ msg.clear();
+ assertFalse(msg.hasOptionalStringPiece());
+
+ msg.setOptionalStringPiece("bye");
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 6);
+ assertEquals(result.length, msgSerializedSize);
+
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertTrue(newMsg.hasOptionalStringPiece());
+ assertEquals("bye", newMsg.getOptionalStringPiece());
+ }
+
+ public void testMicroOptionalCord() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ assertFalse(msg.hasOptionalCord());
+ msg.setOptionalCord("hello");
+ assertTrue(msg.hasOptionalCord());
+ assertEquals("hello", msg.getOptionalCord());
+ msg.clearOptionalCord();
+ assertFalse(msg.hasOptionalCord());
+ msg.clearOptionalCord()
+ .setOptionalCord("hello");
+ assertTrue(msg.hasOptionalCord());
+ msg.clear();
+ assertFalse(msg.hasOptionalCord());
+
+ msg.setOptionalCord("bye");
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 6);
+ assertEquals(result.length, msgSerializedSize);
+
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertTrue(newMsg.hasOptionalCord());
+ assertEquals("bye", newMsg.getOptionalCord());
+ }
+
+ public void testMicroRepeatedInt32() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ assertEquals(0, msg.getRepeatedInt32Count());
+ msg.addRepeatedInt32(123);
+ assertEquals(1, msg.getRepeatedInt32Count());
+ assertEquals(123, msg.getRepeatedInt32(0));
+ msg.addRepeatedInt32(456);
+ assertEquals(2, msg.getRepeatedInt32Count());
+ assertEquals(123, msg.getRepeatedInt32(0));
+ assertEquals(456, msg.getRepeatedInt32(1));
+ msg.setRepeatedInt32(0, 789);
+ assertEquals(2, msg.getRepeatedInt32Count());
+ assertEquals(789, msg.getRepeatedInt32(0));
+ assertEquals(456, msg.getRepeatedInt32(1));
+ msg.clearRepeatedInt32();
+ assertEquals(0, msg.getRepeatedInt32Count());
+ msg.clearRepeatedInt32()
+ .addRepeatedInt32(456);
+ assertEquals(1, msg.getRepeatedInt32Count());
+ assertEquals(456, msg.getRepeatedInt32(0));
+ msg.clear();
+ assertEquals(0, msg.getRepeatedInt32Count());
+
+ // Test 1 entry
+ msg.clear()
+ .addRepeatedInt32(123);
+ assertEquals(1, msg.getRepeatedInt32Count());
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 3);
+ assertEquals(result.length, msgSerializedSize);
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(1, newMsg.getRepeatedInt32Count());
+ assertEquals(123, newMsg.getRepeatedInt32(0));
+
+ // Test 2 entries
+ msg.clear()
+ .addRepeatedInt32(123)
+ .addRepeatedInt32(456);
+ assertEquals(2, msg.getRepeatedInt32Count());
+ result = msg.toByteArray();
+ msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 7);
+ assertEquals(result.length, msgSerializedSize);
+
+ newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(2, newMsg.getRepeatedInt32Count());
+ assertEquals(123, newMsg.getRepeatedInt32(0));
+ assertEquals(456, newMsg.getRepeatedInt32(1));
+ }
+
+ public void testMicroRepeatedInt64() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ assertEquals(0, msg.getRepeatedInt64Count());
+ msg.addRepeatedInt64(123);
+ assertEquals(1, msg.getRepeatedInt64Count());
+ assertEquals(123, msg.getRepeatedInt64(0));
+ msg.addRepeatedInt64(456);
+ assertEquals(2, msg.getRepeatedInt64Count());
+ assertEquals(123, msg.getRepeatedInt64(0));
+ assertEquals(456, msg.getRepeatedInt64(1));
+ msg.setRepeatedInt64(0, 789);
+ assertEquals(2, msg.getRepeatedInt64Count());
+ assertEquals(789, msg.getRepeatedInt64(0));
+ assertEquals(456, msg.getRepeatedInt64(1));
+ msg.clearRepeatedInt64();
+ assertEquals(0, msg.getRepeatedInt64Count());
+ msg.clearRepeatedInt64()
+ .addRepeatedInt64(456);
+ assertEquals(1, msg.getRepeatedInt64Count());
+ assertEquals(456, msg.getRepeatedInt64(0));
+ msg.clear();
+ assertEquals(0, msg.getRepeatedInt64Count());
+
+ // Test 1 entry
+ msg.clear()
+ .addRepeatedInt64(123);
+ assertEquals(1, msg.getRepeatedInt64Count());
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 3);
+ assertEquals(result.length, msgSerializedSize);
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(1, newMsg.getRepeatedInt64Count());
+ assertEquals(123, newMsg.getRepeatedInt64(0));
+
+ // Test 2 entries
+ msg.clear()
+ .addRepeatedInt64(123)
+ .addRepeatedInt64(456);
+ assertEquals(2, msg.getRepeatedInt64Count());
+ result = msg.toByteArray();
+ msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 7);
+ assertEquals(result.length, msgSerializedSize);
+
+ newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(2, newMsg.getRepeatedInt64Count());
+ assertEquals(123, newMsg.getRepeatedInt64(0));
+ assertEquals(456, newMsg.getRepeatedInt64(1));
+ }
+
+ public void testMicroRepeatedUint32() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ assertEquals(0, msg.getRepeatedUint32Count());
+ msg.addRepeatedUint32(123);
+ assertEquals(1, msg.getRepeatedUint32Count());
+ assertEquals(123, msg.getRepeatedUint32(0));
+ msg.addRepeatedUint32(456);
+ assertEquals(2, msg.getRepeatedUint32Count());
+ assertEquals(123, msg.getRepeatedUint32(0));
+ assertEquals(456, msg.getRepeatedUint32(1));
+ msg.setRepeatedUint32(0, 789);
+ assertEquals(2, msg.getRepeatedUint32Count());
+ assertEquals(789, msg.getRepeatedUint32(0));
+ assertEquals(456, msg.getRepeatedUint32(1));
+ msg.clearRepeatedUint32();
+ assertEquals(0, msg.getRepeatedUint32Count());
+ msg.clearRepeatedUint32()
+ .addRepeatedUint32(456);
+ assertEquals(1, msg.getRepeatedUint32Count());
+ assertEquals(456, msg.getRepeatedUint32(0));
+ msg.clear();
+ assertEquals(0, msg.getRepeatedUint32Count());
+
+ // Test 1 entry
+ msg.clear()
+ .addRepeatedUint32(123);
+ assertEquals(1, msg.getRepeatedUint32Count());
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 3);
+ assertEquals(result.length, msgSerializedSize);
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(1, newMsg.getRepeatedUint32Count());
+ assertEquals(123, newMsg.getRepeatedUint32(0));
+
+ // Test 2 entries
+ msg.clear()
+ .addRepeatedUint32(123)
+ .addRepeatedUint32(456);
+ assertEquals(2, msg.getRepeatedUint32Count());
+ result = msg.toByteArray();
+ msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 7);
+ assertEquals(result.length, msgSerializedSize);
+
+ newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(2, newMsg.getRepeatedUint32Count());
+ assertEquals(123, newMsg.getRepeatedUint32(0));
+ assertEquals(456, newMsg.getRepeatedUint32(1));
+ }
+
+ public void testMicroRepeatedUint64() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ assertEquals(0, msg.getRepeatedUint64Count());
+ msg.addRepeatedUint64(123);
+ assertEquals(1, msg.getRepeatedUint64Count());
+ assertEquals(123, msg.getRepeatedUint64(0));
+ msg.addRepeatedUint64(456);
+ assertEquals(2, msg.getRepeatedUint64Count());
+ assertEquals(123, msg.getRepeatedUint64(0));
+ assertEquals(456, msg.getRepeatedUint64(1));
+ msg.setRepeatedUint64(0, 789);
+ assertEquals(2, msg.getRepeatedUint64Count());
+ assertEquals(789, msg.getRepeatedUint64(0));
+ assertEquals(456, msg.getRepeatedUint64(1));
+ msg.clearRepeatedUint64();
+ assertEquals(0, msg.getRepeatedUint64Count());
+ msg.clearRepeatedUint64()
+ .addRepeatedUint64(456);
+ assertEquals(1, msg.getRepeatedUint64Count());
+ assertEquals(456, msg.getRepeatedUint64(0));
+ msg.clear();
+ assertEquals(0, msg.getRepeatedUint64Count());
+
+ // Test 1 entry
+ msg.clear()
+ .addRepeatedUint64(123);
+ assertEquals(1, msg.getRepeatedUint64Count());
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 3);
+ assertEquals(result.length, msgSerializedSize);
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(1, newMsg.getRepeatedUint64Count());
+ assertEquals(123, newMsg.getRepeatedUint64(0));
+
+ // Test 2 entries
+ msg.clear()
+ .addRepeatedUint64(123)
+ .addRepeatedUint64(456);
+ assertEquals(2, msg.getRepeatedUint64Count());
+ result = msg.toByteArray();
+ msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 7);
+ assertEquals(result.length, msgSerializedSize);
+
+ newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(2, newMsg.getRepeatedUint64Count());
+ assertEquals(123, newMsg.getRepeatedUint64(0));
+ assertEquals(456, newMsg.getRepeatedUint64(1));
+ }
+
+ public void testMicroRepeatedSint32() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ assertEquals(0, msg.getRepeatedSint32Count());
+ msg.addRepeatedSint32(123);
+ assertEquals(1, msg.getRepeatedSint32Count());
+ assertEquals(123, msg.getRepeatedSint32(0));
+ msg.addRepeatedSint32(456);
+ assertEquals(2, msg.getRepeatedSint32Count());
+ assertEquals(123, msg.getRepeatedSint32(0));
+ assertEquals(456, msg.getRepeatedSint32(1));
+ msg.setRepeatedSint32(0, 789);
+ assertEquals(2, msg.getRepeatedSint32Count());
+ assertEquals(789, msg.getRepeatedSint32(0));
+ assertEquals(456, msg.getRepeatedSint32(1));
+ msg.clearRepeatedSint32();
+ assertEquals(0, msg.getRepeatedSint32Count());
+ msg.clearRepeatedSint32()
+ .addRepeatedSint32(456);
+ assertEquals(1, msg.getRepeatedSint32Count());
+ assertEquals(456, msg.getRepeatedSint32(0));
+ msg.clear();
+ assertEquals(0, msg.getRepeatedSint32Count());
+
+ // Test 1 entry
+ msg.clear()
+ .addRepeatedSint32(123);
+ assertEquals(1, msg.getRepeatedSint32Count());
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 4);
+ assertEquals(result.length, msgSerializedSize);
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(1, newMsg.getRepeatedSint32Count());
+ assertEquals(123, newMsg.getRepeatedSint32(0));
+
+ // Test 2 entries
+ msg.clear()
+ .addRepeatedSint32(123)
+ .addRepeatedSint32(456);
+ assertEquals(2, msg.getRepeatedSint32Count());
+ result = msg.toByteArray();
+ msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 8);
+ assertEquals(result.length, msgSerializedSize);
+
+ newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(2, newMsg.getRepeatedSint32Count());
+ assertEquals(123, newMsg.getRepeatedSint32(0));
+ assertEquals(456, newMsg.getRepeatedSint32(1));
+ }
+
+ public void testMicroRepeatedSint64() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ assertEquals(0, msg.getRepeatedSint64Count());
+ msg.addRepeatedSint64(123);
+ assertEquals(1, msg.getRepeatedSint64Count());
+ assertEquals(123, msg.getRepeatedSint64(0));
+ msg.addRepeatedSint64(456);
+ assertEquals(2, msg.getRepeatedSint64Count());
+ assertEquals(123, msg.getRepeatedSint64(0));
+ assertEquals(456, msg.getRepeatedSint64(1));
+ msg.setRepeatedSint64(0, 789);
+ assertEquals(2, msg.getRepeatedSint64Count());
+ assertEquals(789, msg.getRepeatedSint64(0));
+ assertEquals(456, msg.getRepeatedSint64(1));
+ msg.clearRepeatedSint64();
+ assertEquals(0, msg.getRepeatedSint64Count());
+ msg.clearRepeatedSint64()
+ .addRepeatedSint64(456);
+ assertEquals(1, msg.getRepeatedSint64Count());
+ assertEquals(456, msg.getRepeatedSint64(0));
+ msg.clear();
+ assertEquals(0, msg.getRepeatedSint64Count());
+
+ // Test 1 entry
+ msg.clear()
+ .addRepeatedSint64(123);
+ assertEquals(1, msg.getRepeatedSint64Count());
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 4);
+ assertEquals(result.length, msgSerializedSize);
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(1, newMsg.getRepeatedSint64Count());
+ assertEquals(123, newMsg.getRepeatedSint64(0));
+
+ // Test 2 entries
+ msg.clear()
+ .addRepeatedSint64(123)
+ .addRepeatedSint64(456);
+ assertEquals(2, msg.getRepeatedSint64Count());
+ result = msg.toByteArray();
+ msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 8);
+ assertEquals(result.length, msgSerializedSize);
+
+ newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(2, newMsg.getRepeatedSint64Count());
+ assertEquals(123, newMsg.getRepeatedSint64(0));
+ assertEquals(456, newMsg.getRepeatedSint64(1));
+ }
+
+ public void testMicroRepeatedFixed32() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ assertEquals(0, msg.getRepeatedFixed32Count());
+ msg.addRepeatedFixed32(123);
+ assertEquals(1, msg.getRepeatedFixed32Count());
+ assertEquals(123, msg.getRepeatedFixed32(0));
+ msg.addRepeatedFixed32(456);
+ assertEquals(2, msg.getRepeatedFixed32Count());
+ assertEquals(123, msg.getRepeatedFixed32(0));
+ assertEquals(456, msg.getRepeatedFixed32(1));
+ msg.setRepeatedFixed32(0, 789);
+ assertEquals(2, msg.getRepeatedFixed32Count());
+ assertEquals(789, msg.getRepeatedFixed32(0));
+ assertEquals(456, msg.getRepeatedFixed32(1));
+ msg.clearRepeatedFixed32();
+ assertEquals(0, msg.getRepeatedFixed32Count());
+ msg.clearRepeatedFixed32()
+ .addRepeatedFixed32(456);
+ assertEquals(1, msg.getRepeatedFixed32Count());
+ assertEquals(456, msg.getRepeatedFixed32(0));
+ msg.clear();
+ assertEquals(0, msg.getRepeatedFixed32Count());
+
+ // Test 1 entry
+ msg.clear()
+ .addRepeatedFixed32(123);
+ assertEquals(1, msg.getRepeatedFixed32Count());
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 6);
+ assertEquals(result.length, msgSerializedSize);
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(1, newMsg.getRepeatedFixed32Count());
+ assertEquals(123, newMsg.getRepeatedFixed32(0));
+
+ // Test 2 entries
+ msg.clear()
+ .addRepeatedFixed32(123)
+ .addRepeatedFixed32(456);
+ assertEquals(2, msg.getRepeatedFixed32Count());
+ result = msg.toByteArray();
+ msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 12);
+ assertEquals(result.length, msgSerializedSize);
+
+ newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(2, newMsg.getRepeatedFixed32Count());
+ assertEquals(123, newMsg.getRepeatedFixed32(0));
+ assertEquals(456, newMsg.getRepeatedFixed32(1));
+ }
+
+ public void testMicroRepeatedFixed64() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ assertEquals(0, msg.getRepeatedFixed64Count());
+ msg.addRepeatedFixed64(123);
+ assertEquals(1, msg.getRepeatedFixed64Count());
+ assertEquals(123, msg.getRepeatedFixed64(0));
+ msg.addRepeatedFixed64(456);
+ assertEquals(2, msg.getRepeatedFixed64Count());
+ assertEquals(123, msg.getRepeatedFixed64(0));
+ assertEquals(456, msg.getRepeatedFixed64(1));
+ msg.setRepeatedFixed64(0, 789);
+ assertEquals(2, msg.getRepeatedFixed64Count());
+ assertEquals(789, msg.getRepeatedFixed64(0));
+ assertEquals(456, msg.getRepeatedFixed64(1));
+ msg.clearRepeatedFixed64();
+ assertEquals(0, msg.getRepeatedFixed64Count());
+ msg.clearRepeatedFixed64()
+ .addRepeatedFixed64(456);
+ assertEquals(1, msg.getRepeatedFixed64Count());
+ assertEquals(456, msg.getRepeatedFixed64(0));
+ msg.clear();
+ assertEquals(0, msg.getRepeatedFixed64Count());
+
+ // Test 1 entry
+ msg.clear()
+ .addRepeatedFixed64(123);
+ assertEquals(1, msg.getRepeatedFixed64Count());
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 10);
+ assertEquals(result.length, msgSerializedSize);
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(1, newMsg.getRepeatedFixed64Count());
+ assertEquals(123, newMsg.getRepeatedFixed64(0));
+
+ // Test 2 entries
+ msg.clear()
+ .addRepeatedFixed64(123)
+ .addRepeatedFixed64(456);
+ assertEquals(2, msg.getRepeatedFixed64Count());
+ result = msg.toByteArray();
+ msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 20);
+ assertEquals(result.length, msgSerializedSize);
+
+ newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(2, newMsg.getRepeatedFixed64Count());
+ assertEquals(123, newMsg.getRepeatedFixed64(0));
+ assertEquals(456, newMsg.getRepeatedFixed64(1));
+ }
+
+ public void testMicroRepeatedSfixed32() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ assertEquals(0, msg.getRepeatedSfixed32Count());
+ msg.addRepeatedSfixed32(123);
+ assertEquals(1, msg.getRepeatedSfixed32Count());
+ assertEquals(123, msg.getRepeatedSfixed32(0));
+ msg.addRepeatedSfixed32(456);
+ assertEquals(2, msg.getRepeatedSfixed32Count());
+ assertEquals(123, msg.getRepeatedSfixed32(0));
+ assertEquals(456, msg.getRepeatedSfixed32(1));
+ msg.setRepeatedSfixed32(0, 789);
+ assertEquals(2, msg.getRepeatedSfixed32Count());
+ assertEquals(789, msg.getRepeatedSfixed32(0));
+ assertEquals(456, msg.getRepeatedSfixed32(1));
+ msg.clearRepeatedSfixed32();
+ assertEquals(0, msg.getRepeatedSfixed32Count());
+ msg.clearRepeatedSfixed32()
+ .addRepeatedSfixed32(456);
+ assertEquals(1, msg.getRepeatedSfixed32Count());
+ assertEquals(456, msg.getRepeatedSfixed32(0));
+ msg.clear();
+ assertEquals(0, msg.getRepeatedSfixed32Count());
+
+ // Test 1 entry
+ msg.clear()
+ .addRepeatedSfixed32(123);
+ assertEquals(1, msg.getRepeatedSfixed32Count());
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 6);
+ assertEquals(result.length, msgSerializedSize);
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(1, newMsg.getRepeatedSfixed32Count());
+ assertEquals(123, newMsg.getRepeatedSfixed32(0));
+
+ // Test 2 entries
+ msg.clear()
+ .addRepeatedSfixed32(123)
+ .addRepeatedSfixed32(456);
+ assertEquals(2, msg.getRepeatedSfixed32Count());
+ result = msg.toByteArray();
+ msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 12);
+ assertEquals(result.length, msgSerializedSize);
+
+ newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(2, newMsg.getRepeatedSfixed32Count());
+ assertEquals(123, newMsg.getRepeatedSfixed32(0));
+ assertEquals(456, newMsg.getRepeatedSfixed32(1));
+ }
+
+ public void testMicroRepeatedSfixed64() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ assertEquals(0, msg.getRepeatedSfixed64Count());
+ msg.addRepeatedSfixed64(123);
+ assertEquals(1, msg.getRepeatedSfixed64Count());
+ assertEquals(123, msg.getRepeatedSfixed64(0));
+ msg.addRepeatedSfixed64(456);
+ assertEquals(2, msg.getRepeatedSfixed64Count());
+ assertEquals(123, msg.getRepeatedSfixed64(0));
+ assertEquals(456, msg.getRepeatedSfixed64(1));
+ msg.setRepeatedSfixed64(0, 789);
+ assertEquals(2, msg.getRepeatedSfixed64Count());
+ assertEquals(789, msg.getRepeatedSfixed64(0));
+ assertEquals(456, msg.getRepeatedSfixed64(1));
+ msg.clearRepeatedSfixed64();
+ assertEquals(0, msg.getRepeatedSfixed64Count());
+ msg.clearRepeatedSfixed64()
+ .addRepeatedSfixed64(456);
+ assertEquals(1, msg.getRepeatedSfixed64Count());
+ assertEquals(456, msg.getRepeatedSfixed64(0));
+ msg.clear();
+ assertEquals(0, msg.getRepeatedSfixed64Count());
+
+ // Test 1 entry
+ msg.clear()
+ .addRepeatedSfixed64(123);
+ assertEquals(1, msg.getRepeatedSfixed64Count());
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 10);
+ assertEquals(result.length, msgSerializedSize);
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(1, newMsg.getRepeatedSfixed64Count());
+ assertEquals(123, newMsg.getRepeatedSfixed64(0));
+
+ // Test 2 entries
+ msg.clear()
+ .addRepeatedSfixed64(123)
+ .addRepeatedSfixed64(456);
+ assertEquals(2, msg.getRepeatedSfixed64Count());
+ result = msg.toByteArray();
+ msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 20);
+ assertEquals(result.length, msgSerializedSize);
+
+ newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(2, newMsg.getRepeatedSfixed64Count());
+ assertEquals(123, newMsg.getRepeatedSfixed64(0));
+ assertEquals(456, newMsg.getRepeatedSfixed64(1));
+ }
+
+ public void testMicroRepeatedFloat() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ assertEquals(0, msg.getRepeatedFloatCount());
+ msg.addRepeatedFloat(123f);
+ assertEquals(1, msg.getRepeatedFloatCount());
+ assertTrue(123f == msg.getRepeatedFloat(0));
+ msg.addRepeatedFloat(456f);
+ assertEquals(2, msg.getRepeatedFloatCount());
+ assertTrue(123f == msg.getRepeatedFloat(0));
+ assertTrue(456f == msg.getRepeatedFloat(1));
+ msg.setRepeatedFloat(0, 789f);
+ assertEquals(2, msg.getRepeatedFloatCount());
+ assertTrue(789f == msg.getRepeatedFloat(0));
+ assertTrue(456f == msg.getRepeatedFloat(1));
+ msg.clearRepeatedFloat();
+ assertEquals(0, msg.getRepeatedFloatCount());
+ msg.clearRepeatedFloat()
+ .addRepeatedFloat(456f);
+ assertEquals(1, msg.getRepeatedFloatCount());
+ assertTrue(456f == msg.getRepeatedFloat(0));
+ msg.clear();
+ assertEquals(0, msg.getRepeatedFloatCount());
+
+ // Test 1 entry
+ msg.clear()
+ .addRepeatedFloat(123f);
+ assertEquals(1, msg.getRepeatedFloatCount());
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 6);
+ assertEquals(result.length, msgSerializedSize);
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(1, newMsg.getRepeatedFloatCount());
+ assertTrue(123f == newMsg.getRepeatedFloat(0));
+
+ // Test 2 entries
+ msg.clear()
+ .addRepeatedFloat(123f)
+ .addRepeatedFloat(456f);
+ assertEquals(2, msg.getRepeatedFloatCount());
+ result = msg.toByteArray();
+ msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 12);
+ assertEquals(result.length, msgSerializedSize);
+
+ newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(2, newMsg.getRepeatedFloatCount());
+ assertTrue(123f == newMsg.getRepeatedFloat(0));
+ assertTrue(456f == newMsg.getRepeatedFloat(1));
+ }
+
+ public void testMicroRepeatedDouble() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ assertEquals(0, msg.getRepeatedDoubleCount());
+ msg.addRepeatedDouble(123.0);
+ assertEquals(1, msg.getRepeatedDoubleCount());
+ assertTrue(123.0 == msg.getRepeatedDouble(0));
+ msg.addRepeatedDouble(456.0);
+ assertEquals(2, msg.getRepeatedDoubleCount());
+ assertTrue(123.0 == msg.getRepeatedDouble(0));
+ assertTrue(456.0 == msg.getRepeatedDouble(1));
+ msg.setRepeatedDouble(0, 789.0);
+ assertEquals(2, msg.getRepeatedDoubleCount());
+ assertTrue(789.0 == msg.getRepeatedDouble(0));
+ assertTrue(456.0 == msg.getRepeatedDouble(1));
+ msg.clearRepeatedDouble();
+ assertEquals(0, msg.getRepeatedDoubleCount());
+ msg.clearRepeatedDouble()
+ .addRepeatedDouble(456.0);
+ assertEquals(1, msg.getRepeatedDoubleCount());
+ assertTrue(456.0 == msg.getRepeatedDouble(0));
+ msg.clear();
+ assertEquals(0, msg.getRepeatedDoubleCount());
+
+ // Test 1 entry
+ msg.clear()
+ .addRepeatedDouble(123.0);
+ assertEquals(1, msg.getRepeatedDoubleCount());
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 10);
+ assertEquals(result.length, msgSerializedSize);
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(1, newMsg.getRepeatedDoubleCount());
+ assertTrue(123.0 == newMsg.getRepeatedDouble(0));
+
+ // Test 2 entries
+ msg.clear()
+ .addRepeatedDouble(123.0)
+ .addRepeatedDouble(456.0);
+ assertEquals(2, msg.getRepeatedDoubleCount());
+ result = msg.toByteArray();
+ msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 20);
+ assertEquals(result.length, msgSerializedSize);
+
+ newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(2, newMsg.getRepeatedDoubleCount());
+ assertTrue(123.0 == newMsg.getRepeatedDouble(0));
+ assertTrue(456.0 == newMsg.getRepeatedDouble(1));
+ }
+
+ public void testMicroRepeatedBool() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ assertEquals(0, msg.getRepeatedBoolCount());
+ msg.addRepeatedBool(true);
+ assertEquals(1, msg.getRepeatedBoolCount());
+ assertEquals(true, msg.getRepeatedBool(0));
+ msg.addRepeatedBool(false);
+ assertEquals(2, msg.getRepeatedBoolCount());
+ assertEquals(true, msg.getRepeatedBool(0));
+ assertEquals(false, msg.getRepeatedBool(1));
+ msg.setRepeatedBool(0, false);
+ assertEquals(2, msg.getRepeatedBoolCount());
+ assertEquals(false, msg.getRepeatedBool(0));
+ assertEquals(false, msg.getRepeatedBool(1));
+ msg.clearRepeatedBool();
+ assertEquals(0, msg.getRepeatedBoolCount());
+ msg.clearRepeatedBool()
+ .addRepeatedBool(true);
+ assertEquals(1, msg.getRepeatedBoolCount());
+ assertEquals(true, msg.getRepeatedBool(0));
+ msg.clear();
+ assertEquals(0, msg.getRepeatedBoolCount());
+
+ // Test 1 entry
+ msg.clear()
+ .addRepeatedBool(false);
+ assertEquals(1, msg.getRepeatedBoolCount());
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 3);
+ assertEquals(result.length, msgSerializedSize);
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(1, newMsg.getRepeatedBoolCount());
+ assertEquals(false, newMsg.getRepeatedBool(0));
+
+ // Test 2 entries
+ msg.clear()
+ .addRepeatedBool(true)
+ .addRepeatedBool(false);
+ assertEquals(2, msg.getRepeatedBoolCount());
+ result = msg.toByteArray();
+ msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 6);
+ assertEquals(result.length, msgSerializedSize);
+
+ newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(2, newMsg.getRepeatedBoolCount());
+ assertEquals(true, newMsg.getRepeatedBool(0));
+ assertEquals(false, newMsg.getRepeatedBool(1));
+ }
+
+ public void testMicroRepeatedString() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ assertEquals(0, msg.getRepeatedStringCount());
+ msg.addRepeatedString("hello");
+ assertEquals(1, msg.getRepeatedStringCount());
+ assertEquals("hello", msg.getRepeatedString(0));
+ msg.addRepeatedString("bye");
+ assertEquals(2, msg.getRepeatedStringCount());
+ assertEquals("hello", msg.getRepeatedString(0));
+ assertEquals("bye", msg.getRepeatedString(1));
+ msg.setRepeatedString(0, "boo");
+ assertEquals(2, msg.getRepeatedStringCount());
+ assertEquals("boo", msg.getRepeatedString(0));
+ assertEquals("bye", msg.getRepeatedString(1));
+ msg.clearRepeatedString();
+ assertEquals(0, msg.getRepeatedStringCount());
+ msg.clearRepeatedString()
+ .addRepeatedString("hello");
+ assertEquals(1, msg.getRepeatedStringCount());
+ assertEquals("hello", msg.getRepeatedString(0));
+ msg.clear();
+ assertEquals(0, msg.getRepeatedStringCount());
+
+ // Test 1 entry and an empty string
+ msg.clear()
+ .addRepeatedString("");
+ assertEquals(1, msg.getRepeatedStringCount());
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 3);
+ assertEquals(result.length, msgSerializedSize);
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(1, newMsg.getRepeatedStringCount());
+ assertEquals("", newMsg.getRepeatedString(0));
+
+ // Test 2 entries
+ msg.clear()
+ .addRepeatedString("hello")
+ .addRepeatedString("world");
+ assertEquals(2, msg.getRepeatedStringCount());
+ result = msg.toByteArray();
+ msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 16);
+ assertEquals(result.length, msgSerializedSize);
+
+ newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(2, newMsg.getRepeatedStringCount());
+ assertEquals("hello", newMsg.getRepeatedString(0));
+ assertEquals("world", newMsg.getRepeatedString(1));
+ }
+
+ public void testMicroRepeatedBytes() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ assertEquals(0, msg.getRepeatedBytesCount());
+ msg.addRepeatedBytes(ByteStringMicro.copyFromUtf8("hello"));
+ assertEquals(1, msg.getRepeatedBytesCount());
+ assertEquals("hello", msg.getRepeatedBytes(0).toStringUtf8());
+ msg.addRepeatedBytes(ByteStringMicro.copyFromUtf8("bye"));
+ assertEquals(2, msg.getRepeatedBytesCount());
+ assertEquals("hello", msg.getRepeatedBytes(0).toStringUtf8());
+ assertEquals("bye", msg.getRepeatedBytes(1).toStringUtf8());
+ msg.setRepeatedBytes(0, ByteStringMicro.copyFromUtf8("boo"));
+ assertEquals(2, msg.getRepeatedBytesCount());
+ assertEquals("boo", msg.getRepeatedBytes(0).toStringUtf8());
+ assertEquals("bye", msg.getRepeatedBytes(1).toStringUtf8());
+ msg.clearRepeatedBytes();
+ assertEquals(0, msg.getRepeatedBytesCount());
+ msg.clearRepeatedBytes()
+ .addRepeatedBytes(ByteStringMicro.copyFromUtf8("hello"));
+ assertEquals(1, msg.getRepeatedBytesCount());
+ assertEquals("hello", msg.getRepeatedBytes(0).toStringUtf8());
+ msg.clear();
+ assertEquals(0, msg.getRepeatedBytesCount());
+
+ // Test 1 entry and an empty byte array can be serialized
+ msg.clear()
+ .addRepeatedBytes(ByteStringMicro.copyFromUtf8(""));
+ assertEquals(1, msg.getRepeatedBytesCount());
+ assertEquals("", msg.getRepeatedBytes(0).toStringUtf8());
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 3);
+ assertEquals(result.length, msgSerializedSize);
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(1, newMsg.getRepeatedBytesCount());
+ assertEquals("", newMsg.getRepeatedBytes(0).toStringUtf8());
+
+ // Test 2 entries
+ msg.clear()
+ .addRepeatedBytes(ByteStringMicro.copyFromUtf8("hello"))
+ .addRepeatedBytes(ByteStringMicro.copyFromUtf8("world"));
+ assertEquals(2, msg.getRepeatedBytesCount());
+ result = msg.toByteArray();
+ msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 16);
+ assertEquals(result.length, msgSerializedSize);
+
+ newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(2, newMsg.getRepeatedBytesCount());
+ assertEquals("hello", newMsg.getRepeatedBytes(0).toStringUtf8());
+ assertEquals("world", newMsg.getRepeatedBytes(1).toStringUtf8());
+ }
+
+ public void testMicroRepeatedGroup() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ TestAllTypesMicro.RepeatedGroup group0 =
+ new TestAllTypesMicro.RepeatedGroup().setA(0);
+ TestAllTypesMicro.RepeatedGroup group1 =
+ new TestAllTypesMicro.RepeatedGroup().setA(1);
+ TestAllTypesMicro.RepeatedGroup group2 =
+ new TestAllTypesMicro.RepeatedGroup().setA(2);
+
+ msg.addRepeatedGroup(group0);
+ assertEquals(1, msg.getRepeatedGroupCount());
+ assertEquals(0, msg.getRepeatedGroup(0).getA());
+ msg.addRepeatedGroup(group1);
+ assertEquals(2, msg.getRepeatedGroupCount());
+ assertEquals(0, msg.getRepeatedGroup(0).getA());
+ assertEquals(1, msg.getRepeatedGroup(1).getA());
+ msg.setRepeatedGroup(0, group2);
+ assertEquals(2, msg.getRepeatedGroupCount());
+ assertEquals(2, msg.getRepeatedGroup(0).getA());
+ assertEquals(1, msg.getRepeatedGroup(1).getA());
+ msg.clearRepeatedGroup();
+ assertEquals(0, msg.getRepeatedGroupCount());
+ msg.clearRepeatedGroup()
+ .addRepeatedGroup(group1);
+ assertEquals(1, msg.getRepeatedGroupCount());
+ assertEquals(1, msg.getRepeatedGroup(0).getA());
+ msg.clear();
+ assertEquals(0, msg.getRepeatedGroupCount());
+
+ // Test 1 entry
+ msg.clear()
+ .addRepeatedGroup(group0);
+ assertEquals(1, msg.getRepeatedGroupCount());
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 7);
+ assertEquals(result.length, msgSerializedSize);
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(1, newMsg.getRepeatedGroupCount());
+ assertEquals(0, newMsg.getRepeatedGroup(0).getA());
+
+ // Test 2 entries
+ msg.clear()
+ .addRepeatedGroup(group0)
+ .addRepeatedGroup(group1);
+ assertEquals(2, msg.getRepeatedGroupCount());
+ result = msg.toByteArray();
+ msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 14);
+ assertEquals(result.length, msgSerializedSize);
+
+ newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(2, newMsg.getRepeatedGroupCount());
+ assertEquals(0, newMsg.getRepeatedGroup(0).getA());
+ assertEquals(1, newMsg.getRepeatedGroup(1).getA());
+ }
+
+
+ public void testMicroRepeatedNestedMessage() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ TestAllTypesMicro.NestedMessage nestedMsg0 =
+ new TestAllTypesMicro.NestedMessage().setBb(0);
+ TestAllTypesMicro.NestedMessage nestedMsg1 =
+ new TestAllTypesMicro.NestedMessage().setBb(1);
+ TestAllTypesMicro.NestedMessage nestedMsg2 =
+ new TestAllTypesMicro.NestedMessage().setBb(2);
+
+ msg.addRepeatedNestedMessage(nestedMsg0);
+ assertEquals(1, msg.getRepeatedNestedMessageCount());
+ assertEquals(0, msg.getRepeatedNestedMessage(0).getBb());
+ msg.addRepeatedNestedMessage(nestedMsg1);
+ assertEquals(2, msg.getRepeatedNestedMessageCount());
+ assertEquals(0, msg.getRepeatedNestedMessage(0).getBb());
+ assertEquals(1, msg.getRepeatedNestedMessage(1).getBb());
+ msg.setRepeatedNestedMessage(0, nestedMsg2);
+ assertEquals(2, msg.getRepeatedNestedMessageCount());
+ assertEquals(2, msg.getRepeatedNestedMessage(0).getBb());
+ assertEquals(1, msg.getRepeatedNestedMessage(1).getBb());
+ msg.clearRepeatedNestedMessage();
+ assertEquals(0, msg.getRepeatedNestedMessageCount());
+ msg.clearRepeatedNestedMessage()
+ .addRepeatedNestedMessage(nestedMsg1);
+ assertEquals(1, msg.getRepeatedNestedMessageCount());
+ assertEquals(1, msg.getRepeatedNestedMessage(0).getBb());
+ msg.clear();
+ assertEquals(0, msg.getRepeatedNestedMessageCount());
+
+ // Test 1 entry
+ msg.clear()
+ .addRepeatedNestedMessage(nestedMsg0);
+ assertEquals(1, msg.getRepeatedNestedMessageCount());
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 5);
+ assertEquals(result.length, msgSerializedSize);
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(1, newMsg.getRepeatedNestedMessageCount());
+ assertEquals(0, newMsg.getRepeatedNestedMessage(0).getBb());
+
+ // Test 2 entries
+ msg.clear()
+ .addRepeatedNestedMessage(nestedMsg0)
+ .addRepeatedNestedMessage(nestedMsg1);
+ assertEquals(2, msg.getRepeatedNestedMessageCount());
+ result = msg.toByteArray();
+ msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 10);
+ assertEquals(result.length, msgSerializedSize);
+
+ newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(2, newMsg.getRepeatedNestedMessageCount());
+ assertEquals(0, newMsg.getRepeatedNestedMessage(0).getBb());
+ assertEquals(1, newMsg.getRepeatedNestedMessage(1).getBb());
+ }
+
+ public void testMicroRepeatedForeignMessage() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ MicroOuterClass.ForeignMessageMicro foreignMsg0 =
+ new MicroOuterClass.ForeignMessageMicro().setC(0);
+ MicroOuterClass.ForeignMessageMicro foreignMsg1 =
+ new MicroOuterClass.ForeignMessageMicro().setC(1);
+ MicroOuterClass.ForeignMessageMicro foreignMsg2 =
+ new MicroOuterClass.ForeignMessageMicro().setC(2);
+
+ msg.addRepeatedForeignMessage(foreignMsg0);
+ assertEquals(1, msg.getRepeatedForeignMessageCount());
+ assertEquals(0, msg.getRepeatedForeignMessage(0).getC());
+ msg.addRepeatedForeignMessage(foreignMsg1);
+ assertEquals(2, msg.getRepeatedForeignMessageCount());
+ assertEquals(0, msg.getRepeatedForeignMessage(0).getC());
+ assertEquals(1, msg.getRepeatedForeignMessage(1).getC());
+ msg.setRepeatedForeignMessage(0, foreignMsg2);
+ assertEquals(2, msg.getRepeatedForeignMessageCount());
+ assertEquals(2, msg.getRepeatedForeignMessage(0).getC());
+ assertEquals(1, msg.getRepeatedForeignMessage(1).getC());
+ msg.clearRepeatedForeignMessage();
+ assertEquals(0, msg.getRepeatedForeignMessageCount());
+ msg.clearRepeatedForeignMessage()
+ .addRepeatedForeignMessage(foreignMsg1);
+ assertEquals(1, msg.getRepeatedForeignMessageCount());
+ assertEquals(1, msg.getRepeatedForeignMessage(0).getC());
+ msg.clear();
+ assertEquals(0, msg.getRepeatedForeignMessageCount());
+
+ // Test 1 entry
+ msg.clear()
+ .addRepeatedForeignMessage(foreignMsg0);
+ assertEquals(1, msg.getRepeatedForeignMessageCount());
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 5);
+ assertEquals(result.length, msgSerializedSize);
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(1, newMsg.getRepeatedForeignMessageCount());
+ assertEquals(0, newMsg.getRepeatedForeignMessage(0).getC());
+
+ // Test 2 entries
+ msg.clear()
+ .addRepeatedForeignMessage(foreignMsg0)
+ .addRepeatedForeignMessage(foreignMsg1);
+ assertEquals(2, msg.getRepeatedForeignMessageCount());
+ result = msg.toByteArray();
+ msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 10);
+ assertEquals(result.length, msgSerializedSize);
+
+ newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(2, newMsg.getRepeatedForeignMessageCount());
+ assertEquals(0, newMsg.getRepeatedForeignMessage(0).getC());
+ assertEquals(1, newMsg.getRepeatedForeignMessage(1).getC());
+ }
+
+ public void testMicroRepeatedImportMessage() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ UnittestImportMicro.ImportMessageMicro importMsg0 =
+ new UnittestImportMicro.ImportMessageMicro().setD(0);
+ UnittestImportMicro.ImportMessageMicro importMsg1 =
+ new UnittestImportMicro.ImportMessageMicro().setD(1);
+ UnittestImportMicro.ImportMessageMicro importMsg2 =
+ new UnittestImportMicro.ImportMessageMicro().setD(2);
+
+ msg.addRepeatedImportMessage(importMsg0);
+ assertEquals(1, msg.getRepeatedImportMessageCount());
+ assertEquals(0, msg.getRepeatedImportMessage(0).getD());
+ msg.addRepeatedImportMessage(importMsg1);
+ assertEquals(2, msg.getRepeatedImportMessageCount());
+ assertEquals(0, msg.getRepeatedImportMessage(0).getD());
+ assertEquals(1, msg.getRepeatedImportMessage(1).getD());
+ msg.setRepeatedImportMessage(0, importMsg2);
+ assertEquals(2, msg.getRepeatedImportMessageCount());
+ assertEquals(2, msg.getRepeatedImportMessage(0).getD());
+ assertEquals(1, msg.getRepeatedImportMessage(1).getD());
+ msg.clearRepeatedImportMessage();
+ assertEquals(0, msg.getRepeatedImportMessageCount());
+ msg.clearRepeatedImportMessage()
+ .addRepeatedImportMessage(importMsg1);
+ assertEquals(1, msg.getRepeatedImportMessageCount());
+ assertEquals(1, msg.getRepeatedImportMessage(0).getD());
+ msg.clear();
+ assertEquals(0, msg.getRepeatedImportMessageCount());
+
+ // Test 1 entry
+ msg.clear()
+ .addRepeatedImportMessage(importMsg0);
+ assertEquals(1, msg.getRepeatedImportMessageCount());
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 5);
+ assertEquals(result.length, msgSerializedSize);
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(1, newMsg.getRepeatedImportMessageCount());
+ assertEquals(0, newMsg.getRepeatedImportMessage(0).getD());
+
+ // Test 2 entries
+ msg.clear()
+ .addRepeatedImportMessage(importMsg0)
+ .addRepeatedImportMessage(importMsg1);
+ assertEquals(2, msg.getRepeatedImportMessageCount());
+ result = msg.toByteArray();
+ msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 10);
+ assertEquals(result.length, msgSerializedSize);
+
+ newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(2, newMsg.getRepeatedImportMessageCount());
+ assertEquals(0, newMsg.getRepeatedImportMessage(0).getD());
+ assertEquals(1, newMsg.getRepeatedImportMessage(1).getD());
+ }
+
+ public void testMicroRepeatedNestedEnum() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ msg.addRepeatedNestedEnum(TestAllTypesMicro.FOO);
+ assertEquals(1, msg.getRepeatedNestedEnumCount());
+ assertEquals(TestAllTypesMicro.FOO, msg.getRepeatedNestedEnum(0));
+ msg.addRepeatedNestedEnum(TestAllTypesMicro.BAR);
+ assertEquals(2, msg.getRepeatedNestedEnumCount());
+ assertEquals(TestAllTypesMicro.FOO, msg.getRepeatedNestedEnum(0));
+ assertEquals(TestAllTypesMicro.BAR, msg.getRepeatedNestedEnum(1));
+ msg.setRepeatedNestedEnum(0, TestAllTypesMicro.BAZ);
+ assertEquals(2, msg.getRepeatedNestedEnumCount());
+ assertEquals(TestAllTypesMicro.BAZ, msg.getRepeatedNestedEnum(0));
+ assertEquals(TestAllTypesMicro.BAR, msg.getRepeatedNestedEnum(1));
+ msg.clearRepeatedNestedEnum();
+ assertEquals(0, msg.getRepeatedNestedEnumCount());
+ msg.clearRepeatedNestedEnum()
+ .addRepeatedNestedEnum(TestAllTypesMicro.BAR);
+ assertEquals(1, msg.getRepeatedNestedEnumCount());
+ assertEquals(TestAllTypesMicro.BAR, msg.getRepeatedNestedEnum(0));
+ msg.clear();
+ assertEquals(0, msg.getRepeatedNestedEnumCount());
+
+ // Test 1 entry
+ msg.clear()
+ .addRepeatedNestedEnum(TestAllTypesMicro.FOO);
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 3);
+ assertEquals(result.length, msgSerializedSize);
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(1, newMsg.getRepeatedNestedEnumCount());
+ assertEquals(TestAllTypesMicro.FOO, msg.getRepeatedNestedEnum(0));
+
+ // Test 2 entries
+ msg.clear()
+ .addRepeatedNestedEnum(TestAllTypesMicro.FOO)
+ .addRepeatedNestedEnum(TestAllTypesMicro.BAR);
+ assertEquals(2, msg.getRepeatedNestedEnumCount());
+ result = msg.toByteArray();
+ msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 6);
+ assertEquals(result.length, msgSerializedSize);
+
+ newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(2, newMsg.getRepeatedNestedEnumCount());
+ assertEquals(TestAllTypesMicro.FOO, msg.getRepeatedNestedEnum(0));
+ assertEquals(TestAllTypesMicro.BAR, msg.getRepeatedNestedEnum(1));
+ }
+
+ public void testMicroRepeatedForeignEnum() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ msg.addRepeatedForeignEnum(MicroOuterClass.FOREIGN_MICRO_FOO);
+ assertEquals(1, msg.getRepeatedForeignEnumCount());
+ assertEquals(MicroOuterClass.FOREIGN_MICRO_FOO, msg.getRepeatedForeignEnum(0));
+ msg.addRepeatedForeignEnum(MicroOuterClass.FOREIGN_MICRO_BAR);
+ assertEquals(2, msg.getRepeatedForeignEnumCount());
+ assertEquals(MicroOuterClass.FOREIGN_MICRO_FOO, msg.getRepeatedForeignEnum(0));
+ assertEquals(MicroOuterClass.FOREIGN_MICRO_BAR, msg.getRepeatedForeignEnum(1));
+ msg.setRepeatedForeignEnum(0, MicroOuterClass.FOREIGN_MICRO_BAZ);
+ assertEquals(2, msg.getRepeatedForeignEnumCount());
+ assertEquals(MicroOuterClass.FOREIGN_MICRO_BAZ, msg.getRepeatedForeignEnum(0));
+ assertEquals(MicroOuterClass.FOREIGN_MICRO_BAR, msg.getRepeatedForeignEnum(1));
+ msg.clearRepeatedForeignEnum();
+ assertEquals(0, msg.getRepeatedForeignEnumCount());
+ msg.clearRepeatedForeignEnum()
+ .addRepeatedForeignEnum(MicroOuterClass.FOREIGN_MICRO_BAR);
+ assertEquals(1, msg.getRepeatedForeignEnumCount());
+ assertEquals(MicroOuterClass.FOREIGN_MICRO_BAR, msg.getRepeatedForeignEnum(0));
+ msg.clear();
+ assertEquals(0, msg.getRepeatedForeignEnumCount());
+
+ // Test 1 entry
+ msg.clear()
+ .addRepeatedForeignEnum(MicroOuterClass.FOREIGN_MICRO_FOO);
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 3);
+ assertEquals(result.length, msgSerializedSize);
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(1, newMsg.getRepeatedForeignEnumCount());
+ assertEquals(MicroOuterClass.FOREIGN_MICRO_FOO, msg.getRepeatedForeignEnum(0));
+
+ // Test 2 entries
+ msg.clear()
+ .addRepeatedForeignEnum(MicroOuterClass.FOREIGN_MICRO_FOO)
+ .addRepeatedForeignEnum(MicroOuterClass.FOREIGN_MICRO_BAR);
+ assertEquals(2, msg.getRepeatedForeignEnumCount());
+ result = msg.toByteArray();
+ msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 6);
+ assertEquals(result.length, msgSerializedSize);
+
+ newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(2, newMsg.getRepeatedForeignEnumCount());
+ assertEquals(MicroOuterClass.FOREIGN_MICRO_FOO, msg.getRepeatedForeignEnum(0));
+ assertEquals(MicroOuterClass.FOREIGN_MICRO_BAR, msg.getRepeatedForeignEnum(1));
+ }
+
+ public void testMicroRepeatedImportEnum() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ msg.addRepeatedImportEnum(UnittestImportMicro.IMPORT_MICRO_FOO);
+ assertEquals(1, msg.getRepeatedImportEnumCount());
+ assertEquals(UnittestImportMicro.IMPORT_MICRO_FOO, msg.getRepeatedImportEnum(0));
+ msg.addRepeatedImportEnum(UnittestImportMicro.IMPORT_MICRO_BAR);
+ assertEquals(2, msg.getRepeatedImportEnumCount());
+ assertEquals(UnittestImportMicro.IMPORT_MICRO_FOO, msg.getRepeatedImportEnum(0));
+ assertEquals(UnittestImportMicro.IMPORT_MICRO_BAR, msg.getRepeatedImportEnum(1));
+ msg.setRepeatedImportEnum(0, UnittestImportMicro.IMPORT_MICRO_BAZ);
+ assertEquals(2, msg.getRepeatedImportEnumCount());
+ assertEquals(UnittestImportMicro.IMPORT_MICRO_BAZ, msg.getRepeatedImportEnum(0));
+ assertEquals(UnittestImportMicro.IMPORT_MICRO_BAR, msg.getRepeatedImportEnum(1));
+ msg.clearRepeatedImportEnum();
+ assertEquals(0, msg.getRepeatedImportEnumCount());
+ msg.clearRepeatedImportEnum()
+ .addRepeatedImportEnum(UnittestImportMicro.IMPORT_MICRO_BAR);
+ assertEquals(1, msg.getRepeatedImportEnumCount());
+ assertEquals(UnittestImportMicro.IMPORT_MICRO_BAR, msg.getRepeatedImportEnum(0));
+ msg.clear();
+ assertEquals(0, msg.getRepeatedImportEnumCount());
+
+ // Test 1 entry
+ msg.clear()
+ .addRepeatedImportEnum(UnittestImportMicro.IMPORT_MICRO_FOO);
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 3);
+ assertEquals(result.length, msgSerializedSize);
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(1, newMsg.getRepeatedImportEnumCount());
+ assertEquals(UnittestImportMicro.IMPORT_MICRO_FOO, msg.getRepeatedImportEnum(0));
+
+ // Test 2 entries
+ msg.clear()
+ .addRepeatedImportEnum(UnittestImportMicro.IMPORT_MICRO_FOO)
+ .addRepeatedImportEnum(UnittestImportMicro.IMPORT_MICRO_BAR);
+ assertEquals(2, msg.getRepeatedImportEnumCount());
+ result = msg.toByteArray();
+ msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 6);
+ assertEquals(result.length, msgSerializedSize);
+
+ newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(2, newMsg.getRepeatedImportEnumCount());
+ assertEquals(UnittestImportMicro.IMPORT_MICRO_FOO, msg.getRepeatedImportEnum(0));
+ assertEquals(UnittestImportMicro.IMPORT_MICRO_BAR, msg.getRepeatedImportEnum(1));
+ }
+
+ public void testMicroRepeatedStringPiece() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ assertEquals(0, msg.getRepeatedStringPieceCount());
+ msg.addRepeatedStringPiece("hello");
+ assertEquals(1, msg.getRepeatedStringPieceCount());
+ assertEquals("hello", msg.getRepeatedStringPiece(0));
+ msg.addRepeatedStringPiece("bye");
+ assertEquals(2, msg.getRepeatedStringPieceCount());
+ assertEquals("hello", msg.getRepeatedStringPiece(0));
+ assertEquals("bye", msg.getRepeatedStringPiece(1));
+ msg.setRepeatedStringPiece(0, "boo");
+ assertEquals(2, msg.getRepeatedStringPieceCount());
+ assertEquals("boo", msg.getRepeatedStringPiece(0));
+ assertEquals("bye", msg.getRepeatedStringPiece(1));
+ msg.clearRepeatedStringPiece();
+ assertEquals(0, msg.getRepeatedStringPieceCount());
+ msg.clearRepeatedStringPiece()
+ .addRepeatedStringPiece("hello");
+ assertEquals(1, msg.getRepeatedStringPieceCount());
+ assertEquals("hello", msg.getRepeatedStringPiece(0));
+ msg.clear();
+ assertEquals(0, msg.getRepeatedStringPieceCount());
+
+ // Test 1 entry and an empty string
+ msg.clear()
+ .addRepeatedStringPiece("");
+ assertEquals(1, msg.getRepeatedStringPieceCount());
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 3);
+ assertEquals(result.length, msgSerializedSize);
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(1, newMsg.getRepeatedStringPieceCount());
+ assertEquals("", newMsg.getRepeatedStringPiece(0));
+
+ // Test 2 entries
+ msg.clear()
+ .addRepeatedStringPiece("hello")
+ .addRepeatedStringPiece("world");
+ assertEquals(2, msg.getRepeatedStringPieceCount());
+ result = msg.toByteArray();
+ msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 16);
+ assertEquals(result.length, msgSerializedSize);
+
+ newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(2, newMsg.getRepeatedStringPieceCount());
+ assertEquals("hello", newMsg.getRepeatedStringPiece(0));
+ assertEquals("world", newMsg.getRepeatedStringPiece(1));
+ }
+
+ public void testMicroRepeatedCord() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ assertEquals(0, msg.getRepeatedCordCount());
+ msg.addRepeatedCord("hello");
+ assertEquals(1, msg.getRepeatedCordCount());
+ assertEquals("hello", msg.getRepeatedCord(0));
+ msg.addRepeatedCord("bye");
+ assertEquals(2, msg.getRepeatedCordCount());
+ assertEquals("hello", msg.getRepeatedCord(0));
+ assertEquals("bye", msg.getRepeatedCord(1));
+ msg.setRepeatedCord(0, "boo");
+ assertEquals(2, msg.getRepeatedCordCount());
+ assertEquals("boo", msg.getRepeatedCord(0));
+ assertEquals("bye", msg.getRepeatedCord(1));
+ msg.clearRepeatedCord();
+ assertEquals(0, msg.getRepeatedCordCount());
+ msg.clearRepeatedCord()
+ .addRepeatedCord("hello");
+ assertEquals(1, msg.getRepeatedCordCount());
+ assertEquals("hello", msg.getRepeatedCord(0));
+ msg.clear();
+ assertEquals(0, msg.getRepeatedCordCount());
+
+ // Test 1 entry and an empty string
+ msg.clear()
+ .addRepeatedCord("");
+ assertEquals(1, msg.getRepeatedCordCount());
+ byte [] result = msg.toByteArray();
+ int msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 3);
+ assertEquals(result.length, msgSerializedSize);
+ TestAllTypesMicro newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(1, newMsg.getRepeatedCordCount());
+ assertEquals("", newMsg.getRepeatedCord(0));
+
+ // Test 2 entries
+ msg.clear()
+ .addRepeatedCord("hello")
+ .addRepeatedCord("world");
+ assertEquals(2, msg.getRepeatedCordCount());
+ result = msg.toByteArray();
+ msgSerializedSize = msg.getSerializedSize();
+ //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
+ assertTrue(msgSerializedSize == 16);
+ assertEquals(result.length, msgSerializedSize);
+
+ newMsg = TestAllTypesMicro.parseFrom(result);
+ assertEquals(2, newMsg.getRepeatedCordCount());
+ assertEquals("hello", newMsg.getRepeatedCord(0));
+ assertEquals("world", newMsg.getRepeatedCord(1));
+ }
+
+ public void testMicroDefaults() throws Exception {
+ TestAllTypesMicro msg = new TestAllTypesMicro();
+ assertFalse(msg.hasDefaultInt32());
+ assertEquals(41, msg.getDefaultInt32());
+ assertFalse(msg.hasDefaultInt64());
+ assertEquals(42, msg.getDefaultInt64());
+ assertFalse(msg.hasDefaultUint32());
+ assertEquals(43, msg.getDefaultUint32());
+ assertFalse(msg.hasDefaultUint64());
+ assertEquals(44, msg.getDefaultUint64());
+ assertFalse(msg.hasDefaultSint32());
+ assertEquals(-45, msg.getDefaultSint32());
+ assertFalse(msg.hasDefaultSint64());
+ assertEquals(46, msg.getDefaultSint64());
+ assertFalse(msg.hasDefaultFixed32());
+ assertEquals(47, msg.getDefaultFixed32());
+ assertFalse(msg.hasDefaultFixed64());
+ assertEquals(48, msg.getDefaultFixed64());
+ assertFalse(msg.hasDefaultSfixed32());
+ assertEquals(49, msg.getDefaultSfixed32());
+ assertFalse(msg.hasDefaultSfixed64());
+ assertEquals(-50, msg.getDefaultSfixed64());
+ assertFalse(msg.hasDefaultFloat());
+ assertTrue(51.5f == msg.getDefaultFloat());
+ assertFalse(msg.hasDefaultDouble());
+ assertTrue(52.0e3 == msg.getDefaultDouble());
+ assertFalse(msg.hasDefaultBool());
+ assertEquals(true, msg.getDefaultBool());
+ assertFalse(msg.hasDefaultString());
+ assertEquals("hello", msg.getDefaultString());
+ assertFalse(msg.hasDefaultBytes());
+ assertEquals("world", msg.getDefaultBytes().toStringUtf8());
+ assertFalse(msg.hasDefaultNestedEnum());
+ assertEquals(TestAllTypesMicro.BAR, msg.getDefaultNestedEnum());
+ assertFalse(msg.hasDefaultForeignEnum());
+ assertEquals(MicroOuterClass.FOREIGN_MICRO_BAR, msg.getDefaultForeignEnum());
+ assertFalse(msg.hasDefaultImportEnum());
+ assertEquals(UnittestImportMicro.IMPORT_MICRO_BAR, msg.getDefaultImportEnum());
+ }
+}
diff --git a/java/src/test/java/com/google/protobuf/PerfTimer.java b/java/src/test/java/com/google/protobuf/PerfTimer.java
new file mode 100644
index 0000000..d6df4ff
--- /dev/null
+++ b/java/src/test/java/com/google/protobuf/PerfTimer.java
@@ -0,0 +1,832 @@
+/*
+ * Copyright (C) 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.protobuf;
+
+import java.util.Arrays;
+
+/**
+ * A Performance Timing class that can be used to estimate the amount of time a
+ * sequence of code takes. The typical code sequence would be as follows:</p>
+ * <code>
+ PerfTimer pt = new PerfTimer();
+ pt.calibrate();
+ pt.timeEachAutomatically(new Runnable() = {
+ public void run() {
+ // Add code to time
+ }
+ });
+ System.out.printf("time per loop=" + pt);
+
+ * The calibrate method determines the overhead of timing the run() method and
+ * the number of times to call the run() method to have approximately 1% precision
+ * for timing. The method pt.stats() method will return a string containing some
+ * statistics tpl, il, ol, min, max, mean, median, stddev and total.
+ *
+ * tpl ::= Timer per loop
+ * min ::= minimum time one call to run() took
+ * stddev ::= Standard deviation of the collected times
+ * mean ::= the average time to call run()
+ * median ::= 1/2 the times were > than this time and 1/2 were less.
+ * total ::= Sum of the times collected.
+ * il ::= innerLoops; the number of times run() between each call to start/stop
+ * ol ::= outerLoops, the number of times start/stop was called
+ *
+ * You can also use start/stop/restart to do simple timing:
+ *
+ * pt.start();
+ * a += 1;
+ * pt.stop();
+ * pt.log("time=" + pt);
+ * pt.restart();
+ * doSomething();
+ * pt.stop();
+ * System.out.printf("time=" + pt);
+ * </code>
+ *
+ * @author wink@google.com (Wink Saville)
+ */
+public class PerfTimer {
+ /** No debug */
+ public static final int DEBUG_LEVEL_NONE = 0;
+
+ /** Some debug */
+ public static final int DEBUG_LEVEL_SOME = 1;
+
+ /** All debug */
+ public static final int DEBUG_LEVEL_ALL = 2;
+
+ /** Timer ticks per microsecond */
+ private static final double TICKS_PER_MICROSECOND = 1000.0;
+
+ /** Random number generator */
+ java.util.Random rng = new java.util.Random();
+
+ /** get ticks */
+ private static long getTicks() {
+ return System.nanoTime();
+ }
+
+ /** Debug logging */
+ private static void log(String s) {
+ System.out.printf(String.format("[PerfTimer] %s\n", s));
+ }
+
+ /** Outer loops for timeEachAutomatically */
+ private static final int OUTER_LOOPS = 100;
+
+ /** Thrown if an error occurs while timing */
+ public static class PerfTimerException extends RuntimeException {
+ }
+
+ /**
+ * Calibration record
+ */
+ public static class CalibrationRec {
+ /** Runnable overhead */
+ public double mRunnableOverheadInMicros = 0.0;
+
+ /** Minimum Threshold value for timeEachAutomaticaly */
+ public double mMinThresholdInMicros = 3000.0;
+
+ /** Maximum Threshold value for timeEachAutomaticaly */
+ public double mMaxThresholdInMicros = 6000.0;
+
+ /** Desired precision in decimal digits */
+ public double mPrecisionInDecimalDigits = 2.0;
+
+ /**
+ * Default number of retries if the standard deviation ratio is too
+ * large
+ */
+ public final int mStdDevRetrys = 5;
+
+ /** Default maximum standard deviation radio */
+ public final double mMaxStdDevRatio = 0.15;
+
+ /** Number of votes looking for smallest time per loop */
+ public final int mVotes = 3;
+
+ /** Convert to string */
+ @Override
+ public String toString() {
+ return String
+ .format(
+ "oh=%.6fus minT=%.6fus maxT=%.6fus prc=%,.3f stdDevRetrys=%d maxStdDevRatio=%.2f votes=%d",
+ mRunnableOverheadInMicros, mMinThresholdInMicros,
+ mMaxThresholdInMicros, mPrecisionInDecimalDigits, mStdDevRetrys,
+ mMaxStdDevRatio, mVotes);
+ }
+ }
+
+ /**
+ * Calibration record
+ */
+ private CalibrationRec mCr;
+
+ /**
+ * Statistics calculated on the timing data.
+ */
+ public static class Stats {
+ /** Number of outer loops */
+ private int mOuterLoops;
+
+ /** Number of inner loops */
+ private int mInnerLoops;
+
+ /** Minimum time in times array */
+ private long mMin;
+
+ /** Maximum time in times array */
+ private long mMax;
+
+ /** Median value in times array */
+ private double mMedian;
+
+ /** The mean (average) of the values in times array */
+ private double mMean;
+
+ /** The standard deviation of the values in times array */
+ private double mStdDev;
+
+ private int mStdDevTooLargeCount;
+
+ /** Sum of the times in the times array */
+ private double mTotal;
+
+ /** Initialize */
+ public void init() {
+ mInnerLoops = 1;
+ mOuterLoops = 1;
+ mMin = 0;
+ mMax = 0;
+ mMedian = 0;
+ mMean = 0;
+ mStdDev = 0;
+ mStdDevTooLargeCount = 0;
+ mTotal = 0;
+ }
+
+ /** Constructor */
+ public Stats() {
+ init();
+ }
+
+ /** Set number of inner loops */
+ public void setInnerLoops(int loops) {
+ mInnerLoops = loops;
+ }
+
+ /** Get number of inner loops */
+ public int getInnerLoops() {
+ return mInnerLoops;
+ }
+
+ /** Set number of inner loops */
+ public void setOuterLoops(int loops) {
+ mOuterLoops = loops;
+ }
+
+ /** Get number of inner loops */
+ public int getOuterLoops() {
+ return mOuterLoops;
+ }
+
+ /**
+ * Minimum value of collected data in microseconds, valid after analyze.
+ */
+ public double getMinInMicros() {
+ return mMin / TICKS_PER_MICROSECOND;
+ }
+
+ /**
+ * Maximum value of collected data in microseconds, valid after analyze.
+ */
+ public double getMaxInMicros() {
+ return mMax / TICKS_PER_MICROSECOND;
+ }
+
+ /**
+ * Sum of the values of collected data in microseconds, valid after
+ * analyze.
+ */
+ public double getTotalInMicros() {
+ return mTotal / TICKS_PER_MICROSECOND;
+ }
+
+ /** Sum of the values of collected data in seconds, valid after analyze. */
+ public double getTotalInSecs() {
+ return mTotal / (TICKS_PER_MICROSECOND * 1000000.0);
+ }
+
+ /** Sum of the values of collected data in seconds, valid after analyze. */
+ public double getMeanInMicros() {
+ return mMean / TICKS_PER_MICROSECOND;
+ }
+
+ /** Median value of collected data in microseconds, valid after analyze. */
+ public double getMedianInMicros() {
+ return mMedian / TICKS_PER_MICROSECOND;
+ }
+
+ /**
+ * Standard deviation of collected data in microseconds, valid after
+ * analyze.
+ */
+ public double getStdDevInMicros() {
+ return mStdDev / TICKS_PER_MICROSECOND;
+ }
+
+ public double getStdDevRatio() {
+ return mStdDev / mMin;
+ }
+
+ /** Return true if (mStdDev / mMin) <= maxStdDevRation */
+ public boolean stdDevOk(double maxStdDevRatio) {
+ return getStdDevRatio() <= maxStdDevRatio;
+ }
+
+ /** Increment StdDevTooLargeCount */
+ public void incStdDevTooLargeCount() {
+ mStdDevTooLargeCount += 1;
+ }
+
+ /** Return number of times stdDev was not ok */
+ public int getStdDevTooLargeCount() {
+ return mStdDevTooLargeCount;
+ }
+
+ /** Return time per loop */
+ public double getTimePerLoop() {
+ return mMin / TICKS_PER_MICROSECOND / mInnerLoops;
+ }
+
+ /**
+ * Calculate the stats for the data. Note the data in the range will be
+ * sorted.
+ *
+ * @param data
+ * @param count
+ */
+ public Stats calculate(long data[], int count) {
+ if (count == 1) {
+ mMin = mMax = data[0];
+ mTotal = mMedian = mMean = data[0];
+ mStdDev = 0;
+ } else if (count > 1) {
+ Arrays.sort(data, 0, count);
+ mMin = data[0];
+ mMax = data[count - 1];
+ if ((count & 1) == 1) {
+ mMedian = data[((count + 1) / 2) - 1];
+ } else {
+ mMedian = (data[count / 2] + data[(count / 2) - 1]) / 2;
+ }
+ mTotal = 0;
+ double sumSquares = 0;
+ for (int i = 0; i < count; i++) {
+ long t = data[i];
+ mTotal += t;
+ sumSquares += t * t;
+ }
+ mMean = mTotal / count;
+ double variance = (sumSquares / count) - (mMean * mMean);
+ mStdDev = Math.pow(variance, 0.5);
+ } else {
+ init();
+ }
+ return this;
+ }
+
+ /** Convert to string */
+ @Override
+ public String toString() {
+ double timePerLoop = getTimePerLoop();
+ double stdDevPerLoop = mStdDev / TICKS_PER_MICROSECOND / mInnerLoops;
+ return String.format(
+ "tpl=%,.6fus stdDev=%,.6fus tpl/stdDev=%.2fpercent min=%,.6fus median=%,.6fus mean=%,.6fus max=%,.6fus total=%,.6fs il=%d, ol=%d tlc=%d",
+ timePerLoop, stdDevPerLoop, (stdDevPerLoop / timePerLoop) * 100, mMin
+ / TICKS_PER_MICROSECOND, mMedian / TICKS_PER_MICROSECOND, mMean
+ / TICKS_PER_MICROSECOND, mMax / TICKS_PER_MICROSECOND, mTotal
+ / (TICKS_PER_MICROSECOND * 1000000.0), mInnerLoops, mOuterLoops, mStdDevTooLargeCount);
+ }
+ }
+
+ /** Statistics */
+ private Stats mStats = new Stats();
+
+ /** Statistics of the clock precision */
+ private Stats mClockStats;
+
+ /** Number of items in times array */
+ private int mCount;
+
+ /** Array of stop - start times */
+ private long mTimes[];
+
+ /** Time of last started */
+ private long mStart;
+
+ /** Sleep a little so we don't look like a hog */
+ private void sleep() {
+ try {
+ Thread.sleep(0);
+ } catch (InterruptedException e) {
+ // Ignore exception
+ }
+ }
+
+ /** Empty Runnable used for determining overhead */
+ private Runnable mEmptyRunnable = new Runnable() {
+ public void run() {
+ }
+ };
+
+ /** Initialize */
+ private void init(int maxCount, CalibrationRec cr) {
+ mTimes = new long[maxCount];
+ mCr = cr;
+ reset();
+ }
+
+ /** Construct the stop watch */
+ public PerfTimer() {
+ init(10, new CalibrationRec());
+ }
+
+ /** Construct setting size of times array */
+ public PerfTimer(int maxCount) {
+ init(maxCount, new CalibrationRec());
+ }
+
+ /** Construct the stop watch */
+ public PerfTimer(CalibrationRec cr) {
+ init(10, cr);
+ }
+
+ /** Construct the stop watch */
+ public PerfTimer(int maxCount, CalibrationRec cr) {
+ init(maxCount, cr);
+ }
+
+ /** Reset the contents of the times array */
+ public PerfTimer reset() {
+ mCount = 0;
+ mStats.init();
+ return this;
+ }
+
+ /** Reset and then start the timer */
+ public PerfTimer restart() {
+ reset();
+ mStart = getTicks();
+ return this;
+ }
+
+ /** Start timing */
+ public PerfTimer start() {
+ mStart = getTicks();
+ return this;
+ }
+
+ /**
+ * Record the difference between start and now in the times array
+ * incrementing count. The time will be stored in the times array if the
+ * array is not full.
+ */
+ public PerfTimer stop() {
+ long stop = getTicks();
+ if (mCount < mTimes.length) {
+ mTimes[mCount++] = stop - mStart;
+ }
+ return this;
+ }
+
+ /**
+ * Time how long it takes to execute runnable.run() innerLoop number of
+ * times outerLoops number of times.
+ *
+ * @param outerLoops
+ * @param innerLoops
+ * @param runnable
+ * @return PerfTimer
+ */
+ public PerfTimer timeEach(Stats stats, int outerLoops, int innerLoops, Runnable runnable) {
+ reset();
+ resize(outerLoops);
+ stats.setOuterLoops(outerLoops);
+ stats.setInnerLoops(innerLoops);
+ for (int i = 0; i < outerLoops; i++) {
+ start();
+ for (int j = 0; j < innerLoops; j++) {
+ runnable.run();
+ }
+ stop();
+ sleep();
+ }
+ return this;
+ }
+
+ /**
+ * Time how long it takes to execute runnable.run(). Runs runnable votes
+ * times and returns the Stats of the fastest run. The actual number times
+ * that runnable.run() is executes is enough times so that it runs at least
+ * minThreadholeInMicros but not greater than maxThreadholdInMicro. This
+ * minimizes the chance that long context switches influence the result.
+ *
+ * @param votes is the number of runnable will be executed to determine
+ * fastest run
+ * @param outerLoops is the number of of times the inner loop is run
+ * @param initialInnerLoops is the initial inner loop
+ * @param maxStdDevRetrys if the maxStdDevRatio is exceeded this number of
+ * time the PerfTimerException is thrown.
+ * @param maxStdDevRatio the ratio of the standard deviation of the run and
+ * the time to run.
+ * @param debugLevel DEBUG_LEVEL_NONE, DEBUG_LEVEL_SOME, DEBUG_LEVEL_ALL
+ * @param runnable is the code to test.
+ * @return Stats of the fastest run.
+ */
+ public Stats timeEachAutomatically(int votes, int outerLoops, int initialInnerLoops,
+ double minThresholdInMicros, double maxThresholdInMicros, int maxStdDevRetrys,
+ double maxStdDevRatio, int debugLevel, Runnable runnable) throws PerfTimerException {
+ Stats minStats = null;
+
+ for (int v = 0; v < votes; v++) {
+ boolean successful = false;
+ Stats stats = new Stats();
+ int innerLoops = initialInnerLoops;
+
+ /* Warm up cache */
+ timeEach(stats, outerLoops, initialInnerLoops, runnable);
+
+ for (int stdDevRetrys = 0; stdDevRetrys < maxStdDevRetrys; stdDevRetrys++) {
+ /**
+ * First time may be long enough
+ */
+ timeEach(stats, outerLoops, innerLoops, runnable);
+ analyze(stats, mTimes, outerLoops, debugLevel);
+ double innerLoopTime = stats.getMinInMicros();
+ if ((innerLoopTime >= minThresholdInMicros
+ - ((maxThresholdInMicros - minThresholdInMicros) / 2))) {
+ if (stats.stdDevOk(maxStdDevRatio)) {
+ successful = true;
+ break;
+ } else {
+ stats.incStdDevTooLargeCount();
+ if (debugLevel >= DEBUG_LEVEL_SOME) {
+ log(String.format(
+ "tea: tlc=%d StdDevRatio=%.2f > maxStdDevRatio=%.2f",
+ stats.getStdDevTooLargeCount(), stats.getStdDevRatio(),
+ maxStdDevRatio));
+ }
+ }
+ } else {
+ /**
+ * The initial number of loops is too short find the number
+ * of loops that exceeds maxThresholdInMicros. Then use a
+ * binary search to find the approriate innerLoop value that
+ * is between min/maxThreshold.
+ */
+ innerLoops *= 10;
+ int maxInnerLoops = innerLoops;
+ int minInnerLoops = 1;
+ boolean binarySearch = false;
+ for (int i = 0; i < 10; i++) {
+ timeEach(stats, outerLoops, innerLoops, runnable);
+ analyze(stats, mTimes, outerLoops, debugLevel);
+ innerLoopTime = stats.getMedianInMicros();
+ if ((innerLoopTime >= minThresholdInMicros)
+ && (innerLoopTime <= maxThresholdInMicros)) {
+ if (stats.stdDevOk(maxStdDevRatio)) {
+ successful = true;
+ break;
+ } else {
+ stats.incStdDevTooLargeCount();
+ if (debugLevel >= DEBUG_LEVEL_SOME) {
+ log(String.format(
+ "tea: tlc=%d StdDevRatio=%.2f > maxStdDevRatio=%.2f",
+ stats.getStdDevTooLargeCount(), stats.getStdDevRatio(),
+ maxStdDevRatio));
+ }
+ }
+ } else if (binarySearch) {
+ if ((innerLoopTime < minThresholdInMicros)) {
+ minInnerLoops = innerLoops;
+ } else {
+ maxInnerLoops = innerLoops;
+ }
+ innerLoops = (maxInnerLoops + minInnerLoops) / 2;
+ } else if (innerLoopTime >= maxThresholdInMicros) {
+ /* Found a too large value, change to binary search */
+ binarySearch = true;
+ maxInnerLoops = innerLoops;
+ innerLoops = (maxInnerLoops + minInnerLoops) / 2;
+ } else {
+ innerLoops *= 10;
+ }
+ }
+ if (successful) {
+ break;
+ }
+ }
+ }
+ if (!successful) {
+ /* Couldn't find the number of loops to execute */
+ throw new PerfTimerException();
+ }
+
+ /** Looking for minimum */
+ if ((minStats == null) || (minStats.getTimePerLoop() > stats.getTimePerLoop())) {
+ minStats = stats;
+ }
+ if (debugLevel >= DEBUG_LEVEL_SOME) {
+ log(String.format("minStats.getTimePerLoop=%f minStats: %s", minStats.getTimePerLoop(), minStats));
+ }
+ }
+
+ return minStats;
+ }
+
+ /**
+ * Time how long it takes to execute runnable.run() with a threshold of 1 to
+ * 10ms.
+ *
+ * @param debugLevel DEBUG_LEVEL_NONE, DEBUG_LEVEL_SOME, DEBUG_LEVEL_ALL
+ * @param runnable
+ * @throws PerfTimerException
+ */
+ public Stats timeEachAutomatically(int debugLevel, Runnable runnable)
+ throws PerfTimerException {
+ mStats = timeEachAutomatically(mCr.mVotes, OUTER_LOOPS, 1, mCr.mMinThresholdInMicros,
+ mCr.mMaxThresholdInMicros, mCr.mStdDevRetrys, mCr.mMaxStdDevRatio, debugLevel,
+ runnable);
+ return mStats;
+ }
+
+ /**
+ * Time how long it takes to execute runnable.run() with a threshold of 1 to
+ * 10ms.
+ *
+ * @param runnable
+ * @throws PerfTimerException
+ */
+ public Stats timeEachAutomatically(Runnable runnable) throws PerfTimerException {
+ mStats = timeEachAutomatically(mCr.mVotes, OUTER_LOOPS, 1, mCr.mMinThresholdInMicros,
+ mCr.mMaxThresholdInMicros, mCr.mStdDevRetrys, mCr.mMaxStdDevRatio,
+ DEBUG_LEVEL_NONE, runnable);
+ return mStats;
+ }
+
+ /** Resize the times array */
+ public void resize(int maxCount) {
+ if (maxCount > mTimes.length) {
+ mTimes = new long[maxCount];
+ }
+ }
+
+ /**
+ * Analyze the data calculating the min, max, total, median, mean and
+ * stdDev. The standard deviation is calculated as sqrt(((sum of the squares
+ * of each time) / count) - mean^2)
+ * {@link "http://www.sciencebuddies.org/mentoring/project_data_analysis_variance_std_deviation.shtml"}
+ *
+ * @param debugLevel DEBUG_LEVEL_NONE, DEBUG_LEVEL_SOME, DEBUG_LEVEL_ALL
+ * @return StopWatch
+ */
+ public Stats analyze(Stats stats, long data[], int count, int debugLevel) {
+ if (count > 0) {
+ if (debugLevel >= DEBUG_LEVEL_ALL) {
+ for (int j = 0; j < count; j++) {
+ log(String.format("data[%d]=%,dns", j, data[j]));
+ }
+ }
+ stats.calculate(data, count);
+ } else {
+ stats.init();
+ }
+ if (debugLevel >= DEBUG_LEVEL_SOME) {
+ log("stats: " + stats);
+ }
+ return stats;
+ }
+
+ /**
+ * Calibrate the system and set it for this PerfTimer instance
+ *
+ * @param debugLevel DEBUG_LEVEL_NONE, DEBUG_LEVEL_SOME, DEBUG_LEVEL_ALL
+ * @param precisionInDecimalDigits the precision in number of decimal digits
+ */
+ public CalibrationRec calibrate(int debugLevel, double precisionInDecimalDigits)
+ throws PerfTimerException {
+ int nonZeroCount = 0;
+ Stats stats = new Stats();
+ CalibrationRec cr = new CalibrationRec();
+
+ /* initialize the precision */
+ cr.mPrecisionInDecimalDigits = precisionInDecimalDigits;
+
+ /* Warm up the cache */
+ timeEach(stats, OUTER_LOOPS, 10, mEmptyRunnable);
+
+ /*
+ * Determine the clock stats with at least 20% non-zero unique values.
+ */
+ for (int clockStatsTries = 1; clockStatsTries < 100; clockStatsTries++) {
+ int j;
+ int i;
+ long cur;
+ long prev;
+ long min;
+
+ int innerLoops = clockStatsTries * 10;
+ timeEach(stats, OUTER_LOOPS, innerLoops, mEmptyRunnable);
+ long nonZeroValues[] = new long[mCount];
+ prev = 0;
+ for (nonZeroCount = 0, i = 0; i < mCount; i++) {
+ cur = mTimes[i];
+ if (cur > 0) {
+ nonZeroValues[nonZeroCount++] = cur;
+ }
+ }
+ if (nonZeroCount > (mCount * 0.20)) {
+ // Calculate thresholds
+ analyze(stats, nonZeroValues, nonZeroCount, debugLevel);
+ stats.calculate(nonZeroValues, nonZeroCount);
+ cr.mMinThresholdInMicros = stats.getMeanInMicros()
+ * Math.pow(10, cr.mPrecisionInDecimalDigits);
+ cr.mMaxThresholdInMicros = cr.mMinThresholdInMicros * 2;
+
+ // Set overhead to 0 and time the empty loop then set overhead.
+ cr.mRunnableOverheadInMicros = 0;
+ mClockStats = timeEachAutomatically(mCr.mVotes, OUTER_LOOPS, innerLoops,
+ cr.mMinThresholdInMicros, cr.mMaxThresholdInMicros, mCr.mStdDevRetrys,
+ mCr.mMaxStdDevRatio, debugLevel, mEmptyRunnable);
+ cr.mRunnableOverheadInMicros = mClockStats.getMinInMicros()
+ / mClockStats.getInnerLoops();
+ break;
+ }
+ nonZeroCount = 0;
+ }
+ if (nonZeroCount == 0) {
+ throw new PerfTimerException();
+ }
+ if (debugLevel >= DEBUG_LEVEL_SOME) {
+ log(String.format("calibrate X oh=%.6fus minT=%,.6fus maxT=%,.6fus stats: %s",
+ cr.mRunnableOverheadInMicros, cr.mMinThresholdInMicros,
+ cr.mMaxThresholdInMicros, stats));
+ }
+ mCr = cr;
+ return mCr;
+ }
+
+ /** Calibrate the system and set it for this PerfTimer instance */
+ public CalibrationRec calibrate(double precisionInDecimalDigits) throws PerfTimerException {
+ return calibrate(DEBUG_LEVEL_NONE, precisionInDecimalDigits);
+ }
+
+ /** Calibrate the system and set it for this PerfTimer instance */
+ public CalibrationRec calibrate() throws PerfTimerException {
+ return calibrate(DEBUG_LEVEL_NONE, mCr.mPrecisionInDecimalDigits);
+ }
+
+ /*
+ * Accessors for the private data
+ */
+
+ /** Set calibration record */
+ public void setCalibrationRec(CalibrationRec cr) {
+ mCr = cr;
+ }
+
+ /** Get calibration record */
+ public CalibrationRec getCalibrationRec() {
+ return mCr;
+ }
+
+ /** Number of samples in times array. */
+ public int getCount() {
+ return mCount;
+ }
+
+ /** Minimum value of collected data in microseconds, valid after analyze. */
+ public double getMinInMicros() {
+ return mStats.getMinInMicros();
+ }
+
+ /** Maximum value of collected data in microseconds, valid after analyze. */
+ public double getMaxInMicros() {
+ return mStats.getMaxInMicros();
+ }
+
+ /**
+ * Sum of the values of collected data in microseconds, valid after analyze.
+ */
+ public double getTotalInMicros() {
+ return mStats.getTotalInMicros();
+ }
+
+ /** Sum of the values of collected data in seconds, valid after analyze. */
+ public double getTotalInSecs() {
+ return mStats.getTotalInSecs();
+ }
+
+ /** Sum of the values of collected data in seconds, valid after analyze. */
+ public double getMeanInMicros() {
+ return mStats.getMeanInMicros();
+ }
+
+ /** Median value of collected data in microseconds, valid after analyze. */
+ public double getMedianInMicros() {
+ return mStats.getMedianInMicros();
+ }
+
+ /**
+ * Standard deviation of collected data in microseconds, valid after
+ * analyze.
+ */
+ public double getStdDevInMicros() {
+ return mStats.getStdDevInMicros();
+ }
+
+ /** The mTimes[index] value */
+ public long getTime(int index) {
+ return mTimes[index];
+ }
+
+ /** The mTimes */
+ public long[] getTimes() {
+ return mTimes;
+ }
+
+ /** @return the clock stats as measured in calibrate */
+ public Stats getClockStats() {
+ return mClockStats;
+ }
+
+ /** @return the stats */
+ public Stats getStats() {
+ return mStats;
+ }
+
+ /**
+ * Convert stats to string
+ *
+ * @param debugLevel DEBUG_LEVEL_NONE, DEBUG_LEVEL_SOME, DEBUG_LEVEL_ALL
+ */
+ public String stats(int debugLevel) {
+ int innerLoops = mStats.getInnerLoops();
+ if (mCount == 0) {
+ return String.format("%,.3fus", (getTicks() - mStart) / TICKS_PER_MICROSECOND);
+ } else {
+ if (mCount == 1) {
+ return String.format("%,.3fus", getTime());
+ } else {
+ analyze(mStats, mTimes, mCount, debugLevel);
+ return mStats.toString();
+ }
+ }
+ }
+
+ /**
+ * Convert string
+ */
+ public String stats() {
+ return stats(0);
+ }
+
+ /**
+ * Get time
+ */
+ public double getTime() {
+ int innerLoops = mStats.getInnerLoops();
+ if (mCount == 0) {
+ return (getTicks() - mStart) / TICKS_PER_MICROSECOND;
+ } else {
+ if (mCount == 1) {
+ return mStats.getTotalInMicros();
+ } else {
+ analyze(mStats, mTimes, mCount, DEBUG_LEVEL_NONE);
+ return (mStats.getMinInMicros() / innerLoops) - mCr.mRunnableOverheadInMicros;
+ }
+ }
+ }
+
+ /** Convert to string */
+ @Override
+ public String toString() {
+ return String.format("%,.3fus", getTime());
+ }
+}