NanoTest.java revision beb57e08a44a140bf52235717f1f907ca857f360
164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// Protocol Buffers - Google's data interchange format
264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// Copyright 2013 Google Inc.  All rights reserved.
364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// http://code.google.com/p/protobuf/
464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci//
564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// Redistribution and use in source and binary forms, with or without
664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// modification, are permitted provided that the following conditions are
764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// met:
864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci//
964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci//     * Redistributions of source code must retain the above copyright
1064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// notice, this list of conditions and the following disclaimer.
1164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci//     * Redistributions in binary form must reproduce the above
1264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// copyright notice, this list of conditions and the following disclaimer
1364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// in the documentation and/or other materials provided with the
1464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// distribution.
1564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci//     * Neither the name of Google Inc. nor the names of its
1664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// contributors may be used to endorse or promote products derived from
1764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// this software without specific prior written permission.
1864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci//
1964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
2064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
2164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
2264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
3164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazcipackage com.google.protobuf;
3264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
330e055f079f53b07de3705838a7b4742ce56839f8Brian Duffimport com.google.protobuf.nano.CodedInputByteBufferNano;
3426266cd4660ffe1f3d6015b715713ee654c5b936Max Caiimport com.google.protobuf.nano.EnumClassNanoMultiple;
3526266cd4660ffe1f3d6015b715713ee654c5b936Max Caiimport com.google.protobuf.nano.EnumClassNanos;
360e055f079f53b07de3705838a7b4742ce56839f8Brian Duffimport com.google.protobuf.nano.Extensions;
370e055f079f53b07de3705838a7b4742ce56839f8Brian Duffimport com.google.protobuf.nano.Extensions.AnotherMessage;
3837ac79028de3d1cd8c215ba54fdf31e4eeca4b2cNicholas Seckarimport com.google.protobuf.nano.Extensions.MessageWithGroup;
3926266cd4660ffe1f3d6015b715713ee654c5b936Max Caiimport com.google.protobuf.nano.FileScopeEnumMultiple;
40624c448fbef20a1a2fad2289f622b468c25763d1Max Caiimport com.google.protobuf.nano.FileScopeEnumRefNano;
4164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazciimport com.google.protobuf.nano.InternalNano;
4264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazciimport com.google.protobuf.nano.MessageNano;
43624c448fbef20a1a2fad2289f622b468c25763d1Max Caiimport com.google.protobuf.nano.MessageScopeEnumRefNano;
448170787391efcb6cc6a8babc1cce35d5b1aff420Max Caiimport com.google.protobuf.nano.MultipleImportingNonMultipleNano1;
458170787391efcb6cc6a8babc1cce35d5b1aff420Max Caiimport com.google.protobuf.nano.MultipleImportingNonMultipleNano2;
46624c448fbef20a1a2fad2289f622b468c25763d1Max Caiimport com.google.protobuf.nano.MultipleNameClashNano;
47e74fe623e115237968a3de1143d7cdb4df710858Max Caiimport com.google.protobuf.nano.NanoAccessorsOuterClass.TestNanoAccessors;
4835d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazciimport com.google.protobuf.nano.NanoHasOuterClass.TestAllTypesNanoHas;
4964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazciimport com.google.protobuf.nano.NanoOuterClass;
5064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazciimport com.google.protobuf.nano.NanoOuterClass.TestAllTypesNano;
510b8579237336f221711a0aac42400eb31a58fed3Brian Duffimport com.google.protobuf.nano.NanoReferenceTypes;
52334a7d1117a576bc6010c14677fb6444639c1ddaMax Caiimport com.google.protobuf.nano.TestRepeatedMergeNano;
5364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazciimport com.google.protobuf.nano.UnittestImportNano;
54624c448fbef20a1a2fad2289f622b468c25763d1Max Caiimport com.google.protobuf.nano.UnittestMultipleNano;
55624c448fbef20a1a2fad2289f622b468c25763d1Max Caiimport com.google.protobuf.nano.UnittestRecursiveNano.RecursiveMessageNano;
56624c448fbef20a1a2fad2289f622b468c25763d1Max Caiimport com.google.protobuf.nano.UnittestSimpleNano.SimpleMessageNano;
57624c448fbef20a1a2fad2289f622b468c25763d1Max Caiimport com.google.protobuf.nano.UnittestSingleNano.SingleMessageNano;
5864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
5964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazciimport junit.framework.TestCase;
6064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
610e055f079f53b07de3705838a7b4742ce56839f8Brian Duffimport java.util.ArrayList;
6214dd1f02ac95f61087e311bf61c85047fb218a29Ulas Kirazciimport java.util.Arrays;
63ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duffimport java.util.HashMap;
640e055f079f53b07de3705838a7b4742ce56839f8Brian Duffimport java.util.List;
650e055f079f53b07de3705838a7b4742ce56839f8Brian Duff
6664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci/**
6764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci * Test nano runtime.
6864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci *
6964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci * @author ulas@google.com Ulas Kirazci
7064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci */
7164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazcipublic class NanoTest extends TestCase {
72e74fe623e115237968a3de1143d7cdb4df710858Max Cai  @Override
7364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void setUp() throws Exception {
7464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
7564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
7664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testSimpleMessageNano() throws Exception {
7764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    SimpleMessageNano msg = new SimpleMessageNano();
7864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, msg.d);
7964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(null, msg.nestedMsg);
8064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(SimpleMessageNano.BAZ, msg.defaultNestedEnum);
8164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
8264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.d = 456;
8364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, msg.d);
8464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
8564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    SimpleMessageNano.NestedMessage nestedMsg = new SimpleMessageNano.NestedMessage();
8664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    nestedMsg.bb = 2;
8764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, nestedMsg.bb);
8864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.nestedMsg = nestedMsg;
8964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, msg.nestedMsg.bb);
9064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
9164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.defaultNestedEnum = SimpleMessageNano.BAR;
9264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(SimpleMessageNano.BAR, msg.defaultNestedEnum);
9364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
9464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
9564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
9664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
9764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 9);
9864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
9964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
10064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    SimpleMessageNano newMsg = SimpleMessageNano.parseFrom(result);
10164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, newMsg.d);
10264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, msg.nestedMsg.bb);
10364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(SimpleMessageNano.BAR, msg.defaultNestedEnum);
10464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
10564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
10664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testRecursiveMessageNano() throws Exception {
10764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    RecursiveMessageNano msg = new RecursiveMessageNano();
10864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msg.repeatedRecursiveMessageNano.length == 0);
10964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
11064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    RecursiveMessageNano msg1 = new RecursiveMessageNano();
11164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg1.id = 1;
11264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg1.id);
11364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    RecursiveMessageNano msg2 = new RecursiveMessageNano();
11464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg2.id = 2;
11564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    RecursiveMessageNano msg3 = new RecursiveMessageNano();
11664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg3.id = 3;
11764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
11864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    RecursiveMessageNano.NestedMessage nestedMsg = new RecursiveMessageNano.NestedMessage();
11964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    nestedMsg.a = msg1;
12064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, nestedMsg.a.id);
12164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
12264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.id = 0;
12364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.nestedMessage = nestedMsg;
12464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalRecursiveMessageNano = msg2;
12564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.repeatedRecursiveMessageNano = new RecursiveMessageNano[] { msg3 };
12664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
12764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
12864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
12964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
13064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 16);
13164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
13264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
13364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    RecursiveMessageNano newMsg = RecursiveMessageNano.parseFrom(result);
13464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, newMsg.repeatedRecursiveMessageNano.length);
13564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
13664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, newMsg.id);
13764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, newMsg.nestedMessage.a.id);
13864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, newMsg.optionalRecursiveMessageNano.id);
13964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(3, newMsg.repeatedRecursiveMessageNano[0].id);
14064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
14164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
14264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoRequiredInt32() throws Exception {
14364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
14464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.id = 123;
14564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, msg.id);
14664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear().id = 456;
14764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, msg.id);
14864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
14964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
15064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.id = 123;
15164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
15264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
15364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
15464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 3);
15564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
15664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
15764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
15864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, newMsg.id);
15964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
16064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
16164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoOptionalInt32() throws Exception {
16264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
16364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalInt32 = 123;
16464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, msg.optionalInt32);
16564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
16664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .optionalInt32 = 456;
16764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, msg.optionalInt32);
16864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
16964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
17064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalInt32 = 123;
17164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
17264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
17364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
17464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 5);
17564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
17664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
17764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
17864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, newMsg.optionalInt32);
17964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
18064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
18164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoOptionalInt64() throws Exception {
18264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
18364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalInt64 = 123;
18464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, msg.optionalInt64);
18564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
18664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .optionalInt64 = 456;
18764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, msg.optionalInt64);
18864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
18964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.optionalInt64);
19064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
19164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalInt64 = 123;
19264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
19364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
19464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
19564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 5);
19664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
19764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
19864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
19964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, newMsg.optionalInt64);
20064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
20164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
20264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoOptionalUint32() throws Exception {
20364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
20464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalUint32 = 123;
20564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, msg.optionalUint32);
20664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
20764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .optionalUint32 = 456;
20864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, msg.optionalUint32);
20964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
21064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.optionalUint32);
21164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
21264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalUint32 = 123;
21364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
21464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
21564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
21664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 5);
21764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
21864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
21964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
22064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, newMsg.optionalUint32);
22164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
22264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
22364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoOptionalUint64() throws Exception {
22464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
22564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalUint64 = 123;
22664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, msg.optionalUint64);
22764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
22864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .optionalUint64 = 456;
22964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, msg.optionalUint64);
23064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
23164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.optionalUint64);
23264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
23364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalUint64 = 123;
23464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
23564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
23664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
23764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 5);
23864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
23964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
24064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
24164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, newMsg.optionalUint64);
24264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
24364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
24464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoOptionalSint32() throws Exception {
24564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
24664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalSint32 = 123;
24764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, msg.optionalSint32);
24864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
24964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .optionalSint32 = 456;
25064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, msg.optionalSint32);
25164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
25264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.optionalSint32);
25364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
25464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalSint32 = -123;
25564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
25664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
25764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
25864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 6);
25964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
26064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
26164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
26264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(-123, newMsg.optionalSint32);
26364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
26464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
26564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoOptionalSint64() throws Exception {
26664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
26764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalSint64 = 123;
26864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, msg.optionalSint64);
26964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
27064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .optionalSint64 = 456;
27164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, msg.optionalSint64);
27264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
27364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.optionalSint64);
27464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
27564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalSint64 = -123;
27664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
27764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
27864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
27964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 6);
28064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
28164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
28264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
28364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(-123, newMsg.optionalSint64);
28464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
28564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
28664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoOptionalFixed32() throws Exception {
28764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
28864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalFixed32 = 123;
28964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, msg.optionalFixed32);
29064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
29164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .optionalFixed32 = 456;
29264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, msg.optionalFixed32);
29364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
29464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.optionalFixed32);
29564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
29664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalFixed32 = 123;
29764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
29864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
29964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
30064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 8);
30164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
30264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
30364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
30464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, newMsg.optionalFixed32);
30564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
30664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
30764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoOptionalFixed64() throws Exception {
30864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
30964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalFixed64 = 123;
31064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, msg.optionalFixed64);
31164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
31264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .optionalFixed64 = 456;
31364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, msg.optionalFixed64);
31464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
31564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.optionalFixed64);
31664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
31764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalFixed64 = 123;
31864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
31964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
32064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
32164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 12);
32264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
32364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
32464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
32564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, newMsg.optionalFixed64);
32664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
32764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
32864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoOptionalSfixed32() throws Exception {
32964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
33064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalSfixed32 = 123;
33164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, msg.optionalSfixed32);
33264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
33364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .optionalSfixed32 = 456;
33464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, msg.optionalSfixed32);
33564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
33664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.optionalSfixed32);
33764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
33864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalSfixed32 = 123;
33964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
34064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
34164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
34264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 8);
34364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
34464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
34564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
34664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, newMsg.optionalSfixed32);
34764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
34864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
34964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoOptionalSfixed64() throws Exception {
35064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
35164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalSfixed64 = 123;
35264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, msg.optionalSfixed64);
35364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
35464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .optionalSfixed64 = 456;
35564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, msg.optionalSfixed64);
35664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
35764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.optionalSfixed64);
35864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
35964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalSfixed64 = -123;
36064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
36164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
36264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
36364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 12);
36464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
36564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
36664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
36764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(-123, newMsg.optionalSfixed64);
36864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
36964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
37064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoOptionalFloat() throws Exception {
37164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
37264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalFloat = 123f;
37364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(123.0f == msg.optionalFloat);
37464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
37564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .optionalFloat = 456.0f;
37664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(456.0f == msg.optionalFloat);
37764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
37864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(0.0f == msg.optionalFloat);
37964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
38064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalFloat = -123.456f;
38164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
38264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
38364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
38464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 8);
38564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
38664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
38764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
38864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(-123.456f == newMsg.optionalFloat);
38964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
39064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
39164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoOptionalDouble() throws Exception {
39264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
39364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalDouble = 123;
39464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(123.0 == msg.optionalDouble);
39564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
39664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .optionalDouble = 456.0;
39764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(456.0 == msg.optionalDouble);
39864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
39964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(0.0 == msg.optionalDouble);
40064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
40164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalDouble = -123.456;
40264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
40364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
40464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
40564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 12);
40664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
40764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
40864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
40964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(-123.456 == newMsg.optionalDouble);
41064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
41164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
41264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoOptionalBool() throws Exception {
41364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
41464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalBool = true;
41564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msg.optionalBool);
41664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
41764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .optionalBool = true;
41864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msg.optionalBool);
41964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
42064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertFalse(msg.optionalBool);
42164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
42264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalBool = true;
42364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
42464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
42564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
42664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 5);
42764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
42864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
42964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
43064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(newMsg.optionalBool);
43164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
43264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
43364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoOptionalString() throws Exception {
43464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
43564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalString = "hello";
43664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals("hello", msg.optionalString);
43764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
43864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msg.optionalString.isEmpty());
43964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
44064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .optionalString = "hello2";
44164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals("hello2", msg.optionalString);
44264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
44364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msg.optionalString.isEmpty());
44464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
44564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalString = "bye";
44664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
44764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
44864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
44964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 8);
45064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
45164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
45264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
45364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(newMsg.optionalString != null);
45464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals("bye", newMsg.optionalString);
45564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
45664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
45764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoOptionalBytes() throws Exception {
45864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
45964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertFalse(msg.optionalBytes.length > 0);
46064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalBytes = InternalNano.copyFromUtf8("hello");
46164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msg.optionalBytes.length > 0);
46264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals("hello", new String(msg.optionalBytes, "UTF-8"));
46364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
46464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertFalse(msg.optionalBytes.length > 0);
46564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
46664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .optionalBytes = InternalNano.copyFromUtf8("hello");
46764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msg.optionalBytes.length > 0);
46864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
46964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertFalse(msg.optionalBytes.length > 0);
47064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
47164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalBytes = InternalNano.copyFromUtf8("bye");
47264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
47364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
47464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
47564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 8);
47664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
47764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
47864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
47964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(newMsg.optionalBytes.length > 0);
48064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals("bye", new String(newMsg.optionalBytes, "UTF-8"));
48164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
48264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
48364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoOptionalGroup() throws Exception {
48464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
48564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano.OptionalGroup grp = new TestAllTypesNano.OptionalGroup();
48664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    grp.a = 1;
48764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertFalse(msg.optionalGroup != null);
48864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalGroup = grp;
48964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msg.optionalGroup != null);
49064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.optionalGroup.a);
49164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
49264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertFalse(msg.optionalGroup != null);
49364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
49464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .optionalGroup = new TestAllTypesNano.OptionalGroup();
49564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalGroup.a = 2;
49664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msg.optionalGroup != null);
49764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
49864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertFalse(msg.optionalGroup != null);
49964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
50064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalGroup = grp;
50164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
50264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
50364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
50464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 10);
50564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
50664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
50764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
50864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(newMsg.optionalGroup != null);
50964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, newMsg.optionalGroup.a);
51064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
51164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
51237ac79028de3d1cd8c215ba54fdf31e4eeca4b2cNicholas Seckar  public void testNanoOptionalGroupWithUnknownFieldsEnabled() throws Exception {
51337ac79028de3d1cd8c215ba54fdf31e4eeca4b2cNicholas Seckar    MessageWithGroup msg = new MessageWithGroup();
51437ac79028de3d1cd8c215ba54fdf31e4eeca4b2cNicholas Seckar    MessageWithGroup.Group grp = new MessageWithGroup.Group();
51537ac79028de3d1cd8c215ba54fdf31e4eeca4b2cNicholas Seckar    grp.a = 1;
51637ac79028de3d1cd8c215ba54fdf31e4eeca4b2cNicholas Seckar    msg.group = grp;
51737ac79028de3d1cd8c215ba54fdf31e4eeca4b2cNicholas Seckar    byte [] serialized = MessageNano.toByteArray(msg);
51837ac79028de3d1cd8c215ba54fdf31e4eeca4b2cNicholas Seckar
51937ac79028de3d1cd8c215ba54fdf31e4eeca4b2cNicholas Seckar    MessageWithGroup parsed = MessageWithGroup.parseFrom(serialized);
52037ac79028de3d1cd8c215ba54fdf31e4eeca4b2cNicholas Seckar    assertTrue(msg.group != null);
52137ac79028de3d1cd8c215ba54fdf31e4eeca4b2cNicholas Seckar    assertEquals(1, msg.group.a);
52237ac79028de3d1cd8c215ba54fdf31e4eeca4b2cNicholas Seckar
52337ac79028de3d1cd8c215ba54fdf31e4eeca4b2cNicholas Seckar    byte [] serialized2 = MessageNano.toByteArray(parsed);
52437ac79028de3d1cd8c215ba54fdf31e4eeca4b2cNicholas Seckar    assertEquals(serialized2.length, serialized.length);
52537ac79028de3d1cd8c215ba54fdf31e4eeca4b2cNicholas Seckar    MessageWithGroup parsed2 = MessageWithGroup.parseFrom(serialized2);
52637ac79028de3d1cd8c215ba54fdf31e4eeca4b2cNicholas Seckar  }
52737ac79028de3d1cd8c215ba54fdf31e4eeca4b2cNicholas Seckar
52864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoOptionalNestedMessage() throws Exception {
52964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
53064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano.NestedMessage nestedMsg = new TestAllTypesNano.NestedMessage();
53164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    nestedMsg.bb = 1;
53264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertFalse(msg.optionalNestedMessage != null);
53364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalNestedMessage = nestedMsg;
53464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msg.optionalNestedMessage != null);
53564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.optionalNestedMessage.bb);
53664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
53764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertFalse(msg.optionalNestedMessage != null);
53864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
53964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .optionalNestedMessage = new TestAllTypesNano.NestedMessage();
54064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalNestedMessage.bb = 2;
54164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msg.optionalNestedMessage != null);
54264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
54364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertFalse(msg.optionalNestedMessage != null);
54464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
54564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalNestedMessage = nestedMsg;
54664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
54764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
54864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
54964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 8);
55064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
55164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
55264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
55364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(newMsg.optionalNestedMessage != null);
55464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, newMsg.optionalNestedMessage.bb);
55564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
55664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
55764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoOptionalForeignMessage() throws Exception {
55864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
55964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    NanoOuterClass.ForeignMessageNano nestedMsg = new NanoOuterClass.ForeignMessageNano();
56064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    nestedMsg.c = 1;
56164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertFalse(msg.optionalForeignMessage != null);
56264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalForeignMessage = nestedMsg;
56364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msg.optionalForeignMessage != null);
56464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.optionalForeignMessage.c);
56564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
56664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertFalse(msg.optionalForeignMessage != null);
56764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
56864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .optionalForeignMessage = new NanoOuterClass.ForeignMessageNano();
56964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalForeignMessage.c = 2;
57064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msg.optionalForeignMessage != null);
57164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
57264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertFalse(msg.optionalForeignMessage != null);
57364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
57464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalForeignMessage = nestedMsg;
57564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
57664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
57764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
57864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 8);
57964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
58064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
58164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
58264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(newMsg.optionalForeignMessage != null);
58364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, newMsg.optionalForeignMessage.c);
58464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
58564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
58664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoOptionalImportMessage() throws Exception {
58764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
58864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    UnittestImportNano.ImportMessageNano nestedMsg = new UnittestImportNano.ImportMessageNano();
58964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    nestedMsg.d = 1;
59064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertFalse(msg.optionalImportMessage != null);
59164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalImportMessage = nestedMsg;
59264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msg.optionalImportMessage != null);
59364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.optionalImportMessage.d);
59464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
59564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertFalse(msg.optionalImportMessage != null);
59664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
59764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .optionalImportMessage = new UnittestImportNano.ImportMessageNano();
59864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalImportMessage.d = 2;
59964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msg.optionalImportMessage != null);
60064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
60164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertFalse(msg.optionalImportMessage != null);
60264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
60364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalImportMessage = nestedMsg;
60464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
60564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
60664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
60764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 8);
60864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
60964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
61064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
61164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(newMsg.optionalImportMessage != null);
61264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, newMsg.optionalImportMessage.d);
61364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
61464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
61564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoOptionalNestedEnum() throws Exception {
61664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
61764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalNestedEnum = TestAllTypesNano.BAR;
61864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(TestAllTypesNano.BAR, msg.optionalNestedEnum);
61964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
62064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .optionalNestedEnum = TestAllTypesNano.BAZ;
62164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(TestAllTypesNano.BAZ, msg.optionalNestedEnum);
62264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
62364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(TestAllTypesNano.FOO, msg.optionalNestedEnum);
62464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
62564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalNestedEnum = TestAllTypesNano.BAR;
62664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
62764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
62864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
62964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 6);
63064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
63164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
63264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
63364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(TestAllTypesNano.BAR, newMsg.optionalNestedEnum);
63464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
63564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
63664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoOptionalForeignEnum() throws Exception {
63764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
63864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalForeignEnum = NanoOuterClass.FOREIGN_NANO_BAR;
63964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(NanoOuterClass.FOREIGN_NANO_BAR, msg.optionalForeignEnum);
64064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
64164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .optionalForeignEnum = NanoOuterClass.FOREIGN_NANO_BAZ;
64264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(NanoOuterClass.FOREIGN_NANO_BAZ, msg.optionalForeignEnum);
64364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
64464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(NanoOuterClass.FOREIGN_NANO_FOO, msg.optionalForeignEnum);
64564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
64664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalForeignEnum = NanoOuterClass.FOREIGN_NANO_BAR;
64764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
64864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
64964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
65064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 6);
65164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
65264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
65364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
65464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(NanoOuterClass.FOREIGN_NANO_BAR, newMsg.optionalForeignEnum);
65564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
65664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
65764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoOptionalImportEnum() throws Exception {
65864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
65964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalImportEnum = UnittestImportNano.IMPORT_NANO_BAR;
66064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(UnittestImportNano.IMPORT_NANO_BAR, msg.optionalImportEnum);
66164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
66264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .optionalImportEnum = UnittestImportNano.IMPORT_NANO_BAZ;
66364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(UnittestImportNano.IMPORT_NANO_BAZ, msg.optionalImportEnum);
66464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
66564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(UnittestImportNano.IMPORT_NANO_FOO, msg.optionalImportEnum);
66664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
66764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalImportEnum = UnittestImportNano.IMPORT_NANO_BAR;
66864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
66964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
67064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
67164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 6);
67264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
67364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
67464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
67564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(UnittestImportNano.IMPORT_NANO_BAR, newMsg.optionalImportEnum);
67664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
67764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
67864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoOptionalStringPiece() throws Exception {
67964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
68064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalStringPiece = "hello";
68164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals("hello", msg.optionalStringPiece);
68264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
68364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msg.optionalStringPiece.isEmpty());
68464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
68564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .optionalStringPiece = "hello2";
68664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals("hello2", msg.optionalStringPiece);
68764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
68864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msg.optionalStringPiece.isEmpty());
68964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
69064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalStringPiece = "bye";
69164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
69264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
69364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
69464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 9);
69564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
69664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
69764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
69864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(newMsg.optionalStringPiece != null);
69964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals("bye", newMsg.optionalStringPiece);
70064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
70164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
70264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoOptionalCord() throws Exception {
70364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
70464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalCord = "hello";
70564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals("hello", msg.optionalCord);
70664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
70764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msg.optionalCord.isEmpty());
70864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
70964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .optionalCord = "hello2";
71064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals("hello2", msg.optionalCord);
71164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
71264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msg.optionalCord.isEmpty());
71364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
71464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.optionalCord = "bye";
71564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
71664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
71764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
71864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 9);
71964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
72064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
72164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
72264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(newMsg.optionalCord != null);
72364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals("bye", newMsg.optionalCord);
72464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
72564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
72664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoRepeatedInt32() throws Exception {
72764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
72864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedInt32.length);
72964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.repeatedInt32 = new int[] { 123, 789, 456 };
73064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(789, msg.repeatedInt32[1]);
73164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, msg.repeatedInt32[2]);
73264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
73364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedInt32.length);
73464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
73564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedInt32 = new int[] { 456 };
73664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedInt32.length);
73764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, msg.repeatedInt32[0]);
73864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
73964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedInt32.length);
74064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
74164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 1 entry
74264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
74364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedInt32 = new int[] { 123 };
74464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedInt32.length);
74564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
74664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
74764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
74864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 6);
74964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
75064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
75164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, newMsg.repeatedInt32.length);
75264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, newMsg.repeatedInt32[0]);
75364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
75464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 2 entries
75564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
75664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedInt32 = new int[] { 123, 456 };
75764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, msg.repeatedInt32.length);
75864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    result = MessageNano.toByteArray(msg);
75964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msgSerializedSize = msg.getSerializedSize();
76064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
76164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 10);
76264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
76364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
76464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    newMsg = TestAllTypesNano.parseFrom(result);
76564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, newMsg.repeatedInt32.length);
76664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, newMsg.repeatedInt32[0]);
76764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, newMsg.repeatedInt32[1]);
76864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
76964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
77064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoRepeatedInt64() throws Exception {
77164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
77264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedInt64.length);
77364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.repeatedInt64 = new long[] { 123, 789, 456 };
77464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(789, msg.repeatedInt64[1]);
77564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, msg.repeatedInt64[2]);
77664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
77764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedInt64.length);
77864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
77964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedInt64 = new long[] { 456 };
78064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedInt64.length);
78164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, msg.repeatedInt64[0]);
78264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
78364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedInt64.length);
78464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
78564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 1 entry
78664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
78764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedInt64 = new long[] { 123 };
78864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedInt64.length);
78964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
79064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
79164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
79264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 6);
79364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
79464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
79564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, newMsg.repeatedInt64.length);
79664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, newMsg.repeatedInt64[0]);
79764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
79864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 2 entries
79964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
80064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedInt64 = new long[] { 123, 456 };
80164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, msg.repeatedInt64.length);
80264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    result = MessageNano.toByteArray(msg);
80364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msgSerializedSize = msg.getSerializedSize();
80464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
80564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 10);
80664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
80764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
80864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    newMsg = TestAllTypesNano.parseFrom(result);
80964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, newMsg.repeatedInt64.length);
81064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, newMsg.repeatedInt64[0]);
81164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, newMsg.repeatedInt64[1]);
81264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
81364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
81464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoRepeatedUint32() throws Exception {
81564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
81664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedUint32.length);
81764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.repeatedUint32 = new int[] { 123, 789, 456 };
81864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(789, msg.repeatedUint32[1]);
81964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, msg.repeatedUint32[2]);
82064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
82164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedUint32.length);
82264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
82364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedUint32 = new int[] { 456 };
82464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedUint32.length);
82564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, msg.repeatedUint32[0]);
82664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
82764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedUint32.length);
82864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
82964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 1 entry
83064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
83164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedUint32 = new int[] { 123 };
83264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedUint32.length);
83364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
83464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
83564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
83664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 6);
83764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
83864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
83964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, newMsg.repeatedUint32.length);
84064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, newMsg.repeatedUint32[0]);
84164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
84264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 2 entries
84364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
84464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedUint32 = new int[] { 123, 456 };
84564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, msg.repeatedUint32.length);
84664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    result = MessageNano.toByteArray(msg);
84764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msgSerializedSize = msg.getSerializedSize();
84864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
84964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 10);
85064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
85164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
85264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    newMsg = TestAllTypesNano.parseFrom(result);
85364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, newMsg.repeatedUint32.length);
85464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, newMsg.repeatedUint32[0]);
85564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, newMsg.repeatedUint32[1]);
85664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
85764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
85864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoRepeatedUint64() throws Exception {
85964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
86064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedUint64.length);
86164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.repeatedUint64 = new long[] { 123, 789, 456 };
86264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(789, msg.repeatedUint64[1]);
86364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, msg.repeatedUint64[2]);
86464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
86564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedUint64.length);
86664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
86764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedUint64 = new long[] { 456 };
86864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedUint64.length);
86964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, msg.repeatedUint64[0]);
87064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
87164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedUint64.length);
87264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
87364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 1 entry
87464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
87564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedUint64 = new long[] { 123 };
87664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedUint64.length);
87764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
87864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
87964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
88064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 6);
88164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
88264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
88364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, newMsg.repeatedUint64.length);
88464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, newMsg.repeatedUint64[0]);
88564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
88664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 2 entries
88764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
88864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedUint64 = new long[] { 123, 456 };
88964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, msg.repeatedUint64.length);
89064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    result = MessageNano.toByteArray(msg);
89164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msgSerializedSize = msg.getSerializedSize();
89264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
89364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 10);
89464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
89564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
89664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    newMsg = TestAllTypesNano.parseFrom(result);
89764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, newMsg.repeatedUint64.length);
89864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, newMsg.repeatedUint64[0]);
89964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, newMsg.repeatedUint64[1]);
90064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
90164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
90264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoRepeatedSint32() throws Exception {
90364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
90464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedSint32.length);
90564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.repeatedSint32 = new int[] { 123, 789, 456 };
90664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(789, msg.repeatedSint32[1]);
90764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, msg.repeatedSint32[2]);
90864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
90964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedSint32.length);
91064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
91164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedSint32 = new int[] { 456 };
91264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedSint32.length);
91364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, msg.repeatedSint32[0]);
91464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
91564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedSint32.length);
91664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
91764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 1 entry
91864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
91964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedSint32 = new int[] { 123 };
92064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedSint32.length);
92164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
92264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
92364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
92464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 7);
92564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
92664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
92764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, newMsg.repeatedSint32.length);
92864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, newMsg.repeatedSint32[0]);
92964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
93064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 2 entries
93164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
93264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedSint32 = new int[] { 123, 456 };
93364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, msg.repeatedSint32.length);
93464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    result = MessageNano.toByteArray(msg);
93564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msgSerializedSize = msg.getSerializedSize();
93664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
93764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 11);
93864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
93964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
94064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    newMsg = TestAllTypesNano.parseFrom(result);
94164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, newMsg.repeatedSint32.length);
94264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, newMsg.repeatedSint32[0]);
94364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, newMsg.repeatedSint32[1]);
94464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
94564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
94664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoRepeatedSint64() throws Exception {
94764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
94864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedSint64.length);
94964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.repeatedSint64 = new long[] { 123, 789, 456 };
95064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(789, msg.repeatedSint64[1]);
95164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, msg.repeatedSint64[2]);
95264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
95364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedSint64.length);
95464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
95564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedSint64 = new long[] { 456 };
95664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedSint64.length);
95764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, msg.repeatedSint64[0]);
95864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
95964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedSint64.length);
96064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
96164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 1 entry
96264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
96364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedSint64 = new long[] { 123 };
96464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedSint64.length);
96564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
96664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
96764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
96864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 7);
96964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
97064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
97164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, newMsg.repeatedSint64.length);
97264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, newMsg.repeatedSint64[0]);
97364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
97464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 2 entries
97564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
97664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedSint64 = new long[] { 123, 456 };
97764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, msg.repeatedSint64.length);
97864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    result = MessageNano.toByteArray(msg);
97964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msgSerializedSize = msg.getSerializedSize();
98064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
98164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 11);
98264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
98364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
98464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    newMsg = TestAllTypesNano.parseFrom(result);
98564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, newMsg.repeatedSint64.length);
98664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, newMsg.repeatedSint64[0]);
98764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, newMsg.repeatedSint64[1]);
98864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
98964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
99064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoRepeatedFixed32() throws Exception {
99164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
99264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedFixed32.length);
99364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.repeatedFixed32 = new int[] { 123, 789, 456 };
99464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(789, msg.repeatedFixed32[1]);
99564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, msg.repeatedFixed32[2]);
99664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
99764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedFixed32.length);
99864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
99964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedFixed32 = new int[] { 456 };
100064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedFixed32.length);
100164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, msg.repeatedFixed32[0]);
100264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
100364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedFixed32.length);
100464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
100564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 1 entry
100664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
100764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedFixed32 = new int[] { 123 };
100864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedFixed32.length);
100964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
101064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
101164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
101264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 9);
101364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
101464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
101564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, newMsg.repeatedFixed32.length);
101664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, newMsg.repeatedFixed32[0]);
101764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
101864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 2 entries
101964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
102064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedFixed32 = new int[] { 123, 456 };
102164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, msg.repeatedFixed32.length);
102264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    result = MessageNano.toByteArray(msg);
102364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msgSerializedSize = msg.getSerializedSize();
102464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
102564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 15);
102664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
102764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
102864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    newMsg = TestAllTypesNano.parseFrom(result);
102964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, newMsg.repeatedFixed32.length);
103064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, newMsg.repeatedFixed32[0]);
103164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, newMsg.repeatedFixed32[1]);
103264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
103364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
103464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoRepeatedFixed64() throws Exception {
103564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
103664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedFixed64.length);
103764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.repeatedFixed64 = new long[] { 123, 789, 456 };
103864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(789, msg.repeatedFixed64[1]);
103964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, msg.repeatedFixed64[2]);
104064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
104164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedFixed64.length);
104264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
104364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedFixed64 = new long[] { 456 };
104464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedFixed64.length);
104564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, msg.repeatedFixed64[0]);
104664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
104764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedFixed64.length);
104864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
104964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 1 entry
105064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
105164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedFixed64 = new long[] { 123 };
105264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedFixed64.length);
105364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
105464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
105564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
105664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 13);
105764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
105864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
105964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, newMsg.repeatedFixed64.length);
106064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, newMsg.repeatedFixed64[0]);
106164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
106264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 2 entries
106364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
106464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedFixed64 = new long[] { 123, 456 };
106564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, msg.repeatedFixed64.length);
106664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    result = MessageNano.toByteArray(msg);
106764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msgSerializedSize = msg.getSerializedSize();
106864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
106964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 23);
107064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
107164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
107264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    newMsg = TestAllTypesNano.parseFrom(result);
107364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, newMsg.repeatedFixed64.length);
107464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, newMsg.repeatedFixed64[0]);
107564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, newMsg.repeatedFixed64[1]);
107664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
107764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
107864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoRepeatedSfixed32() throws Exception {
107964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
108064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedSfixed32.length);
108164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.repeatedSfixed32 = new int[] { 123, 789, 456 };
108264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(789, msg.repeatedSfixed32[1]);
108364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, msg.repeatedSfixed32[2]);
108464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
108564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedSfixed32.length);
108664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
108764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedSfixed32 = new int[] { 456 };
108864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedSfixed32.length);
108964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, msg.repeatedSfixed32[0]);
109064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
109164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedSfixed32.length);
109264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
109364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 1 entry
109464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
109564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedSfixed32 = new int[] { 123 };
109664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedSfixed32.length);
109764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
109864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
109964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
110064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 9);
110164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
110264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
110364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, newMsg.repeatedSfixed32.length);
110464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, newMsg.repeatedSfixed32[0]);
110564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
110664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 2 entries
110764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
110864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedSfixed32 = new int[] { 123, 456 };
110964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, msg.repeatedSfixed32.length);
111064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    result = MessageNano.toByteArray(msg);
111164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msgSerializedSize = msg.getSerializedSize();
111264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
111364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 15);
111464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
111564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
111664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    newMsg = TestAllTypesNano.parseFrom(result);
111764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, newMsg.repeatedSfixed32.length);
111864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, newMsg.repeatedSfixed32[0]);
111964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, newMsg.repeatedSfixed32[1]);
112064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
112164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
112264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoRepeatedSfixed64() throws Exception {
112364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
112464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedSfixed64.length);
112564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.repeatedSfixed64 = new long[] { 123, 789, 456 };
112664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(789, msg.repeatedSfixed64[1]);
112764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, msg.repeatedSfixed64[2]);
112864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
112964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedSfixed64.length);
113064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
113164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedSfixed64 = new long[] { 456 };
113264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedSfixed64.length);
113364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, msg.repeatedSfixed64[0]);
113464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
113564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedSfixed64.length);
113664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
113764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 1 entry
113864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
113964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedSfixed64 = new long[] { 123 };
114064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedSfixed64.length);
114164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
114264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
114364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
114464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 13);
114564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
114664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
114764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, newMsg.repeatedSfixed64.length);
114864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, newMsg.repeatedSfixed64[0]);
114964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
115064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 2 entries
115164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
115264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedSfixed64 = new long[] { 123, 456 };
115364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, msg.repeatedSfixed64.length);
115464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    result = MessageNano.toByteArray(msg);
115564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msgSerializedSize = msg.getSerializedSize();
115664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
115764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 23);
115864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
115964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
116064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    newMsg = TestAllTypesNano.parseFrom(result);
116164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, newMsg.repeatedSfixed64.length);
116264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, newMsg.repeatedSfixed64[0]);
116364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, newMsg.repeatedSfixed64[1]);
116464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
116564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
116664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoRepeatedFloat() throws Exception {
116764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
116864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedFloat.length);
116964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.repeatedFloat = new float[] { 123f, 789f, 456f };
117064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(789f, msg.repeatedFloat[1]);
117164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456f, msg.repeatedFloat[2]);
117264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
117364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedFloat.length);
117464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
117564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedFloat = new float[] { 456f };
117664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedFloat.length);
117764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456f, msg.repeatedFloat[0]);
117864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
117964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedFloat.length);
118064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
118164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 1 entry
118264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
118364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedFloat = new float[] { 123f };
118464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedFloat.length);
118564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
118664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
118764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
118864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 9);
118964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
119064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
119164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, newMsg.repeatedFloat.length);
119264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123f, newMsg.repeatedFloat[0]);
119364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
119464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 2 entries
119564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
119664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedFloat = new float[] { 123f, 456f };
119764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, msg.repeatedFloat.length);
119864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    result = MessageNano.toByteArray(msg);
119964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msgSerializedSize = msg.getSerializedSize();
120064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
120164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 15);
120264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
120364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
120464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    newMsg = TestAllTypesNano.parseFrom(result);
120564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, newMsg.repeatedFloat.length);
120664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123f, newMsg.repeatedFloat[0]);
120764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456f, newMsg.repeatedFloat[1]);
120864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
120964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
121064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoRepeatedDouble() throws Exception {
121164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
121264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedDouble.length);
121364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.repeatedDouble = new double[] { 123.0, 789.0, 456.0 };
121464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(789.0, msg.repeatedDouble[1]);
121564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456.0, msg.repeatedDouble[2]);
121664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
121764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedDouble.length);
121864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
121964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedDouble = new double[] { 456.0 };
122064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedDouble.length);
122164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456.0, msg.repeatedDouble[0]);
122264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
122364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedDouble.length);
122464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
122564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 1 entry
122664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
122764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedDouble = new double[] { 123.0 };
122864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedDouble.length);
122964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
123064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
123164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
123264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 13);
123364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
123464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
123564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, newMsg.repeatedDouble.length);
123664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123.0, newMsg.repeatedDouble[0]);
123764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
123864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 2 entries
123964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
124064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedDouble = new double[] { 123.0, 456.0 };
124164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, msg.repeatedDouble.length);
124264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    result = MessageNano.toByteArray(msg);
124364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msgSerializedSize = msg.getSerializedSize();
124464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
124564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 23);
124664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
124764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
124864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    newMsg = TestAllTypesNano.parseFrom(result);
124964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, newMsg.repeatedDouble.length);
125064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123.0, newMsg.repeatedDouble[0]);
125164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456.0, newMsg.repeatedDouble[1]);
125264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
125364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
125464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoRepeatedBool() throws Exception {
125564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
125664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedBool.length);
125764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.repeatedBool = new boolean[] { false, true, false };
125864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msg.repeatedBool[1]);
125964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertFalse(msg.repeatedBool[2]);
126064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
126164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedBool.length);
126264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
126364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedBool = new boolean[] { true };
126464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedBool.length);
126564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msg.repeatedBool[0]);
126664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
126764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedBool.length);
126864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
126964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 1 entry
127064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
127164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedBool = new boolean[] { false };
127264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedBool.length);
127364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
127464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
127564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
127664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 6);
127764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
127864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
127964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, newMsg.repeatedBool.length);
128064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertFalse(newMsg.repeatedBool[0]);
128164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
128264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 2 entries
128364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
128464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedBool = new boolean[] { true, false };
128564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, msg.repeatedBool.length);
128664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    result = MessageNano.toByteArray(msg);
128764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msgSerializedSize = msg.getSerializedSize();
128864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
128964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 9);
129064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
129164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
129264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    newMsg = TestAllTypesNano.parseFrom(result);
129364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, newMsg.repeatedBool.length);
129464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(newMsg.repeatedBool[0]);
129564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertFalse(newMsg.repeatedBool[1]);
129664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
129764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
129864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoRepeatedString() throws Exception {
129964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
130064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedString.length);
130164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.repeatedString = new String[] { "hello", "bye", "boo" };
130264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals("bye", msg.repeatedString[1]);
130364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals("boo", msg.repeatedString[2]);
130464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
130564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedString.length);
130664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
130764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedString = new String[] { "boo" };
130864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedString.length);
130964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals("boo", msg.repeatedString[0]);
131064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
131164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedString.length);
131264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
131364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 1 entry
131464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
131564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedString = new String[] { "" };
131664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedString.length);
131764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
131864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
131964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
132064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 6);
132164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
132264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
132364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, newMsg.repeatedString.length);
132464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(newMsg.repeatedString[0].isEmpty());
132564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
132664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 2 entries
132764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
132864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedString = new String[] { "hello", "world" };
132964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, msg.repeatedString.length);
133064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    result = MessageNano.toByteArray(msg);
133164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msgSerializedSize = msg.getSerializedSize();
133264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
133364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 19);
133464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
133564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
133664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    newMsg = TestAllTypesNano.parseFrom(result);
133764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, newMsg.repeatedString.length);
133864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals("hello", newMsg.repeatedString[0]);
133964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals("world", newMsg.repeatedString[1]);
134064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
134164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
134264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoRepeatedBytes() throws Exception {
134364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
134464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedBytes.length);
134564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.repeatedBytes = new byte[][] {
134664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci        InternalNano.copyFromUtf8("hello"),
134764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci        InternalNano.copyFromUtf8("bye"),
134864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci        InternalNano.copyFromUtf8("boo")
134964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    };
135064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals("bye", new String(msg.repeatedBytes[1], "UTF-8"));
135164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals("boo", new String(msg.repeatedBytes[2], "UTF-8"));
135264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
135364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedBytes.length);
135464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
135564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedBytes = new byte[][] { InternalNano.copyFromUtf8("boo") };
135664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedBytes.length);
135764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals("boo", new String(msg.repeatedBytes[0], "UTF-8"));
135864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
135964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedBytes.length);
136064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
136164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 1 entry
136264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
136364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedBytes = new byte[][] { InternalNano.copyFromUtf8("") };
136464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedBytes.length);
136564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
136664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
136764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
136864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 6);
136964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
137064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
137164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, newMsg.repeatedBytes.length);
137264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(newMsg.repeatedBytes[0].length == 0);
137364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
137464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 2 entries
137564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
137664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedBytes = new byte[][] {
137764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      InternalNano.copyFromUtf8("hello"),
137864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      InternalNano.copyFromUtf8("world")
137964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    };
138064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, msg.repeatedBytes.length);
138164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    result = MessageNano.toByteArray(msg);
138264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msgSerializedSize = msg.getSerializedSize();
138364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
138464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 19);
138564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
138664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
138764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    newMsg = TestAllTypesNano.parseFrom(result);
138864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, newMsg.repeatedBytes.length);
138964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals("hello", new String(newMsg.repeatedBytes[0], "UTF-8"));
139064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals("world", new String(newMsg.repeatedBytes[1], "UTF-8"));
139164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
139264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
139364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoRepeatedGroup() throws Exception {
139464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
139564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano.RepeatedGroup group0 =
139664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      new TestAllTypesNano.RepeatedGroup();
139764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    group0.a = 0;
139864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano.RepeatedGroup group1 =
139964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      new TestAllTypesNano.RepeatedGroup();
140064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    group1.a = 1;
140164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano.RepeatedGroup group2 =
140264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      new TestAllTypesNano.RepeatedGroup();
140364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    group2.a = 2;
140464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
140564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.repeatedGroup = new TestAllTypesNano.RepeatedGroup[] { group0, group1, group2 };
140664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(3, msg.repeatedGroup.length);
140764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedGroup[0].a);
140864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedGroup[1].a);
140964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, msg.repeatedGroup[2].a);
141064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
141164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedGroup.length);
141264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
141364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedGroup = new TestAllTypesNano.RepeatedGroup[] { group1 };
141464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedGroup.length);
141564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedGroup[0].a);
141664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
141764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedGroup.length);
141864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
141964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 1 entry
142064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
142164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedGroup = new TestAllTypesNano.RepeatedGroup[] { group0 };
142264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedGroup.length);
142364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
142464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
142564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
142664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 7);
142764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
142864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
142964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, newMsg.repeatedGroup.length);
143064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, newMsg.repeatedGroup[0].a);
143164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
143264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 2 entries
143364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
143464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedGroup = new TestAllTypesNano.RepeatedGroup[] { group0, group1 };
143564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, msg.repeatedGroup.length);
143664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    result = MessageNano.toByteArray(msg);
143764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msgSerializedSize = msg.getSerializedSize();
143864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
143964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 14);
144064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
144164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
144264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    newMsg = TestAllTypesNano.parseFrom(result);
144364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, newMsg.repeatedGroup.length);
144464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, newMsg.repeatedGroup[0].a);
144564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, newMsg.repeatedGroup[1].a);
144664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
144764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
144864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoRepeatedNestedMessage() throws Exception {
144964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
145064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano.NestedMessage nestedMsg0 =
145164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      new TestAllTypesNano.NestedMessage();
145264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    nestedMsg0.bb = 0;
145364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano.NestedMessage nestedMsg1 =
145464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      new TestAllTypesNano.NestedMessage();
145564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    nestedMsg1.bb = 1;
145664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano.NestedMessage nestedMsg2 =
145764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      new TestAllTypesNano.NestedMessage();
145864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    nestedMsg2.bb = 2;
145964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
146064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.repeatedNestedMessage =
146164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci        new TestAllTypesNano.NestedMessage[] { nestedMsg0, nestedMsg1, nestedMsg2 };
146264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(3, msg.repeatedNestedMessage.length);
146364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedNestedMessage[0].bb);
146464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedNestedMessage[1].bb);
146564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, msg.repeatedNestedMessage[2].bb);
146664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
146764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedNestedMessage.length);
146864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
146964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedNestedMessage = new TestAllTypesNano.NestedMessage[] { nestedMsg1 };
147064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedNestedMessage.length);
147164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedNestedMessage[0].bb);
147264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
147364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedNestedMessage.length);
147464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
147564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 1 entry
147664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
147764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedNestedMessage = new TestAllTypesNano.NestedMessage[] { nestedMsg0 };
147864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedNestedMessage.length);
147964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
148064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
148164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
148264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 6);
148364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
148464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
148564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, newMsg.repeatedNestedMessage.length);
148664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, newMsg.repeatedNestedMessage[0].bb);
148764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
148864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 2 entries
148964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
149064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedNestedMessage = new TestAllTypesNano.NestedMessage[] { nestedMsg0, nestedMsg1 };
149164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, msg.repeatedNestedMessage.length);
149264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    result = MessageNano.toByteArray(msg);
149364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msgSerializedSize = msg.getSerializedSize();
149464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
149564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 11);
149664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
149764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
149864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    newMsg = TestAllTypesNano.parseFrom(result);
149964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, newMsg.repeatedNestedMessage.length);
150064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, newMsg.repeatedNestedMessage[0].bb);
150164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, newMsg.repeatedNestedMessage[1].bb);
150264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
150364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
150464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoRepeatedForeignMessage() throws Exception {
150564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
150664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    NanoOuterClass.ForeignMessageNano foreignMsg0 =
150764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      new NanoOuterClass.ForeignMessageNano();
150864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    foreignMsg0.c = 0;
150964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    NanoOuterClass.ForeignMessageNano foreignMsg1 =
151064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      new NanoOuterClass.ForeignMessageNano();
151164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    foreignMsg1.c = 1;
151264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    NanoOuterClass.ForeignMessageNano foreignMsg2 =
151364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      new NanoOuterClass.ForeignMessageNano();
151464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    foreignMsg2.c = 2;
151564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
151664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.repeatedForeignMessage =
151764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci        new NanoOuterClass.ForeignMessageNano[] { foreignMsg0, foreignMsg1, foreignMsg2 };
151864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(3, msg.repeatedForeignMessage.length);
151964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedForeignMessage[0].c);
152064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedForeignMessage[1].c);
152164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, msg.repeatedForeignMessage[2].c);
152264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
152364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedForeignMessage.length);
152464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
152564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedForeignMessage = new NanoOuterClass.ForeignMessageNano[] { foreignMsg1 };
152664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedForeignMessage.length);
152764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedForeignMessage[0].c);
152864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
152964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedForeignMessage.length);
153064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
153164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 1 entry
153264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
153364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedForeignMessage = new NanoOuterClass.ForeignMessageNano[] { foreignMsg0 };
153464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedForeignMessage.length);
153564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
153664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
153764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
153864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 6);
153964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
154064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
154164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, newMsg.repeatedForeignMessage.length);
154264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, newMsg.repeatedForeignMessage[0].c);
154364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
154464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 2 entries
154564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
154664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedForeignMessage = new NanoOuterClass.ForeignMessageNano[] { foreignMsg0, foreignMsg1 };
154764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, msg.repeatedForeignMessage.length);
154864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    result = MessageNano.toByteArray(msg);
154964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msgSerializedSize = msg.getSerializedSize();
155064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
155164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 11);
155264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
155364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
155464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    newMsg = TestAllTypesNano.parseFrom(result);
155564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, newMsg.repeatedForeignMessage.length);
155664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, newMsg.repeatedForeignMessage[0].c);
155764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, newMsg.repeatedForeignMessage[1].c);
155864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
155964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
156064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoRepeatedImportMessage() throws Exception {
156164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
156264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    UnittestImportNano.ImportMessageNano foreignMsg0 =
156364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      new UnittestImportNano.ImportMessageNano();
156464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    foreignMsg0.d = 0;
156564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    UnittestImportNano.ImportMessageNano foreignMsg1 =
156664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      new UnittestImportNano.ImportMessageNano();
156764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    foreignMsg1.d = 1;
156864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    UnittestImportNano.ImportMessageNano foreignMsg2 =
156964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      new UnittestImportNano.ImportMessageNano();
157064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    foreignMsg2.d = 2;
157164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
157264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.repeatedImportMessage =
157364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci        new UnittestImportNano.ImportMessageNano[] { foreignMsg0, foreignMsg1, foreignMsg2 };
157464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(3, msg.repeatedImportMessage.length);
157564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedImportMessage[0].d);
157664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedImportMessage[1].d);
157764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, msg.repeatedImportMessage[2].d);
157864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
157964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedImportMessage.length);
158064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
158164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedImportMessage = new UnittestImportNano.ImportMessageNano[] { foreignMsg1 };
158264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedImportMessage.length);
158364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedImportMessage[0].d);
158464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
158564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedImportMessage.length);
158664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
158764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 1 entry
158864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
158964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedImportMessage = new UnittestImportNano.ImportMessageNano[] { foreignMsg0 };
159064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedImportMessage.length);
159164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
159264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
159364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
159464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 6);
159564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
159664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
159764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, newMsg.repeatedImportMessage.length);
159864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, newMsg.repeatedImportMessage[0].d);
159964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
160064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 2 entries
160164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
160264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedImportMessage = new UnittestImportNano.ImportMessageNano[] { foreignMsg0, foreignMsg1 };
160364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, msg.repeatedImportMessage.length);
160464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    result = MessageNano.toByteArray(msg);
160564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msgSerializedSize = msg.getSerializedSize();
160664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
160764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 11);
160864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
160964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
161064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    newMsg = TestAllTypesNano.parseFrom(result);
161164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, newMsg.repeatedImportMessage.length);
161264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, newMsg.repeatedImportMessage[0].d);
161364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, newMsg.repeatedImportMessage[1].d);
161464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
161564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
161664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoRepeatedNestedEnum() throws Exception {
161764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
161864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.repeatedNestedEnum = new int[] {
161964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci        TestAllTypesNano.FOO,
162064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci        TestAllTypesNano.BAR,
162164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci        TestAllTypesNano.BAZ
162264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    };
162364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(3, msg.repeatedNestedEnum.length);
162464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(TestAllTypesNano.FOO, msg.repeatedNestedEnum[0]);
162564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(TestAllTypesNano.BAR, msg.repeatedNestedEnum[1]);
162664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(TestAllTypesNano.BAZ, msg.repeatedNestedEnum[2]);
162764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
162864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedNestedEnum.length);
162964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
163064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedNestedEnum = new int[] { TestAllTypesNano.BAR };
163164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedNestedEnum.length);
163264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(TestAllTypesNano.BAR, msg.repeatedNestedEnum[0]);
163364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
163464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedNestedEnum.length);
163564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
163664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 1 entry
163764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
163864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedNestedEnum = new int[] { TestAllTypesNano.FOO };
163964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
164064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
164164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
164264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 6);
164364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
164464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
164564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, newMsg.repeatedNestedEnum.length);
164664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(TestAllTypesNano.FOO, msg.repeatedNestedEnum[0]);
164764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
164864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 2 entries
164964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
165064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedNestedEnum = new int[] { TestAllTypesNano.FOO, TestAllTypesNano.BAR };
165164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, msg.repeatedNestedEnum.length);
165264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    result = MessageNano.toByteArray(msg);
165364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msgSerializedSize = msg.getSerializedSize();
165464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
165564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 9);
165664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
165764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
165864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    newMsg = TestAllTypesNano.parseFrom(result);
165964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, newMsg.repeatedNestedEnum.length);
166064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(TestAllTypesNano.FOO, msg.repeatedNestedEnum[0]);
166164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(TestAllTypesNano.BAR, msg.repeatedNestedEnum[1]);
166264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
166364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
166464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoRepeatedForeignEnum() throws Exception {
166564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
166664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.repeatedForeignEnum = new int[] {
166764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci        NanoOuterClass.FOREIGN_NANO_FOO,
166864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci        NanoOuterClass.FOREIGN_NANO_BAR,
166964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci        NanoOuterClass.FOREIGN_NANO_BAZ
167064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    };
167164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(3, msg.repeatedForeignEnum.length);
167264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(NanoOuterClass.FOREIGN_NANO_FOO, msg.repeatedForeignEnum[0]);
167364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(NanoOuterClass.FOREIGN_NANO_BAR, msg.repeatedForeignEnum[1]);
167464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(NanoOuterClass.FOREIGN_NANO_BAZ, msg.repeatedForeignEnum[2]);
167564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
167664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedForeignEnum.length);
167764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
167864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedForeignEnum = new int[] { NanoOuterClass.FOREIGN_NANO_BAR };
167964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedForeignEnum.length);
168064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(NanoOuterClass.FOREIGN_NANO_BAR, msg.repeatedForeignEnum[0]);
168164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
168264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedForeignEnum.length);
168364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
168464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 1 entry
168564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
168664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedForeignEnum = new int[] { NanoOuterClass.FOREIGN_NANO_FOO };
168764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
168864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
168964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
169064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 6);
169164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
169264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
169364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, newMsg.repeatedForeignEnum.length);
169464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(NanoOuterClass.FOREIGN_NANO_FOO, msg.repeatedForeignEnum[0]);
169564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
169664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 2 entries
169764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
169864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedForeignEnum = new int[] {
169964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      NanoOuterClass.FOREIGN_NANO_FOO,
170064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      NanoOuterClass.FOREIGN_NANO_BAR
170164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    };
170264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, msg.repeatedForeignEnum.length);
170364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    result = MessageNano.toByteArray(msg);
170464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msgSerializedSize = msg.getSerializedSize();
170564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
170664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 9);
170764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
170864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
170964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    newMsg = TestAllTypesNano.parseFrom(result);
171064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, newMsg.repeatedForeignEnum.length);
171164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(NanoOuterClass.FOREIGN_NANO_FOO, msg.repeatedForeignEnum[0]);
171264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(NanoOuterClass.FOREIGN_NANO_BAR, msg.repeatedForeignEnum[1]);
171364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
171464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
171564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoRepeatedImportEnum() throws Exception {
171664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
171764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.repeatedImportEnum = new int[] {
171864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci        UnittestImportNano.IMPORT_NANO_FOO,
171964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci        UnittestImportNano.IMPORT_NANO_BAR,
172064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci        UnittestImportNano.IMPORT_NANO_BAZ
172164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    };
172264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(3, msg.repeatedImportEnum.length);
172364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(UnittestImportNano.IMPORT_NANO_FOO, msg.repeatedImportEnum[0]);
172464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(UnittestImportNano.IMPORT_NANO_BAR, msg.repeatedImportEnum[1]);
172564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(UnittestImportNano.IMPORT_NANO_BAZ, msg.repeatedImportEnum[2]);
172664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
172764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedImportEnum.length);
172864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
172964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedImportEnum = new int[] { UnittestImportNano.IMPORT_NANO_BAR };
173064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedImportEnum.length);
173164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(UnittestImportNano.IMPORT_NANO_BAR, msg.repeatedImportEnum[0]);
173264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
173364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedImportEnum.length);
173464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
173564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 1 entry
173664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
173764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedImportEnum = new int[] { UnittestImportNano.IMPORT_NANO_FOO };
173864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
173964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
174064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
174164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 6);
174264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
174364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
174464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, newMsg.repeatedImportEnum.length);
174564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(UnittestImportNano.IMPORT_NANO_FOO, msg.repeatedImportEnum[0]);
174664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
174764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 2 entries
174864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
174964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedImportEnum = new int[] {
175064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      UnittestImportNano.IMPORT_NANO_FOO,
175164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      UnittestImportNano.IMPORT_NANO_BAR
175264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    };
175364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, msg.repeatedImportEnum.length);
175464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    result = MessageNano.toByteArray(msg);
175564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msgSerializedSize = msg.getSerializedSize();
175664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
175764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 9);
175864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
175964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
176064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    newMsg = TestAllTypesNano.parseFrom(result);
176164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, newMsg.repeatedImportEnum.length);
176264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(UnittestImportNano.IMPORT_NANO_FOO, msg.repeatedImportEnum[0]);
176364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(UnittestImportNano.IMPORT_NANO_BAR, msg.repeatedImportEnum[1]);
176464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
176564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
176664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoRepeatedStringPiece() throws Exception {
176764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
176864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedStringPiece.length);
176964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.repeatedStringPiece = new String[] { "hello", "bye", "boo" };
177064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals("bye", msg.repeatedStringPiece[1]);
177164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals("boo", msg.repeatedStringPiece[2]);
177264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
177364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedStringPiece.length);
177464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
177564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedStringPiece = new String[] { "boo" };
177664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedStringPiece.length);
177764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals("boo", msg.repeatedStringPiece[0]);
177864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
177964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedStringPiece.length);
178064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
178164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 1 entry
178264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
178364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedStringPiece = new String[] { "" };
178464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedStringPiece.length);
178564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
178664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
178764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
178864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 6);
178964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
179064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
179164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, newMsg.repeatedStringPiece.length);
179264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(newMsg.repeatedStringPiece[0].isEmpty());
179364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
179464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 2 entries
179564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
179664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedStringPiece = new String[] { "hello", "world" };
179764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, msg.repeatedStringPiece.length);
179864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    result = MessageNano.toByteArray(msg);
179964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msgSerializedSize = msg.getSerializedSize();
180064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
180164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 19);
180264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
180364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
180464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    newMsg = TestAllTypesNano.parseFrom(result);
180564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, newMsg.repeatedStringPiece.length);
180664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals("hello", newMsg.repeatedStringPiece[0]);
180764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals("world", newMsg.repeatedStringPiece[1]);
180864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
180964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
181064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoRepeatedCord() throws Exception {
181164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
181264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedCord.length);
181364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.repeatedCord = new String[] { "hello", "bye", "boo" };
181464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals("bye", msg.repeatedCord[1]);
181564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals("boo", msg.repeatedCord[2]);
181664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
181764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedCord.length);
181864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
181964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedCord = new String[] { "boo" };
182064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedCord.length);
182164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals("boo", msg.repeatedCord[0]);
182264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
182364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedCord.length);
182464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
182564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 1 entry
182664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
182764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedCord = new String[] { "" };
182864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedCord.length);
182964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
183064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
183164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
183264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 6);
183364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
183464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
183564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, newMsg.repeatedCord.length);
183664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(newMsg.repeatedCord[0].isEmpty());
183764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
183864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 2 entries
183964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
184064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedCord = new String[] { "hello", "world" };
184164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, msg.repeatedCord.length);
184264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    result = MessageNano.toByteArray(msg);
184364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msgSerializedSize = msg.getSerializedSize();
184464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
184564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 19);
184664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
184764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
184864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    newMsg = TestAllTypesNano.parseFrom(result);
184964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, newMsg.repeatedCord.length);
185064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals("hello", newMsg.repeatedCord[0]);
185164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals("world", newMsg.repeatedCord[1]);
185264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
185364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
185464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoRepeatedPackedInt32() throws Exception {
185564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
185664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedPackedInt32.length);
185764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.repeatedPackedInt32 = new int[] { 123, 789, 456 };
185864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(789, msg.repeatedPackedInt32[1]);
185964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, msg.repeatedPackedInt32[2]);
186064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
186164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedPackedInt32.length);
186264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
186364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedPackedInt32 = new int[] { 456 };
186464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedPackedInt32.length);
186564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, msg.repeatedPackedInt32[0]);
186664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
186764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedPackedInt32.length);
186864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
186964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 1 entry
187064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
187164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedPackedInt32 = new int[] { 123 };
187264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedPackedInt32.length);
187364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
187464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
187564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
187664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 7);
187764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
187864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
187964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, newMsg.repeatedPackedInt32.length);
188064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, newMsg.repeatedPackedInt32[0]);
188164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
188264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 2 entries
188364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
188464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedPackedInt32 = new int[] { 123, 456 };
188564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, msg.repeatedPackedInt32.length);
188664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    result = MessageNano.toByteArray(msg);
188764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msgSerializedSize = msg.getSerializedSize();
188864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
188964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 9);
189064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
189164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
189264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    newMsg = TestAllTypesNano.parseFrom(result);
189364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, newMsg.repeatedPackedInt32.length);
189464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, newMsg.repeatedPackedInt32[0]);
189564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, newMsg.repeatedPackedInt32[1]);
189664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
189764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
189864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoRepeatedPackedSfixed64() throws Exception {
189964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
190064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedPackedSfixed64.length);
190164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.repeatedPackedSfixed64 = new long[] { 123, 789, 456 };
190264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(789, msg.repeatedPackedSfixed64[1]);
190364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, msg.repeatedPackedSfixed64[2]);
190464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
190564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedPackedSfixed64.length);
190664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
190764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedPackedSfixed64 = new long[] { 456 };
190864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedPackedSfixed64.length);
190964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, msg.repeatedPackedSfixed64[0]);
191064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
191164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedPackedSfixed64.length);
191264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
191364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 1 entry
191464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
191564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedPackedSfixed64 = new long[] { 123 };
191664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedPackedSfixed64.length);
191764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
191864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
191964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
192064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 14);
192164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
192264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
192364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, newMsg.repeatedPackedSfixed64.length);
192464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, newMsg.repeatedPackedSfixed64[0]);
192564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
192664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 2 entries
192764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
192864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedPackedSfixed64 = new long[] { 123, 456 };
192964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, msg.repeatedPackedSfixed64.length);
193064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    result = MessageNano.toByteArray(msg);
193164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msgSerializedSize = msg.getSerializedSize();
193264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
193364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 22);
193464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
193564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
193664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    newMsg = TestAllTypesNano.parseFrom(result);
193764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, newMsg.repeatedPackedSfixed64.length);
193864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, newMsg.repeatedPackedSfixed64[0]);
193964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, newMsg.repeatedPackedSfixed64[1]);
194064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
194164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
194264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoRepeatedPackedNestedEnum() throws Exception {
194364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
194464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.repeatedPackedNestedEnum = new int[] {
194564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci        TestAllTypesNano.FOO,
194664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci        TestAllTypesNano.BAR,
194764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci        TestAllTypesNano.BAZ
194864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    };
194964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(3, msg.repeatedPackedNestedEnum.length);
195064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(TestAllTypesNano.FOO, msg.repeatedPackedNestedEnum[0]);
195164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(TestAllTypesNano.BAR, msg.repeatedPackedNestedEnum[1]);
195264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(TestAllTypesNano.BAZ, msg.repeatedPackedNestedEnum[2]);
195364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
195464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedPackedNestedEnum.length);
195564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
195664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedPackedNestedEnum = new int[] { TestAllTypesNano.BAR };
195764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, msg.repeatedPackedNestedEnum.length);
195864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(TestAllTypesNano.BAR, msg.repeatedPackedNestedEnum[0]);
195964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear();
196064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(0, msg.repeatedPackedNestedEnum.length);
196164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
196264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 1 entry
196364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
196464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedPackedNestedEnum = new int[] { TestAllTypesNano.FOO };
196564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = MessageNano.toByteArray(msg);
196664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int msgSerializedSize = msg.getSerializedSize();
196764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
196864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 7);
196964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
197064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
197164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, newMsg.repeatedPackedNestedEnum.length);
197264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(TestAllTypesNano.FOO, msg.repeatedPackedNestedEnum[0]);
197364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
197464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Test 2 entries
197564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear()
197664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci       .repeatedPackedNestedEnum = new int[] { TestAllTypesNano.FOO, TestAllTypesNano.BAR };
197764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, msg.repeatedPackedNestedEnum.length);
197864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    result = MessageNano.toByteArray(msg);
197964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msgSerializedSize = msg.getSerializedSize();
198064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
198164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(msgSerializedSize == 8);
198264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(result.length, msgSerializedSize);
198364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
198464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    newMsg = TestAllTypesNano.parseFrom(result);
198564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, newMsg.repeatedPackedNestedEnum.length);
198664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(TestAllTypesNano.FOO, msg.repeatedPackedNestedEnum[0]);
198764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(TestAllTypesNano.BAR, msg.repeatedPackedNestedEnum[1]);
198864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
198964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
199014dd1f02ac95f61087e311bf61c85047fb218a29Ulas Kirazci  public void testNanoRepeatedPackedSerializedSize() throws Exception {
199114dd1f02ac95f61087e311bf61c85047fb218a29Ulas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
199214dd1f02ac95f61087e311bf61c85047fb218a29Ulas Kirazci    msg.repeatedPackedInt32 = new int[] { 123, 789, 456 };
199314dd1f02ac95f61087e311bf61c85047fb218a29Ulas Kirazci    int msgSerializedSize = msg.getSerializedSize();
199414dd1f02ac95f61087e311bf61c85047fb218a29Ulas Kirazci    byte [] result = MessageNano.toByteArray(msg);
199514dd1f02ac95f61087e311bf61c85047fb218a29Ulas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
199614dd1f02ac95f61087e311bf61c85047fb218a29Ulas Kirazci    assertTrue(msgSerializedSize == 11);
199714dd1f02ac95f61087e311bf61c85047fb218a29Ulas Kirazci    assertEquals(result.length, msgSerializedSize);
199814dd1f02ac95f61087e311bf61c85047fb218a29Ulas Kirazci    TestAllTypesNano msg2 = new TestAllTypesNano();
199914dd1f02ac95f61087e311bf61c85047fb218a29Ulas Kirazci    msg2.repeatedPackedInt32 = new int[] { 123, 789, 456 };
200014dd1f02ac95f61087e311bf61c85047fb218a29Ulas Kirazci    byte [] result2 = new byte[msgSerializedSize];
200114dd1f02ac95f61087e311bf61c85047fb218a29Ulas Kirazci    MessageNano.toByteArray(msg2, result2, 0, msgSerializedSize);
200214dd1f02ac95f61087e311bf61c85047fb218a29Ulas Kirazci
200314dd1f02ac95f61087e311bf61c85047fb218a29Ulas Kirazci    // Check equal size and content.
200414dd1f02ac95f61087e311bf61c85047fb218a29Ulas Kirazci    assertEquals(msgSerializedSize, msg2.getSerializedSize());
200514dd1f02ac95f61087e311bf61c85047fb218a29Ulas Kirazci    assertTrue(Arrays.equals(result, result2));
200614dd1f02ac95f61087e311bf61c85047fb218a29Ulas Kirazci  }
200714dd1f02ac95f61087e311bf61c85047fb218a29Ulas Kirazci
200864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoRepeatedInt32ReMerge() throws Exception {
200964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
201064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.repeatedInt32 = new int[] { 234 };
201164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result1 = MessageNano.toByteArray(msg);
201264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
201364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear().optionalInt32 = 789;
201464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result2 = MessageNano.toByteArray(msg);
201564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
201664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear().repeatedInt32 = new int[] { 123, 456 };
201764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result3 = MessageNano.toByteArray(msg);
201864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
201964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Concatenate the three serializations and read as one message.
202064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = new byte[result1.length + result2.length + result3.length];
202164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    System.arraycopy(result1, 0, result, 0, result1.length);
202264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    System.arraycopy(result2, 0, result, result1.length, result2.length);
202364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    System.arraycopy(result3, 0, result, result1.length + result2.length, result3.length);
202464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
202564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
202664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(789, newMsg.optionalInt32);
202764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(3, newMsg.repeatedInt32.length);
202864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(234, newMsg.repeatedInt32[0]);
202964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(123, newMsg.repeatedInt32[1]);
203064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(456, newMsg.repeatedInt32[2]);
203164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
203264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
203364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoRepeatedNestedEnumReMerge() throws Exception {
203464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
203564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.repeatedNestedEnum = new int[] { TestAllTypesNano.FOO };
203664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result1 = MessageNano.toByteArray(msg);
203764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
203864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear().optionalInt32 = 789;
203964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result2 = MessageNano.toByteArray(msg);
204064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
204164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear().repeatedNestedEnum = new int[] { TestAllTypesNano.BAR, TestAllTypesNano.FOO };
204264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result3 = MessageNano.toByteArray(msg);
204364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
204464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Concatenate the three serializations and read as one message.
204564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = new byte[result1.length + result2.length + result3.length];
204664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    System.arraycopy(result1, 0, result, 0, result1.length);
204764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    System.arraycopy(result2, 0, result, result1.length, result2.length);
204864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    System.arraycopy(result3, 0, result, result1.length + result2.length, result3.length);
204964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
205064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
205164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(789, newMsg.optionalInt32);
205264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(3, newMsg.repeatedNestedEnum.length);
205364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(TestAllTypesNano.FOO, newMsg.repeatedNestedEnum[0]);
205464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(TestAllTypesNano.BAR, newMsg.repeatedNestedEnum[1]);
205564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(TestAllTypesNano.FOO, newMsg.repeatedNestedEnum[2]);
205664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
205764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
205864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoRepeatedNestedMessageReMerge() throws Exception {
205964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
206064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano.NestedMessage nestedMsg0 =
206164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      new TestAllTypesNano.NestedMessage();
206264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    nestedMsg0.bb = 0;
206364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano.NestedMessage nestedMsg1 =
206464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      new TestAllTypesNano.NestedMessage();
206564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    nestedMsg1.bb = 1;
206664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano.NestedMessage nestedMsg2 =
206764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      new TestAllTypesNano.NestedMessage();
206864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    nestedMsg2.bb = 2;
206964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
207064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.repeatedNestedMessage = new TestAllTypesNano.NestedMessage[] { nestedMsg0 };
207164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result1 = MessageNano.toByteArray(msg);
207264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
207364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear().optionalInt32 = 789;
207464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result2 = MessageNano.toByteArray(msg);
207564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
207664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    msg.clear().repeatedNestedMessage =
207764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci        new TestAllTypesNano.NestedMessage[] { nestedMsg1, nestedMsg2 };
207864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result3 = MessageNano.toByteArray(msg);
207964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
208064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Concatenate the three serializations and read as one message.
208164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte [] result = new byte[result1.length + result2.length + result3.length];
208264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    System.arraycopy(result1, 0, result, 0, result1.length);
208364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    System.arraycopy(result2, 0, result, result1.length, result2.length);
208464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    System.arraycopy(result3, 0, result, result1.length + result2.length, result3.length);
208564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
208664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano newMsg = TestAllTypesNano.parseFrom(result);
208764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(789, newMsg.optionalInt32);
208864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(3, newMsg.repeatedNestedMessage.length);
208964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(nestedMsg0.bb, newMsg.repeatedNestedMessage[0].bb);
209064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(nestedMsg1.bb, newMsg.repeatedNestedMessage[1].bb);
209164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(nestedMsg2.bb, newMsg.repeatedNestedMessage[2].bb);
209264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
209364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
20948170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai  /**
2095624c448fbef20a1a2fad2289f622b468c25763d1Max Cai   * Tests that code generation correctly wraps a single message into its outer
2096624c448fbef20a1a2fad2289f622b468c25763d1Max Cai   * class. The class {@code SingleMessageNano} is imported from the outer
2097624c448fbef20a1a2fad2289f622b468c25763d1Max Cai   * class {@code UnittestSingleNano}, whose name is implicit. Any error would
2098624c448fbef20a1a2fad2289f622b468c25763d1Max Cai   * cause this method to fail compilation.
2099624c448fbef20a1a2fad2289f622b468c25763d1Max Cai   */
2100624c448fbef20a1a2fad2289f622b468c25763d1Max Cai  public void testNanoSingle() throws Exception {
2101624c448fbef20a1a2fad2289f622b468c25763d1Max Cai    SingleMessageNano msg = new SingleMessageNano();
2102624c448fbef20a1a2fad2289f622b468c25763d1Max Cai  }
2103624c448fbef20a1a2fad2289f622b468c25763d1Max Cai
2104624c448fbef20a1a2fad2289f622b468c25763d1Max Cai  /**
2105624c448fbef20a1a2fad2289f622b468c25763d1Max Cai   * Tests that code generation correctly skips generating the outer class if
2106624c448fbef20a1a2fad2289f622b468c25763d1Max Cai   * unnecessary, letting a file-scope entity have the same name. The class
2107624c448fbef20a1a2fad2289f622b468c25763d1Max Cai   * {@code MultipleNameClashNano} shares the same name with the file's outer
2108624c448fbef20a1a2fad2289f622b468c25763d1Max Cai   * class defined explicitly, but the file contains no other entities and has
2109624c448fbef20a1a2fad2289f622b468c25763d1Max Cai   * java_multiple_files set. Any error would cause this method to fail
2110624c448fbef20a1a2fad2289f622b468c25763d1Max Cai   * compilation.
2111624c448fbef20a1a2fad2289f622b468c25763d1Max Cai   */
2112624c448fbef20a1a2fad2289f622b468c25763d1Max Cai  public void testNanoMultipleNameClash() throws Exception {
2113624c448fbef20a1a2fad2289f622b468c25763d1Max Cai    MultipleNameClashNano msg = new MultipleNameClashNano();
2114624c448fbef20a1a2fad2289f622b468c25763d1Max Cai    msg.field = 0;
2115624c448fbef20a1a2fad2289f622b468c25763d1Max Cai  }
2116624c448fbef20a1a2fad2289f622b468c25763d1Max Cai
2117624c448fbef20a1a2fad2289f622b468c25763d1Max Cai  /**
2118624c448fbef20a1a2fad2289f622b468c25763d1Max Cai   * Tests that code generation correctly handles enums in different scopes in
2119624c448fbef20a1a2fad2289f622b468c25763d1Max Cai   * a source file with the option java_multiple_files set to true. Any error
2120624c448fbef20a1a2fad2289f622b468c25763d1Max Cai   * would cause this method to fail compilation.
2121624c448fbef20a1a2fad2289f622b468c25763d1Max Cai   */
2122624c448fbef20a1a2fad2289f622b468c25763d1Max Cai  public void testNanoMultipleEnumScoping() throws Exception {
2123624c448fbef20a1a2fad2289f622b468c25763d1Max Cai    FileScopeEnumRefNano msg1 = new FileScopeEnumRefNano();
2124624c448fbef20a1a2fad2289f622b468c25763d1Max Cai    msg1.enumField = UnittestMultipleNano.ONE;
2125624c448fbef20a1a2fad2289f622b468c25763d1Max Cai    MessageScopeEnumRefNano msg2 = new MessageScopeEnumRefNano();
2126624c448fbef20a1a2fad2289f622b468c25763d1Max Cai    msg2.enumField = MessageScopeEnumRefNano.TWO;
2127624c448fbef20a1a2fad2289f622b468c25763d1Max Cai  }
2128624c448fbef20a1a2fad2289f622b468c25763d1Max Cai
2129624c448fbef20a1a2fad2289f622b468c25763d1Max Cai  /**
21308170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai   * Tests that code generation with mixed values of the java_multiple_files
21318170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai   * options between the main source file and the imported source files would
21328170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai   * generate correct references. Any error would cause this method to fail
21338170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai   * compilation.
21348170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai   */
21358170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai  public void testNanoMultipleImportingNonMultiple() throws Exception {
21368170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai    UnittestImportNano.ImportMessageNano importMsg = new UnittestImportNano.ImportMessageNano();
21378170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai    MultipleImportingNonMultipleNano1 nano1 = new MultipleImportingNonMultipleNano1();
21388170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai    nano1.field = importMsg;
21398170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai    MultipleImportingNonMultipleNano2 nano2 = new MultipleImportingNonMultipleNano2();
21408170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai    nano2.nano1 = nano1;
21418170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai  }
21428170787391efcb6cc6a8babc1cce35d5b1aff420Max Cai
214364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testNanoDefaults() throws Exception {
214464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    TestAllTypesNano msg = new TestAllTypesNano();
214564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    for (int i = 0; i < 2; i++) {
214664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      assertEquals(41, msg.defaultInt32);
214764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      assertEquals(42, msg.defaultInt64);
214864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      assertEquals(43, msg.defaultUint32);
214964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      assertEquals(44, msg.defaultUint64);
215064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      assertEquals(-45, msg.defaultSint32);
215164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      assertEquals(46, msg.defaultSint64);
215264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      assertEquals(47, msg.defaultFixed32);
215364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      assertEquals(48, msg.defaultFixed64);
215464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      assertEquals(49, msg.defaultSfixed32);
215564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      assertEquals(-50, msg.defaultSfixed64);
215664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      assertTrue(51.5f == msg.defaultFloat);
215764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      assertTrue(52.0e3 == msg.defaultDouble);
215864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      assertEquals(true, msg.defaultBool);
215964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      assertEquals("hello", msg.defaultString);
216064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      assertEquals("world", new String(msg.defaultBytes, "UTF-8"));
216164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      assertEquals("dünya", msg.defaultStringNonascii);
216264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      assertEquals("dünyab", new String(msg.defaultBytesNonascii, "UTF-8"));
216364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      assertEquals(TestAllTypesNano.BAR, msg.defaultNestedEnum);
216464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      assertEquals(NanoOuterClass.FOREIGN_NANO_BAR, msg.defaultForeignEnum);
216564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      assertEquals(UnittestImportNano.IMPORT_NANO_BAR, msg.defaultImportEnum);
21660f2ca89132ab81441f7eb351c7a053a8c8d9d1c3Chris Smith      assertEquals(Float.POSITIVE_INFINITY, msg.defaultFloatInf);
21670f2ca89132ab81441f7eb351c7a053a8c8d9d1c3Chris Smith      assertEquals(Float.NEGATIVE_INFINITY, msg.defaultFloatNegInf);
21680f2ca89132ab81441f7eb351c7a053a8c8d9d1c3Chris Smith      assertEquals(Float.NaN, msg.defaultFloatNan);
21690f2ca89132ab81441f7eb351c7a053a8c8d9d1c3Chris Smith      assertEquals(Double.POSITIVE_INFINITY, msg.defaultDoubleInf);
21700f2ca89132ab81441f7eb351c7a053a8c8d9d1c3Chris Smith      assertEquals(Double.NEGATIVE_INFINITY, msg.defaultDoubleNegInf);
21710f2ca89132ab81441f7eb351c7a053a8c8d9d1c3Chris Smith      assertEquals(Double.NaN, msg.defaultDoubleNan);
217264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
217364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      // Default values are not output, except for required fields.
217464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      byte [] result = MessageNano.toByteArray(msg);
217564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      int msgSerializedSize = msg.getSerializedSize();
217664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
217764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      assertTrue(msgSerializedSize == 3);
217864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      assertEquals(result.length, msgSerializedSize);
217964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci      msg.clear();
218064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    }
218164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
218264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
218335d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci  public void testNanoWithHasParseFrom() throws Exception {
218435d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    TestAllTypesNanoHas msg = null;
218535d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    // Test false on creation, after clear and upon empty parse.
218635d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    for (int i = 0; i < 3; i++) {
218735d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci      if (i == 0) {
218835d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci        msg = new TestAllTypesNanoHas();
218935d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci      } else if (i == 1) {
219035d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci        msg.clear();
219135d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci      } else if (i == 2) {
219235d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci        msg = TestAllTypesNanoHas.parseFrom(new byte[0]);
219335d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci      }
219435d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci      assertFalse(msg.hasOptionalInt32);
219535d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci      assertFalse(msg.hasOptionalString);
219635d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci      assertFalse(msg.hasOptionalBytes);
219735d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci      assertFalse(msg.hasOptionalNestedEnum);
219835d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci      assertFalse(msg.hasDefaultInt32);
219935d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci      assertFalse(msg.hasDefaultString);
220035d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci      assertFalse(msg.hasDefaultBytes);
220135d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci      assertFalse(msg.hasDefaultFloatNan);
220235d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci      assertFalse(msg.hasDefaultNestedEnum);
220335d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci      assertFalse(msg.hasId);
220435d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci      msg.optionalInt32 = 123;
220535d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci      msg.optionalNestedMessage = new TestAllTypesNanoHas.NestedMessage();
220635d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci      msg.optionalNestedMessage.bb = 2;
220735d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci      msg.optionalNestedEnum = TestAllTypesNano.BAZ;
220835d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    }
220935d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci
221035d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    byte [] result = MessageNano.toByteArray(msg);
221135d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    int msgSerializedSize = msg.getSerializedSize();
221235d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
221335d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    assertTrue(msgSerializedSize == 13);
221435d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    assertEquals(result.length, msgSerializedSize);
221535d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci
221635d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    // Has fields true upon parse.
221735d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    TestAllTypesNanoHas newMsg = TestAllTypesNanoHas.parseFrom(result);
221835d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    assertEquals(123, newMsg.optionalInt32);
221935d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    assertTrue(newMsg.hasOptionalInt32);
222035d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    assertEquals(2, newMsg.optionalNestedMessage.bb);
222135d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    assertTrue(newMsg.optionalNestedMessage.hasBb);
222235d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    assertEquals(TestAllTypesNanoHas.BAZ, newMsg.optionalNestedEnum);
222335d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    assertTrue(newMsg.hasOptionalNestedEnum);
222435d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci  }
222535d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci
222635d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci  public void testNanoWithHasSerialize() throws Exception {
222735d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    TestAllTypesNanoHas msg = new TestAllTypesNanoHas();
222835d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    msg.hasOptionalInt32 = true;
222935d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    msg.hasOptionalString = true;
223035d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    msg.hasOptionalBytes = true;
223135d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    msg.optionalNestedMessage = new TestAllTypesNanoHas.NestedMessage();
223235d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    msg.optionalNestedMessage.hasBb = true;
223335d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    msg.hasOptionalNestedEnum = true;
223435d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    msg.hasDefaultInt32 = true;
223535d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    msg.hasDefaultString = true;
223635d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    msg.hasDefaultBytes = true;
223735d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    msg.hasDefaultFloatNan = true;
223835d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    msg.hasDefaultNestedEnum = true;
223935d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci
224035d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    byte [] result = MessageNano.toByteArray(msg);
224135d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    int msgSerializedSize = msg.getSerializedSize();
224235d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    assertEquals(result.length, msgSerializedSize);
224335d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci
224435d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    // Now deserialize and find that all fields are set and equal to their defaults.
224535d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    TestAllTypesNanoHas newMsg = TestAllTypesNanoHas.parseFrom(result);
224635d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    assertTrue(newMsg.hasOptionalInt32);
224735d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    assertTrue(newMsg.hasOptionalString);
224835d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    assertTrue(newMsg.hasOptionalBytes);
224935d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    assertTrue(newMsg.optionalNestedMessage.hasBb);
225035d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    assertTrue(newMsg.hasOptionalNestedEnum);
225135d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    assertTrue(newMsg.hasDefaultInt32);
225235d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    assertTrue(newMsg.hasDefaultString);
225335d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    assertTrue(newMsg.hasDefaultBytes);
225435d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    assertTrue(newMsg.hasDefaultFloatNan);
225535d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    assertTrue(newMsg.hasDefaultNestedEnum);
225635d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    assertTrue(newMsg.hasId);
225735d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    assertEquals(0, newMsg.optionalInt32);
225835d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    assertEquals(0, newMsg.optionalString.length());
225935d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    assertEquals(0, newMsg.optionalBytes.length);
226035d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    assertEquals(0, newMsg.optionalNestedMessage.bb);
226135d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    assertEquals(TestAllTypesNanoHas.FOO, newMsg.optionalNestedEnum);
226235d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    assertEquals(41, newMsg.defaultInt32);
226335d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    assertEquals("hello", newMsg.defaultString);
226435d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    assertEquals("world", new String(newMsg.defaultBytes, "UTF-8"));
226535d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    assertEquals(TestAllTypesNanoHas.BAR, newMsg.defaultNestedEnum);
226635d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    assertEquals(Float.NaN, newMsg.defaultFloatNan);
226735d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci    assertEquals(0, newMsg.id);
226835d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci  }
226935d9fd84ff1d9ecdb91156b757cc9fdcc3f25249Ulas Kirazci
2270e74fe623e115237968a3de1143d7cdb4df710858Max Cai  public void testNanoWithAccessorsBasic() throws Exception {
2271e74fe623e115237968a3de1143d7cdb4df710858Max Cai    TestNanoAccessors msg = new TestNanoAccessors();
2272e74fe623e115237968a3de1143d7cdb4df710858Max Cai
2273e74fe623e115237968a3de1143d7cdb4df710858Max Cai    // Makes sure required and repeated fields are still public fields
2274e74fe623e115237968a3de1143d7cdb4df710858Max Cai    msg.id = 3;
2275e74fe623e115237968a3de1143d7cdb4df710858Max Cai    msg.repeatedBytes = new byte[2][3];
2276e74fe623e115237968a3de1143d7cdb4df710858Max Cai
2277e74fe623e115237968a3de1143d7cdb4df710858Max Cai    // Test accessors
2278e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertEquals(0, msg.getOptionalInt32());
2279e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertFalse(msg.hasOptionalInt32());
2280e74fe623e115237968a3de1143d7cdb4df710858Max Cai    msg.setOptionalInt32(135);
2281e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertEquals(135, msg.getOptionalInt32());
2282e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertTrue(msg.hasOptionalInt32());
2283e74fe623e115237968a3de1143d7cdb4df710858Max Cai    msg.clearOptionalInt32();
2284e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertFalse(msg.hasOptionalInt32());
2285e74fe623e115237968a3de1143d7cdb4df710858Max Cai    msg.setOptionalInt32(0); // default value
2286e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertTrue(msg.hasOptionalInt32());
2287e74fe623e115237968a3de1143d7cdb4df710858Max Cai
2288e74fe623e115237968a3de1143d7cdb4df710858Max Cai    // Test NPE
2289e74fe623e115237968a3de1143d7cdb4df710858Max Cai    try {
2290e74fe623e115237968a3de1143d7cdb4df710858Max Cai      msg.setOptionalBytes(null);
2291e74fe623e115237968a3de1143d7cdb4df710858Max Cai      fail();
2292e74fe623e115237968a3de1143d7cdb4df710858Max Cai    } catch (NullPointerException expected) {}
2293e74fe623e115237968a3de1143d7cdb4df710858Max Cai    try {
2294e74fe623e115237968a3de1143d7cdb4df710858Max Cai      msg.setOptionalString(null);
2295e74fe623e115237968a3de1143d7cdb4df710858Max Cai      fail();
2296e74fe623e115237968a3de1143d7cdb4df710858Max Cai    } catch (NullPointerException expected) {}
2297e74fe623e115237968a3de1143d7cdb4df710858Max Cai    try {
2298e74fe623e115237968a3de1143d7cdb4df710858Max Cai      msg.setOptionalNestedMessage(null);
2299e74fe623e115237968a3de1143d7cdb4df710858Max Cai      fail();
2300e74fe623e115237968a3de1143d7cdb4df710858Max Cai    } catch (NullPointerException expected) {}
2301e74fe623e115237968a3de1143d7cdb4df710858Max Cai
2302e74fe623e115237968a3de1143d7cdb4df710858Max Cai    // Test has bit on bytes field with defaults and clear() re-clones the default array
2303e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertFalse(msg.hasDefaultBytes());
2304e74fe623e115237968a3de1143d7cdb4df710858Max Cai    byte[] defaultBytes = msg.getDefaultBytes();
2305e74fe623e115237968a3de1143d7cdb4df710858Max Cai    msg.setDefaultBytes(defaultBytes);
2306e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertTrue(msg.hasDefaultBytes());
2307e74fe623e115237968a3de1143d7cdb4df710858Max Cai    msg.clearDefaultBytes();
2308e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertFalse(msg.hasDefaultBytes());
2309e74fe623e115237968a3de1143d7cdb4df710858Max Cai    defaultBytes[0]++; // modify original array
2310e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertFalse(Arrays.equals(defaultBytes, msg.getDefaultBytes()));
2311e74fe623e115237968a3de1143d7cdb4df710858Max Cai
2312e74fe623e115237968a3de1143d7cdb4df710858Max Cai    // Test has bits that require additional bit fields
2313e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertFalse(msg.hasBitFieldCheck());
2314e74fe623e115237968a3de1143d7cdb4df710858Max Cai    msg.setBitFieldCheck(0);
2315e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertTrue(msg.hasBitFieldCheck());
2316e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertFalse(msg.hasBeforeBitFieldCheck()); // checks bit field does not leak
2317e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertFalse(msg.hasAfterBitFieldCheck());
2318e74fe623e115237968a3de1143d7cdb4df710858Max Cai
2319e74fe623e115237968a3de1143d7cdb4df710858Max Cai    // Test clear() clears has bits
2320e74fe623e115237968a3de1143d7cdb4df710858Max Cai    msg.setOptionalString("hi");
2321e74fe623e115237968a3de1143d7cdb4df710858Max Cai    msg.setDefaultString("there");
2322e74fe623e115237968a3de1143d7cdb4df710858Max Cai    msg.clear();
2323e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertFalse(msg.hasOptionalString());
2324e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertFalse(msg.hasDefaultString());
2325e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertFalse(msg.hasBitFieldCheck());
2326b15a1b379f896e371ca3375bdf51dd4a9a0268afMax Cai
2327b15a1b379f896e371ca3375bdf51dd4a9a0268afMax Cai    // Test set() and clear() returns itself (compiles = success)
2328b15a1b379f896e371ca3375bdf51dd4a9a0268afMax Cai    msg.clear()
2329b15a1b379f896e371ca3375bdf51dd4a9a0268afMax Cai        .setOptionalInt32(3)
2330b15a1b379f896e371ca3375bdf51dd4a9a0268afMax Cai        .clearDefaultBytes()
2331b15a1b379f896e371ca3375bdf51dd4a9a0268afMax Cai        .setOptionalString("4");
2332e74fe623e115237968a3de1143d7cdb4df710858Max Cai  }
2333e74fe623e115237968a3de1143d7cdb4df710858Max Cai
2334e74fe623e115237968a3de1143d7cdb4df710858Max Cai  public void testNanoWithAccessorsParseFrom() throws Exception {
2335e74fe623e115237968a3de1143d7cdb4df710858Max Cai    TestNanoAccessors msg = null;
2336e74fe623e115237968a3de1143d7cdb4df710858Max Cai    // Test false on creation, after clear and upon empty parse.
2337e74fe623e115237968a3de1143d7cdb4df710858Max Cai    for (int i = 0; i < 3; i++) {
2338e74fe623e115237968a3de1143d7cdb4df710858Max Cai      if (i == 0) {
2339e74fe623e115237968a3de1143d7cdb4df710858Max Cai        msg = new TestNanoAccessors();
2340e74fe623e115237968a3de1143d7cdb4df710858Max Cai      } else if (i == 1) {
2341e74fe623e115237968a3de1143d7cdb4df710858Max Cai        msg.clear();
2342e74fe623e115237968a3de1143d7cdb4df710858Max Cai      } else if (i == 2) {
2343e74fe623e115237968a3de1143d7cdb4df710858Max Cai        msg = TestNanoAccessors.parseFrom(new byte[0]);
2344e74fe623e115237968a3de1143d7cdb4df710858Max Cai      }
2345e74fe623e115237968a3de1143d7cdb4df710858Max Cai      assertFalse(msg.hasOptionalInt32());
2346e74fe623e115237968a3de1143d7cdb4df710858Max Cai      assertFalse(msg.hasOptionalString());
2347e74fe623e115237968a3de1143d7cdb4df710858Max Cai      assertFalse(msg.hasOptionalBytes());
2348e74fe623e115237968a3de1143d7cdb4df710858Max Cai      assertFalse(msg.hasOptionalNestedEnum());
2349e74fe623e115237968a3de1143d7cdb4df710858Max Cai      assertFalse(msg.hasDefaultInt32());
2350e74fe623e115237968a3de1143d7cdb4df710858Max Cai      assertFalse(msg.hasDefaultString());
2351e74fe623e115237968a3de1143d7cdb4df710858Max Cai      assertFalse(msg.hasDefaultBytes());
2352e74fe623e115237968a3de1143d7cdb4df710858Max Cai      assertFalse(msg.hasDefaultFloatNan());
2353e74fe623e115237968a3de1143d7cdb4df710858Max Cai      assertFalse(msg.hasDefaultNestedEnum());
2354e74fe623e115237968a3de1143d7cdb4df710858Max Cai      msg.setOptionalNestedMessage(new TestNanoAccessors.NestedMessage());
2355e74fe623e115237968a3de1143d7cdb4df710858Max Cai      msg.getOptionalNestedMessage().setBb(2);
2356e74fe623e115237968a3de1143d7cdb4df710858Max Cai      msg.setOptionalNestedEnum(TestNanoAccessors.BAZ);
2357e74fe623e115237968a3de1143d7cdb4df710858Max Cai      msg.setDefaultInt32(msg.getDefaultInt32());
2358e74fe623e115237968a3de1143d7cdb4df710858Max Cai    }
2359e74fe623e115237968a3de1143d7cdb4df710858Max Cai
2360e74fe623e115237968a3de1143d7cdb4df710858Max Cai    byte [] result = MessageNano.toByteArray(msg);
2361e74fe623e115237968a3de1143d7cdb4df710858Max Cai    int msgSerializedSize = msg.getSerializedSize();
2362e74fe623e115237968a3de1143d7cdb4df710858Max Cai    //System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
2363e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertTrue(msgSerializedSize == 14);
2364e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertEquals(result.length, msgSerializedSize);
2365e74fe623e115237968a3de1143d7cdb4df710858Max Cai
2366e74fe623e115237968a3de1143d7cdb4df710858Max Cai    // Has fields true upon parse.
2367e74fe623e115237968a3de1143d7cdb4df710858Max Cai    TestNanoAccessors newMsg = TestNanoAccessors.parseFrom(result);
2368e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertEquals(2, newMsg.getOptionalNestedMessage().getBb());
2369e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertTrue(newMsg.getOptionalNestedMessage().hasBb());
2370e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertEquals(TestNanoAccessors.BAZ, newMsg.getOptionalNestedEnum());
2371e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertTrue(newMsg.hasOptionalNestedEnum());
2372e74fe623e115237968a3de1143d7cdb4df710858Max Cai
2373e74fe623e115237968a3de1143d7cdb4df710858Max Cai    // Has field true on fields with explicit default values from wire.
2374e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertTrue(newMsg.hasDefaultInt32());
2375e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertEquals(41, newMsg.getDefaultInt32());
2376e74fe623e115237968a3de1143d7cdb4df710858Max Cai  }
2377e74fe623e115237968a3de1143d7cdb4df710858Max Cai
2378e74fe623e115237968a3de1143d7cdb4df710858Max Cai  public void testNanoWithAccessorsSerialize() throws Exception {
2379e74fe623e115237968a3de1143d7cdb4df710858Max Cai    TestNanoAccessors msg = new TestNanoAccessors();
2380e74fe623e115237968a3de1143d7cdb4df710858Max Cai    msg.setOptionalInt32(msg.getOptionalInt32());
2381e74fe623e115237968a3de1143d7cdb4df710858Max Cai    msg.setOptionalString(msg.getOptionalString());
2382e74fe623e115237968a3de1143d7cdb4df710858Max Cai    msg.setOptionalBytes(msg.getOptionalBytes());
2383e74fe623e115237968a3de1143d7cdb4df710858Max Cai    TestNanoAccessors.NestedMessage nestedMessage = new TestNanoAccessors.NestedMessage();
2384e74fe623e115237968a3de1143d7cdb4df710858Max Cai    nestedMessage.setBb(nestedMessage.getBb());
2385e74fe623e115237968a3de1143d7cdb4df710858Max Cai    msg.setOptionalNestedMessage(nestedMessage);
2386e74fe623e115237968a3de1143d7cdb4df710858Max Cai    msg.setOptionalNestedEnum(msg.getOptionalNestedEnum());
2387e74fe623e115237968a3de1143d7cdb4df710858Max Cai    msg.setDefaultInt32(msg.getDefaultInt32());
2388e74fe623e115237968a3de1143d7cdb4df710858Max Cai    msg.setDefaultString(msg.getDefaultString());
2389e74fe623e115237968a3de1143d7cdb4df710858Max Cai    msg.setDefaultBytes(msg.getDefaultBytes());
2390e74fe623e115237968a3de1143d7cdb4df710858Max Cai    msg.setDefaultFloatNan(msg.getDefaultFloatNan());
2391e74fe623e115237968a3de1143d7cdb4df710858Max Cai    msg.setDefaultNestedEnum(msg.getDefaultNestedEnum());
2392e74fe623e115237968a3de1143d7cdb4df710858Max Cai
2393e74fe623e115237968a3de1143d7cdb4df710858Max Cai    byte [] result = MessageNano.toByteArray(msg);
2394e74fe623e115237968a3de1143d7cdb4df710858Max Cai    int msgSerializedSize = msg.getSerializedSize();
2395e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertEquals(result.length, msgSerializedSize);
2396e74fe623e115237968a3de1143d7cdb4df710858Max Cai
2397e74fe623e115237968a3de1143d7cdb4df710858Max Cai    // Now deserialize and find that all fields are set and equal to their defaults.
2398e74fe623e115237968a3de1143d7cdb4df710858Max Cai    TestNanoAccessors newMsg = TestNanoAccessors.parseFrom(result);
2399e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertTrue(newMsg.hasOptionalInt32());
2400e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertTrue(newMsg.hasOptionalString());
2401e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertTrue(newMsg.hasOptionalBytes());
2402e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertTrue(newMsg.hasOptionalNestedMessage());
2403e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertTrue(newMsg.getOptionalNestedMessage().hasBb());
2404e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertTrue(newMsg.hasOptionalNestedEnum());
2405e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertTrue(newMsg.hasDefaultInt32());
2406e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertTrue(newMsg.hasDefaultString());
2407e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertTrue(newMsg.hasDefaultBytes());
2408e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertTrue(newMsg.hasDefaultFloatNan());
2409e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertTrue(newMsg.hasDefaultNestedEnum());
2410e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertEquals(0, newMsg.getOptionalInt32());
2411e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertEquals(0, newMsg.getOptionalString().length());
2412e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertEquals(0, newMsg.getOptionalBytes().length);
2413e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertEquals(0, newMsg.getOptionalNestedMessage().getBb());
2414e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertEquals(TestNanoAccessors.FOO, newMsg.getOptionalNestedEnum());
2415e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertEquals(41, newMsg.getDefaultInt32());
2416e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertEquals("hello", newMsg.getDefaultString());
2417e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertEquals("world", new String(newMsg.getDefaultBytes(), "UTF-8"));
2418e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertEquals(TestNanoAccessors.BAR, newMsg.getDefaultNestedEnum());
2419e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertEquals(Float.NaN, newMsg.getDefaultFloatNan());
2420e74fe623e115237968a3de1143d7cdb4df710858Max Cai    assertEquals(0, newMsg.id);
2421e74fe623e115237968a3de1143d7cdb4df710858Max Cai  }
2422e74fe623e115237968a3de1143d7cdb4df710858Max Cai
242326266cd4660ffe1f3d6015b715713ee654c5b936Max Cai  public void testNanoJavaEnumStyle() throws Exception {
242426266cd4660ffe1f3d6015b715713ee654c5b936Max Cai    EnumClassNanos.EnumClassNano msg = new EnumClassNanos.EnumClassNano();
242526266cd4660ffe1f3d6015b715713ee654c5b936Max Cai    assertEquals(EnumClassNanos.FileScopeEnum.ONE, msg.one);
242626266cd4660ffe1f3d6015b715713ee654c5b936Max Cai    assertEquals(EnumClassNanos.EnumClassNano.MessageScopeEnum.TWO, msg.two);
242726266cd4660ffe1f3d6015b715713ee654c5b936Max Cai
242826266cd4660ffe1f3d6015b715713ee654c5b936Max Cai    EnumClassNanoMultiple msg2 = new EnumClassNanoMultiple();
242926266cd4660ffe1f3d6015b715713ee654c5b936Max Cai    assertEquals(FileScopeEnumMultiple.THREE, msg2.three);
243026266cd4660ffe1f3d6015b715713ee654c5b936Max Cai    assertEquals(EnumClassNanoMultiple.MessageScopeEnumMultiple.FOUR, msg2.four);
243126266cd4660ffe1f3d6015b715713ee654c5b936Max Cai  }
243226266cd4660ffe1f3d6015b715713ee654c5b936Max Cai
243364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  /**
24340f2ca89132ab81441f7eb351c7a053a8c8d9d1c3Chris Smith   * Tests that fields with a default value of NaN are not serialized when
24350f2ca89132ab81441f7eb351c7a053a8c8d9d1c3Chris Smith   * set to NaN. This is a special case as NaN != NaN, so normal equality
24360f2ca89132ab81441f7eb351c7a053a8c8d9d1c3Chris Smith   * checks don't work.
24370f2ca89132ab81441f7eb351c7a053a8c8d9d1c3Chris Smith   */
24380f2ca89132ab81441f7eb351c7a053a8c8d9d1c3Chris Smith  public void testNanoNotANumberDefaults() throws Exception {
24390f2ca89132ab81441f7eb351c7a053a8c8d9d1c3Chris Smith    TestAllTypesNano msg = new TestAllTypesNano();
24400f2ca89132ab81441f7eb351c7a053a8c8d9d1c3Chris Smith    msg.defaultDoubleNan = 0;
24410f2ca89132ab81441f7eb351c7a053a8c8d9d1c3Chris Smith    msg.defaultFloatNan = 0;
24420f2ca89132ab81441f7eb351c7a053a8c8d9d1c3Chris Smith    byte[] result = MessageNano.toByteArray(msg);
24430f2ca89132ab81441f7eb351c7a053a8c8d9d1c3Chris Smith    int msgSerializedSize = msg.getSerializedSize();
24440f2ca89132ab81441f7eb351c7a053a8c8d9d1c3Chris Smith    assertTrue(msgSerializedSize > 3);
24450f2ca89132ab81441f7eb351c7a053a8c8d9d1c3Chris Smith
24460f2ca89132ab81441f7eb351c7a053a8c8d9d1c3Chris Smith    msg.defaultDoubleNan = Double.NaN;
24470f2ca89132ab81441f7eb351c7a053a8c8d9d1c3Chris Smith    msg.defaultFloatNan = Float.NaN;
24480f2ca89132ab81441f7eb351c7a053a8c8d9d1c3Chris Smith    result = MessageNano.toByteArray(msg);
24490f2ca89132ab81441f7eb351c7a053a8c8d9d1c3Chris Smith    msgSerializedSize = msg.getSerializedSize();
24500f2ca89132ab81441f7eb351c7a053a8c8d9d1c3Chris Smith    assertEquals(3, msgSerializedSize);
24510f2ca89132ab81441f7eb351c7a053a8c8d9d1c3Chris Smith  }
24520f2ca89132ab81441f7eb351c7a053a8c8d9d1c3Chris Smith
24530f2ca89132ab81441f7eb351c7a053a8c8d9d1c3Chris Smith  /**
245464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci   * Test that a bug in skipRawBytes() has been fixed:  if the skip skips
245564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci   * exactly up to a limit, this should not break things.
245664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci   */
245764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testSkipRawBytesBug() throws Exception {
245864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte[] rawBytes = new byte[] { 1, 2 };
245964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    CodedInputByteBufferNano input = CodedInputByteBufferNano.newInstance(rawBytes);
246064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
246164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int limit = input.pushLimit(1);
246264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    input.skipRawBytes(1);
246364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    input.popLimit(limit);
246464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(2, input.readRawByte());
246564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
246664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
246764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  /**
246864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci   * Test that a bug in skipRawBytes() has been fixed:  if the skip skips
246964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci   * past the end of a buffer with a limit that has been set past the end of
247064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci   * that buffer, this should not break things.
247164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci   */
247264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  public void testSkipRawBytesPastEndOfBufferWithLimit() throws Exception {
247364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    byte[] rawBytes = new byte[] { 1, 2, 3, 4, 5 };
247464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    CodedInputByteBufferNano input = CodedInputByteBufferNano.newInstance(rawBytes);
247564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci
247664d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    int limit = input.pushLimit(4);
247764d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // In order to expose the bug we need to read at least one byte to prime the
247864d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // buffer inside the CodedInputStream.
247964d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(1, input.readRawByte());
248064d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    // Skip to the end of the limit.
248164d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    input.skipRawBytes(3);
248264d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertTrue(input.isAtEnd());
248364d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    input.popLimit(limit);
248464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci    assertEquals(5, input.readRawByte());
248564d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci  }
248647107914acbad70ff4db1664d3664ccc994315afAndrew Flynn
248747107914acbad70ff4db1664d3664ccc994315afAndrew Flynn  // Test a smattering of various proto types for printing
248847107914acbad70ff4db1664d3664ccc994315afAndrew Flynn  public void testMessageNanoPrinter() {
248947107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    TestAllTypesNano msg = new TestAllTypesNano();
249047107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    msg.optionalInt32 = 14;
249147107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    msg.optionalFloat = 42.3f;
249247107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    msg.optionalString = "String \"with' both quotes";
249347107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    msg.optionalBytes = new byte[5];
249447107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    msg.optionalGroup = new TestAllTypesNano.OptionalGroup();
249547107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    msg.optionalGroup.a = 15;
249647107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    msg.repeatedInt64 = new long[2];
249747107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    msg.repeatedInt64[0] = 1L;
249847107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    msg.repeatedInt64[1] = -1L;
249947107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    msg.repeatedBytes = new byte[2][];
250047107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    msg.repeatedBytes[1] = new byte[5];
250147107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    msg.repeatedGroup = new TestAllTypesNano.RepeatedGroup[2];
250247107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    msg.repeatedGroup[0] = new TestAllTypesNano.RepeatedGroup();
250347107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    msg.repeatedGroup[0].a = -27;
250447107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    msg.repeatedGroup[1] = new TestAllTypesNano.RepeatedGroup();
250547107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    msg.repeatedGroup[1].a = -72;
250647107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    msg.optionalNestedMessage = new TestAllTypesNano.NestedMessage();
250747107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    msg.optionalNestedMessage.bb = 7;
250847107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    msg.repeatedNestedMessage = new TestAllTypesNano.NestedMessage[2];
250947107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    msg.repeatedNestedMessage[0] = new TestAllTypesNano.NestedMessage();
251047107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    msg.repeatedNestedMessage[0].bb = 77;
251147107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    msg.repeatedNestedMessage[1] = new TestAllTypesNano.NestedMessage();
251247107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    msg.repeatedNestedMessage[1].bb = 88;
251347107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    msg.optionalNestedEnum = TestAllTypesNano.BAZ;
251447107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    msg.repeatedNestedEnum = new int[2];
251547107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    msg.repeatedNestedEnum[0] = TestAllTypesNano.BAR;
251647107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    msg.repeatedNestedEnum[1] = TestAllTypesNano.FOO;
251747107914acbad70ff4db1664d3664ccc994315afAndrew Flynn
251847107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    String protoPrint = msg.toString();
251947107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    assertTrue(protoPrint.contains("TestAllTypesNano <"));
252047107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    assertTrue(protoPrint.contains("  optional_int32: 14"));
252147107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    assertTrue(protoPrint.contains("  optional_float: 42.3"));
252247107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    assertTrue(protoPrint.contains("  optional_double: 0.0"));
252347107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    assertTrue(protoPrint.contains("  optional_string: \"String \\u0022with\\u0027 both quotes\""));
252447107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    assertTrue(protoPrint.contains("  optional_bytes: [B@"));
252547107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    assertTrue(protoPrint.contains("  optionalGroup <\n    a: 15\n  >"));
252647107914acbad70ff4db1664d3664ccc994315afAndrew Flynn
252747107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    assertTrue(protoPrint.contains("  repeated_int64: 1"));
252847107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    assertTrue(protoPrint.contains("  repeated_int64: -1"));
252947107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    assertTrue(protoPrint.contains("  repeated_bytes: null\n  repeated_bytes: [B@"));
253047107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    assertTrue(protoPrint.contains("  repeatedGroup <\n    a: -27\n  >\n"
253147107914acbad70ff4db1664d3664ccc994315afAndrew Flynn            + "  repeatedGroup <\n    a: -72\n  >"));
253247107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    assertTrue(protoPrint.contains("  optionalNestedMessage <\n    bb: 7\n  >"));
253347107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    assertTrue(protoPrint.contains("  repeatedNestedMessage <\n    bb: 77\n  >\n"
253447107914acbad70ff4db1664d3664ccc994315afAndrew Flynn            + "  repeatedNestedMessage <\n    bb: 88\n  >"));
253547107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    assertTrue(protoPrint.contains("  optional_nested_enum: 3"));
253647107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    assertTrue(protoPrint.contains("  repeated_nested_enum: 2\n  repeated_nested_enum: 1"));
253747107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    assertTrue(protoPrint.contains("  default_int32: 41"));
253847107914acbad70ff4db1664d3664ccc994315afAndrew Flynn    assertTrue(protoPrint.contains("  default_string: \"hello\""));
253947107914acbad70ff4db1664d3664ccc994315afAndrew Flynn  }
25400e055f079f53b07de3705838a7b4742ce56839f8Brian Duff
25410e055f079f53b07de3705838a7b4742ce56839f8Brian Duff  public void testExtensions() throws Exception {
25420e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    Extensions.ExtendableMessage message = new Extensions.ExtendableMessage();
25430e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    message.field = 5;
25440e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    message.setExtension(Extensions.someString, "Hello World!");
25450e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    message.setExtension(Extensions.someBool, true);
25460e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    message.setExtension(Extensions.someInt, 42);
25470e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    message.setExtension(Extensions.someLong, 124234234234L);
25480e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    message.setExtension(Extensions.someFloat, 42.0f);
25490e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    message.setExtension(Extensions.someDouble, 422222.0);
25500e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    message.setExtension(Extensions.someEnum, Extensions.FIRST_VALUE);
25510e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    AnotherMessage another = new AnotherMessage();
25520e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    another.string = "Foo";
25530e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    another.value = true;
25540e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    message.setExtension(Extensions.someMessage, another);
25550e055f079f53b07de3705838a7b4742ce56839f8Brian Duff
25560e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    message.setExtension(Extensions.someRepeatedString, list("a", "bee", "seeya"));
25570e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    message.setExtension(Extensions.someRepeatedBool, list(true, false, true));
25580e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    message.setExtension(Extensions.someRepeatedInt, list(4, 8, 15, 16, 23, 42));
25590e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    message.setExtension(Extensions.someRepeatedLong, list(4L, 8L, 15L, 16L, 23L, 42L));
25600e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    message.setExtension(Extensions.someRepeatedFloat, list(1.0f, 3.0f));
25610e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    message.setExtension(Extensions.someRepeatedDouble, list(55.133, 3.14159));
25620e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    message.setExtension(Extensions.someRepeatedEnum, list(Extensions.FIRST_VALUE,
25630e055f079f53b07de3705838a7b4742ce56839f8Brian Duff        Extensions.SECOND_VALUE));
25640e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    AnotherMessage second = new AnotherMessage();
25650e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    second.string = "Whee";
25660e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    second.value = false;
25670e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    message.setExtension(Extensions.someRepeatedMessage, list(another, second));
25680e055f079f53b07de3705838a7b4742ce56839f8Brian Duff
25690e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    byte[] data = MessageNano.toByteArray(message);
25700e055f079f53b07de3705838a7b4742ce56839f8Brian Duff
25710e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    Extensions.ExtendableMessage deserialized = Extensions.ExtendableMessage.parseFrom(data);
25720e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    assertEquals(5, deserialized.field);
25730e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    assertEquals("Hello World!", deserialized.getExtension(Extensions.someString));
25740e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    assertEquals(Boolean.TRUE, deserialized.getExtension(Extensions.someBool));
25750e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    assertEquals(Integer.valueOf(42), deserialized.getExtension(Extensions.someInt));
25760e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    assertEquals(Long.valueOf(124234234234L), deserialized.getExtension(Extensions.someLong));
25770e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    assertEquals(Float.valueOf(42.0f), deserialized.getExtension(Extensions.someFloat));
25780e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    assertEquals(Double.valueOf(422222.0), deserialized.getExtension(Extensions.someDouble));
25790e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    assertEquals(Integer.valueOf(Extensions.FIRST_VALUE),
25800e055f079f53b07de3705838a7b4742ce56839f8Brian Duff        deserialized.getExtension(Extensions.someEnum));
25810e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    assertEquals(another.string, deserialized.getExtension(Extensions.someMessage).string);
25820e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    assertEquals(another.value, deserialized.getExtension(Extensions.someMessage).value);
25830e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    assertEquals(list("a", "bee", "seeya"), deserialized.getExtension(Extensions.someRepeatedString));
25840e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    assertEquals(list(true, false, true), deserialized.getExtension(Extensions.someRepeatedBool));
25850e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    assertEquals(list(4, 8, 15, 16, 23, 42), deserialized.getExtension(Extensions.someRepeatedInt));
25860e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    assertEquals(list(4L, 8L, 15L, 16L, 23L, 42L), deserialized.getExtension(Extensions.someRepeatedLong));
25870e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    assertEquals(list(1.0f, 3.0f), deserialized.getExtension(Extensions.someRepeatedFloat));
25880e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    assertEquals(list(55.133, 3.14159), deserialized.getExtension(Extensions.someRepeatedDouble));
25890e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    assertEquals(list(Extensions.FIRST_VALUE,
25900e055f079f53b07de3705838a7b4742ce56839f8Brian Duff        Extensions.SECOND_VALUE), deserialized.getExtension(Extensions.someRepeatedEnum));
25910e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    assertEquals("Foo", deserialized.getExtension(Extensions.someRepeatedMessage).get(0).string);
25920e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    assertEquals(true, deserialized.getExtension(Extensions.someRepeatedMessage).get(0).value);
25930e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    assertEquals("Whee", deserialized.getExtension(Extensions.someRepeatedMessage).get(1).string);
25940e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    assertEquals(false, deserialized.getExtension(Extensions.someRepeatedMessage).get(1).value);
25950e055f079f53b07de3705838a7b4742ce56839f8Brian Duff  }
25960e055f079f53b07de3705838a7b4742ce56839f8Brian Duff
25970e055f079f53b07de3705838a7b4742ce56839f8Brian Duff  public void testUnknownFields() throws Exception {
25980e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    // Check that we roundtrip (serialize and deserialize) unrecognized fields.
25990e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    AnotherMessage message = new AnotherMessage();
26000e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    message.string = "Hello World";
26010e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    message.value = false;
26020e055f079f53b07de3705838a7b4742ce56839f8Brian Duff
26030e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    byte[] bytes = MessageNano.toByteArray(message);
26040e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    int extraFieldSize = CodedOutputStream.computeStringSize(1001, "This is an unknown field");
26050e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    byte[] newBytes = new byte[bytes.length + extraFieldSize];
26060e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    System.arraycopy(bytes, 0, newBytes, 0, bytes.length);
26070e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    CodedOutputStream.newInstance(newBytes, bytes.length, extraFieldSize).writeString(1001,
26080e055f079f53b07de3705838a7b4742ce56839f8Brian Duff        "This is an unknown field");
26090e055f079f53b07de3705838a7b4742ce56839f8Brian Duff
26100e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    // Deserialize with an unknown field.
26110e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    AnotherMessage deserialized = AnotherMessage.parseFrom(newBytes);
26120e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    byte[] serialized = MessageNano.toByteArray(deserialized);
26130e055f079f53b07de3705838a7b4742ce56839f8Brian Duff
26140e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    assertEquals(newBytes.length, serialized.length);
26150e055f079f53b07de3705838a7b4742ce56839f8Brian Duff
26160e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    // Clear, and make sure it clears everything.
26170e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    deserialized.clear();
26180e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    assertEquals(0, MessageNano.toByteArray(deserialized).length);
26190e055f079f53b07de3705838a7b4742ce56839f8Brian Duff  }
26200e055f079f53b07de3705838a7b4742ce56839f8Brian Duff
262119641419a381509bddfc2d0b5d60a411b67b105bBrian Duff  public void testMergeFrom() throws Exception {
262219641419a381509bddfc2d0b5d60a411b67b105bBrian Duff    SimpleMessageNano message = new SimpleMessageNano();
262319641419a381509bddfc2d0b5d60a411b67b105bBrian Duff    message.d = 123;
262419641419a381509bddfc2d0b5d60a411b67b105bBrian Duff    byte[] bytes = MessageNano.toByteArray(message);
262519641419a381509bddfc2d0b5d60a411b67b105bBrian Duff
262619641419a381509bddfc2d0b5d60a411b67b105bBrian Duff    SimpleMessageNano newMessage = MessageNano.mergeFrom(new SimpleMessageNano(), bytes);
262719641419a381509bddfc2d0b5d60a411b67b105bBrian Duff    assertEquals(message.d, newMessage.d);
262819641419a381509bddfc2d0b5d60a411b67b105bBrian Duff  }
262919641419a381509bddfc2d0b5d60a411b67b105bBrian Duff
2630f4e01452f159ae6b53f5edd25fa647ca2919ae10Tom Chao  public void testJavaKeyword() throws Exception {
2631f4e01452f159ae6b53f5edd25fa647ca2919ae10Tom Chao    TestAllTypesNano msg = new TestAllTypesNano();
2632f4e01452f159ae6b53f5edd25fa647ca2919ae10Tom Chao    msg.synchronized_ = 123;
2633f4e01452f159ae6b53f5edd25fa647ca2919ae10Tom Chao    assertEquals(123, msg.synchronized_);
2634f4e01452f159ae6b53f5edd25fa647ca2919ae10Tom Chao  }
2635f4e01452f159ae6b53f5edd25fa647ca2919ae10Tom Chao
26360b8579237336f221711a0aac42400eb31a58fed3Brian Duff  public void testReferenceTypesForPrimitives() throws Exception {
26370b8579237336f221711a0aac42400eb31a58fed3Brian Duff    NanoReferenceTypes.TestAllTypesNano message = new NanoReferenceTypes.TestAllTypesNano();
26380b8579237336f221711a0aac42400eb31a58fed3Brian Duff
26390b8579237336f221711a0aac42400eb31a58fed3Brian Duff    // Base check - when nothing is set, we serialize nothing.
26400b8579237336f221711a0aac42400eb31a58fed3Brian Duff    assertHasWireData(message, false);
26410b8579237336f221711a0aac42400eb31a58fed3Brian Duff
26420b8579237336f221711a0aac42400eb31a58fed3Brian Duff    message.defaultBool = true;
26430b8579237336f221711a0aac42400eb31a58fed3Brian Duff    assertHasWireData(message, true);
26440b8579237336f221711a0aac42400eb31a58fed3Brian Duff
26450b8579237336f221711a0aac42400eb31a58fed3Brian Duff    message.defaultBool = false;
26460b8579237336f221711a0aac42400eb31a58fed3Brian Duff    assertHasWireData(message, true);
26470b8579237336f221711a0aac42400eb31a58fed3Brian Duff
26480b8579237336f221711a0aac42400eb31a58fed3Brian Duff    message.defaultBool = null;
26490b8579237336f221711a0aac42400eb31a58fed3Brian Duff    assertHasWireData(message, false);
26500b8579237336f221711a0aac42400eb31a58fed3Brian Duff
26510b8579237336f221711a0aac42400eb31a58fed3Brian Duff    message.defaultInt32 = 5;
26520b8579237336f221711a0aac42400eb31a58fed3Brian Duff    assertHasWireData(message, true);
26530b8579237336f221711a0aac42400eb31a58fed3Brian Duff
26540b8579237336f221711a0aac42400eb31a58fed3Brian Duff    message.defaultInt32 = null;
26550b8579237336f221711a0aac42400eb31a58fed3Brian Duff    assertHasWireData(message, false);
26560b8579237336f221711a0aac42400eb31a58fed3Brian Duff
26570b8579237336f221711a0aac42400eb31a58fed3Brian Duff    message.defaultInt64 = 123456L;
26580b8579237336f221711a0aac42400eb31a58fed3Brian Duff    assertHasWireData(message, true);
26590b8579237336f221711a0aac42400eb31a58fed3Brian Duff
26600b8579237336f221711a0aac42400eb31a58fed3Brian Duff    message.defaultInt64 = null;
26610b8579237336f221711a0aac42400eb31a58fed3Brian Duff    assertHasWireData(message, false);
26620b8579237336f221711a0aac42400eb31a58fed3Brian Duff
26630b8579237336f221711a0aac42400eb31a58fed3Brian Duff    message.defaultFloat = 1f;
26640b8579237336f221711a0aac42400eb31a58fed3Brian Duff    assertHasWireData(message, true);
26650b8579237336f221711a0aac42400eb31a58fed3Brian Duff
26660b8579237336f221711a0aac42400eb31a58fed3Brian Duff    message.defaultFloat = null;
26670b8579237336f221711a0aac42400eb31a58fed3Brian Duff    assertHasWireData(message, false);
26680b8579237336f221711a0aac42400eb31a58fed3Brian Duff
26690b8579237336f221711a0aac42400eb31a58fed3Brian Duff    message.defaultDouble = 2.1;
26700b8579237336f221711a0aac42400eb31a58fed3Brian Duff    assertHasWireData(message, true);
26710b8579237336f221711a0aac42400eb31a58fed3Brian Duff
26720b8579237336f221711a0aac42400eb31a58fed3Brian Duff    message.defaultDouble = null;
26730b8579237336f221711a0aac42400eb31a58fed3Brian Duff    assertHasWireData(message, false);
26740b8579237336f221711a0aac42400eb31a58fed3Brian Duff
26750b8579237336f221711a0aac42400eb31a58fed3Brian Duff    message.defaultString = "hello";
26760b8579237336f221711a0aac42400eb31a58fed3Brian Duff    assertHasWireData(message, true);
26770b8579237336f221711a0aac42400eb31a58fed3Brian Duff
26780b8579237336f221711a0aac42400eb31a58fed3Brian Duff    message.defaultString = null;
26790b8579237336f221711a0aac42400eb31a58fed3Brian Duff    assertHasWireData(message, false);
26800b8579237336f221711a0aac42400eb31a58fed3Brian Duff
26810b8579237336f221711a0aac42400eb31a58fed3Brian Duff    message.defaultBytes = new byte[] { 1, 2, 3 };
26820b8579237336f221711a0aac42400eb31a58fed3Brian Duff    assertHasWireData(message, true);
26830b8579237336f221711a0aac42400eb31a58fed3Brian Duff
26840b8579237336f221711a0aac42400eb31a58fed3Brian Duff    message.defaultBytes = null;
26850b8579237336f221711a0aac42400eb31a58fed3Brian Duff    assertHasWireData(message, false);
26860b8579237336f221711a0aac42400eb31a58fed3Brian Duff  }
26870b8579237336f221711a0aac42400eb31a58fed3Brian Duff
2688ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff  public void testHashCodeEquals() throws Exception {
2689ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    // Complete equality:
2690ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    TestAllTypesNano a = createMessageForHashCodeEqualsTest();
2691ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    TestAllTypesNano aEquivalent = createMessageForHashCodeEqualsTest();
2692ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff
2693ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    // Null and empty array for repeated fields equality:
2694ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    TestAllTypesNano b = createMessageForHashCodeEqualsTest();
2695ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    b.repeatedBool = null;
2696ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    b.repeatedFloat = new float[0];
2697ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    TestAllTypesNano bEquivalent = createMessageForHashCodeEqualsTest();
2698ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    bEquivalent.repeatedBool = new boolean[0];
2699ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    bEquivalent.repeatedFloat = null;
2700ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff
2701ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    // Ref-element-type repeated fields use non-null subsequence equality:
2702ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    TestAllTypesNano c = createMessageForHashCodeEqualsTest();
2703ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    c.repeatedString = null;
2704ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    c.repeatedStringPiece = new String[] {null, "one", null, "two"};
2705ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    c.repeatedBytes = new byte[][] {{3, 4}, null};
2706ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    TestAllTypesNano cEquivalent = createMessageForHashCodeEqualsTest();
2707ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    cEquivalent.repeatedString = new String[3];
2708ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    cEquivalent.repeatedStringPiece = new String[] {"one", "two", null};
2709ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    cEquivalent.repeatedBytes = new byte[][] {{3, 4}};
2710ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff
2711ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    // Complete equality for messages with has fields:
2712ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    TestAllTypesNanoHas d = createMessageWithHasForHashCodeEqualsTest();
2713ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    TestAllTypesNanoHas dEquivalent = createMessageWithHasForHashCodeEqualsTest();
2714ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff
2715ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    // If has-fields exist, fields with the same default values but
2716ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    // different has-field values are different.
2717ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    TestAllTypesNanoHas e = createMessageWithHasForHashCodeEqualsTest();
2718ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    e.optionalInt32++; // make different from d
2719ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    e.hasDefaultString = false;
2720ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    TestAllTypesNanoHas eDifferent = createMessageWithHasForHashCodeEqualsTest();
2721ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    eDifferent.optionalInt32 = e.optionalInt32;
2722ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    eDifferent.hasDefaultString = true;
2723ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff
2724ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    // Complete equality for messages with accessors:
2725ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    TestNanoAccessors f = createMessageWithAccessorsForHashCodeEqualsTest();
2726ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    TestNanoAccessors fEquivalent = createMessageWithAccessorsForHashCodeEqualsTest();
2727ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff
2728ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    // If using accessors, explicitly setting a field to its default value
2729ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    // should make the message different.
2730ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    TestNanoAccessors g = createMessageWithAccessorsForHashCodeEqualsTest();
2731ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    g.setOptionalInt32(g.getOptionalInt32() + 1); // make different from f
2732ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    g.clearDefaultString();
2733ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    TestNanoAccessors gDifferent = createMessageWithAccessorsForHashCodeEqualsTest();
2734ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    gDifferent.setOptionalInt32(g.getOptionalInt32());
2735ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    gDifferent.setDefaultString(g.getDefaultString());
2736ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff
2737ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    // Complete equality for reference typed messages:
2738ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    NanoReferenceTypes.TestAllTypesNano h = createRefTypedMessageForHashCodeEqualsTest();
2739ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    NanoReferenceTypes.TestAllTypesNano hEquivalent = createRefTypedMessageForHashCodeEqualsTest();
2740ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff
2741ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    // Inequality of null and default value for reference typed messages:
2742ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    NanoReferenceTypes.TestAllTypesNano i = createRefTypedMessageForHashCodeEqualsTest();
2743ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    i.optionalInt32 = 1; // make different from h
2744ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    i.optionalFloat = null;
2745ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    NanoReferenceTypes.TestAllTypesNano iDifferent = createRefTypedMessageForHashCodeEqualsTest();
2746ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    iDifferent.optionalInt32 = i.optionalInt32;
2747ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    iDifferent.optionalFloat = 0.0f;
2748ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff
2749ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    HashMap<MessageNano, String> hashMap = new HashMap<MessageNano, String>();
2750ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    hashMap.put(a, "a");
2751ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    hashMap.put(b, "b");
2752ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    hashMap.put(c, "c");
2753ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    hashMap.put(d, "d");
2754ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    hashMap.put(e, "e");
2755ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    hashMap.put(f, "f");
2756ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    hashMap.put(g, "g");
2757ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    hashMap.put(h, "h");
2758ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    hashMap.put(i, "i");
2759ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff
2760ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    assertEquals(9, hashMap.size()); // a-i should be different from each other.
2761ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff
2762ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    assertEquals("a", hashMap.get(a));
2763ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    assertEquals("a", hashMap.get(aEquivalent));
2764ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff
2765ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    assertEquals("b", hashMap.get(b));
2766ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    assertEquals("b", hashMap.get(bEquivalent));
2767ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff
2768ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    assertEquals("c", hashMap.get(c));
2769ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    assertEquals("c", hashMap.get(cEquivalent));
2770ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff
2771ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    assertEquals("d", hashMap.get(d));
2772ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    assertEquals("d", hashMap.get(dEquivalent));
2773ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff
2774ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    assertEquals("e", hashMap.get(e));
2775ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    assertNull(hashMap.get(eDifferent));
2776ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff
2777ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    assertEquals("f", hashMap.get(f));
2778ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    assertEquals("f", hashMap.get(fEquivalent));
2779ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff
2780ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    assertEquals("g", hashMap.get(g));
2781ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    assertNull(hashMap.get(gDifferent));
2782ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff
2783ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    assertEquals("h", hashMap.get(h));
2784ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    assertEquals("h", hashMap.get(hEquivalent));
2785ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff
2786ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    assertEquals("i", hashMap.get(i));
2787ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    assertNull(hashMap.get(iDifferent));
2788ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff  }
2789ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff
2790ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff  private TestAllTypesNano createMessageForHashCodeEqualsTest() {
2791ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    TestAllTypesNano message = new TestAllTypesNano();
2792ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.optionalInt32 = 5;
2793ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.optionalInt64 = 777;
2794ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.optionalFloat = 1.0f;
2795ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.optionalDouble = 2.0;
2796ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.optionalBool = true;
2797ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.optionalString = "Hello";
2798ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.optionalBytes = new byte[] { 1, 2, 3 };
2799ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.optionalNestedMessage = new TestAllTypesNano.NestedMessage();
2800ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.optionalNestedMessage.bb = 27;
2801ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.optionalNestedEnum = TestAllTypesNano.BAR;
2802ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.repeatedInt32 = new int[] { 5, 6, 7, 8 };
2803ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.repeatedInt64 = new long[] { 27L, 28L, 29L };
2804ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.repeatedFloat = new float[] { 5.0f, 6.0f };
2805ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.repeatedDouble = new double[] { 99.1, 22.5 };
2806ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.repeatedBool = new boolean[] { true, false, true };
2807ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.repeatedString = new String[] { "One", "Two" };
2808ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.repeatedBytes = new byte[][] { { 2, 7 }, { 2, 7 } };
2809ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.repeatedNestedMessage = new TestAllTypesNano.NestedMessage[] {
2810ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff      message.optionalNestedMessage,
2811ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff      message.optionalNestedMessage
2812ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    };
2813ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.repeatedNestedEnum = new int[] {
2814ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff      TestAllTypesNano.BAR,
2815ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff      TestAllTypesNano.BAZ
2816ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    };
2817ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    // We set the _nan fields to something other than nan, because equality
2818ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    // is defined for nan such that Float.NaN != Float.NaN, which makes any
2819ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    // instance of TestAllTypesNano unequal to any other instance unless
2820ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    // these fields are set. This is also the behavior of the regular java
2821ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    // generator when the value of a field is NaN.
2822ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.defaultFloatNan = 1.0f;
2823ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.defaultDoubleNan = 1.0;
2824ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    return message;
2825ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff  }
2826ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff
2827ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff  private TestAllTypesNanoHas createMessageWithHasForHashCodeEqualsTest() {
2828ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    TestAllTypesNanoHas message = new TestAllTypesNanoHas();
2829ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.optionalInt32 = 5;
2830ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.optionalString = "Hello";
2831ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.optionalBytes = new byte[] { 1, 2, 3 };
2832ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.optionalNestedMessage = new TestAllTypesNanoHas.NestedMessage();
2833ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.optionalNestedMessage.bb = 27;
2834ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.optionalNestedEnum = TestAllTypesNano.BAR;
2835ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.repeatedInt32 = new int[] { 5, 6, 7, 8 };
2836ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.repeatedString = new String[] { "One", "Two" };
2837ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.repeatedBytes = new byte[][] { { 2, 7 }, { 2, 7 } };
2838ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.repeatedNestedMessage = new TestAllTypesNanoHas.NestedMessage[] {
2839ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff      message.optionalNestedMessage,
2840ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff      message.optionalNestedMessage
2841ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    };
2842ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.repeatedNestedEnum = new int[] {
2843ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff      TestAllTypesNano.BAR,
2844ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff      TestAllTypesNano.BAZ
2845ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    };
2846ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.defaultFloatNan = 1.0f;
2847ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    return message;
2848ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff  }
2849ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff
2850ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff  private TestNanoAccessors createMessageWithAccessorsForHashCodeEqualsTest() {
2851ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    TestNanoAccessors message = new TestNanoAccessors()
2852ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff        .setOptionalInt32(5)
2853ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff        .setOptionalString("Hello")
2854ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff        .setOptionalBytes(new byte[] {1, 2, 3})
2855ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff        .setOptionalNestedMessage(new TestNanoAccessors.NestedMessage().setBb(27))
2856ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff        .setOptionalNestedEnum(TestNanoAccessors.BAR)
2857ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff        .setDefaultFloatNan(1.0f);
2858ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.repeatedInt32 = new int[] { 5, 6, 7, 8 };
2859ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.repeatedString = new String[] { "One", "Two" };
2860ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.repeatedBytes = new byte[][] { { 2, 7 }, { 2, 7 } };
2861ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.repeatedNestedMessage = new TestNanoAccessors.NestedMessage[] {
2862ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff      message.getOptionalNestedMessage(),
2863ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff      message.getOptionalNestedMessage()
2864ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    };
2865ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.repeatedNestedEnum = new int[] {
2866ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff      TestAllTypesNano.BAR,
2867ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff      TestAllTypesNano.BAZ
2868ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    };
2869ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    return message;
2870ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff  }
2871ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff
2872ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff  private NanoReferenceTypes.TestAllTypesNano createRefTypedMessageForHashCodeEqualsTest() {
2873ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    NanoReferenceTypes.TestAllTypesNano message = new NanoReferenceTypes.TestAllTypesNano();
2874ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.optionalInt32 = 5;
2875ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.optionalInt64 = 777L;
2876ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.optionalFloat = 1.0f;
2877ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.optionalDouble = 2.0;
2878ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.optionalBool = true;
2879ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.optionalString = "Hello";
2880ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.optionalBytes = new byte[] { 1, 2, 3 };
2881ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.optionalNestedMessage =
2882ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff        new NanoReferenceTypes.TestAllTypesNano.NestedMessage();
2883ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.optionalNestedMessage.foo = 27;
2884ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.optionalNestedEnum = NanoReferenceTypes.TestAllTypesNano.BAR;
2885ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.repeatedInt32 = new int[] { 5, 6, 7, 8 };
2886ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.repeatedInt64 = new long[] { 27L, 28L, 29L };
2887ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.repeatedFloat = new float[] { 5.0f, 6.0f };
2888ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.repeatedDouble = new double[] { 99.1, 22.5 };
2889ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.repeatedBool = new boolean[] { true, false, true };
2890ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.repeatedString = new String[] { "One", "Two" };
2891ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.repeatedBytes = new byte[][] { { 2, 7 }, { 2, 7 } };
2892ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.repeatedNestedMessage =
2893ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff        new NanoReferenceTypes.TestAllTypesNano.NestedMessage[] {
2894ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff          message.optionalNestedMessage,
2895ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff          message.optionalNestedMessage
2896ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff        };
2897ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    message.repeatedNestedEnum = new int[] {
2898ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff      NanoReferenceTypes.TestAllTypesNano.BAR,
2899ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff      NanoReferenceTypes.TestAllTypesNano.BAZ
2900ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    };
2901ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff    return message;
2902ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff  }
2903ccc48faf20dbf3b3cddcffe78d198876d543529bBrian Duff
2904e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff  public void testNullRepeatedFields() throws Exception {
2905e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff    // Check that serialization after explicitly setting a repeated field
2906e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff    // to null doesn't NPE.
2907e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff    TestAllTypesNano message = new TestAllTypesNano();
2908e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff    message.repeatedInt32 = null;
2909e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff    MessageNano.toByteArray(message);  // should not NPE
2910e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff    message.toString(); // should not NPE
2911e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff
2912e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff    message.repeatedNestedEnum = null;
2913e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff    MessageNano.toByteArray(message);  // should not NPE
2914e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff    message.toString(); // should not NPE
2915e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff
2916e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff    message.repeatedBytes = null;
2917e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff    MessageNano.toByteArray(message); // should not NPE
2918e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff    message.toString(); // should not NPE
2919e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff
2920e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff    message.repeatedNestedMessage = null;
2921e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff    MessageNano.toByteArray(message); // should not NPE
2922e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff    message.toString(); // should not NPE
2923e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff
2924334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    message.repeatedPackedInt32 = null;
2925334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    MessageNano.toByteArray(message); // should not NPE
2926334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    message.toString(); // should not NPE
2927334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai
2928334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    message.repeatedPackedNestedEnum = null;
2929334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    MessageNano.toByteArray(message); // should not NPE
2930334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    message.toString(); // should not NPE
2931334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai
2932e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff    // Create a second message to merge into message.
2933e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff    TestAllTypesNano secondMessage = new TestAllTypesNano();
2934334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    secondMessage.repeatedInt32 = new int[] {1, 2, 3};
2935334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    secondMessage.repeatedNestedEnum = new int[] {
2936334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai      TestAllTypesNano.FOO, TestAllTypesNano.BAR
2937334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    };
2938334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    secondMessage.repeatedBytes = new byte[][] {{1, 2}, {3, 4}};
2939e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff    TestAllTypesNano.NestedMessage nested =
2940e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff        new TestAllTypesNano.NestedMessage();
2941e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff    nested.bb = 55;
2942e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff    secondMessage.repeatedNestedMessage =
2943334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai        new TestAllTypesNano.NestedMessage[] {nested};
2944334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    secondMessage.repeatedPackedInt32 = new int[] {1, 2, 3};
2945334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    secondMessage.repeatedPackedNestedEnum = new int[] {
2946334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai        TestAllTypesNano.FOO, TestAllTypesNano.BAR
2947334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai      };
2948e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff
2949e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff    // Should not NPE
2950e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff    message.mergeFrom(CodedInputByteBufferNano.newInstance(
2951e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff        MessageNano.toByteArray(secondMessage)));
2952334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    assertEquals(3, message.repeatedInt32.length);
2953334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    assertEquals(3, message.repeatedInt32[2]);
2954334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    assertEquals(2, message.repeatedNestedEnum.length);
2955334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    assertEquals(TestAllTypesNano.FOO, message.repeatedNestedEnum[0]);
2956334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    assertEquals(2, message.repeatedBytes.length);
2957334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    assertEquals(4, message.repeatedBytes[1][1]);
2958334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    assertEquals(1, message.repeatedNestedMessage.length);
2959e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff    assertEquals(55, message.repeatedNestedMessage[0].bb);
2960334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    assertEquals(3, message.repeatedPackedInt32.length);
2961334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    assertEquals(2, message.repeatedPackedInt32[1]);
2962334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    assertEquals(2, message.repeatedPackedNestedEnum.length);
2963334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    assertEquals(TestAllTypesNano.BAR, message.repeatedPackedNestedEnum[1]);
2964334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai  }
2965334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai
2966beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod  public void testNullRepeatedFieldElements() throws Exception {
2967beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod    // Check that serialization with null array elements doesn't NPE.
2968beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod    String string1 = "1";
2969beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod    String string2 = "2";
2970beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod    byte[] bytes1 = {3, 4};
2971beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod    byte[] bytes2 = {5, 6};
2972beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod    TestAllTypesNano.NestedMessage msg1 = new TestAllTypesNano.NestedMessage();
2973beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod    msg1.bb = 7;
2974beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod    TestAllTypesNano.NestedMessage msg2 = new TestAllTypesNano.NestedMessage();
2975beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod    msg2.bb = 8;
2976beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod
2977beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod    TestAllTypesNano message = new TestAllTypesNano();
2978beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod    message.repeatedString = new String[] {null, string1, string2};
2979beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod    message.repeatedBytes = new byte[][] {bytes1, null, bytes2};
2980beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod    message.repeatedNestedMessage = new TestAllTypesNano.NestedMessage[] {msg1, msg2, null};
2981beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod    message.repeatedGroup = new TestAllTypesNano.RepeatedGroup[] {null, null, null};
2982beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod
2983beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod    byte[] serialized = MessageNano.toByteArray(message); // should not NPE
2984beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod    TestAllTypesNano deserialized = MessageNano.mergeFrom(new TestAllTypesNano(), serialized);
2985beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod    assertEquals(2, deserialized.repeatedString.length);
2986beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod    assertEquals(string1, deserialized.repeatedString[0]);
2987beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod    assertEquals(string2, deserialized.repeatedString[1]);
2988beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod    assertEquals(2, deserialized.repeatedBytes.length);
2989beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod    assertTrue(Arrays.equals(bytes1, deserialized.repeatedBytes[0]));
2990beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod    assertTrue(Arrays.equals(bytes2, deserialized.repeatedBytes[1]));
2991beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod    assertEquals(2, deserialized.repeatedNestedMessage.length);
2992beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod    assertEquals(msg1.bb, deserialized.repeatedNestedMessage[0].bb);
2993beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod    assertEquals(msg2.bb, deserialized.repeatedNestedMessage[1].bb);
2994beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod    assertEquals(0, deserialized.repeatedGroup.length);
2995beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod  }
2996beb57e08a44a140bf52235717f1f907ca857f360Aurash Mahbod
2997334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai  public void testRepeatedMerge() throws Exception {
2998334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    // Check that merging repeated fields cause the arrays to expand with
2999334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    // new data.
3000334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    TestAllTypesNano first = new TestAllTypesNano();
3001334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    first.repeatedInt32 = new int[] {1, 2, 3};
3002334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    TestAllTypesNano second = new TestAllTypesNano();
3003334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    second.repeatedInt32 = new int[] {4, 5};
3004334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    MessageNano.mergeFrom(first, MessageNano.toByteArray(second));
3005334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    assertEquals(5, first.repeatedInt32.length);
3006334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    assertEquals(1, first.repeatedInt32[0]);
3007334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    assertEquals(4, first.repeatedInt32[3]);
3008334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai
3009334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    first = new TestAllTypesNano();
3010334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    first.repeatedNestedEnum = new int[] {TestAllTypesNano.BAR};
3011334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    second = new TestAllTypesNano();
3012334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    second.repeatedNestedEnum = new int[] {TestAllTypesNano.FOO};
3013334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    MessageNano.mergeFrom(first, MessageNano.toByteArray(second));
3014334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    assertEquals(2, first.repeatedNestedEnum.length);
3015334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    assertEquals(TestAllTypesNano.BAR, first.repeatedNestedEnum[0]);
3016334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    assertEquals(TestAllTypesNano.FOO, first.repeatedNestedEnum[1]);
3017334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai
3018334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    first = new TestAllTypesNano();
3019334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    first.repeatedNestedMessage = new TestAllTypesNano.NestedMessage[] {
3020334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai      new TestAllTypesNano.NestedMessage()
3021334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    };
3022334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    first.repeatedNestedMessage[0].bb = 3;
3023334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    second = new TestAllTypesNano();
3024334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    second.repeatedNestedMessage = new TestAllTypesNano.NestedMessage[] {
3025334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai      new TestAllTypesNano.NestedMessage()
3026334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    };
3027334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    second.repeatedNestedMessage[0].bb = 5;
3028334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    MessageNano.mergeFrom(first, MessageNano.toByteArray(second));
3029334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    assertEquals(2, first.repeatedNestedMessage.length);
3030334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    assertEquals(3, first.repeatedNestedMessage[0].bb);
3031334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    assertEquals(5, first.repeatedNestedMessage[1].bb);
3032334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai
3033334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    first = new TestAllTypesNano();
3034334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    first.repeatedPackedSfixed64 = new long[] {-1, -2, -3};
3035334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    second = new TestAllTypesNano();
3036334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    second.repeatedPackedSfixed64 = new long[] {-4, -5};
3037334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    MessageNano.mergeFrom(first, MessageNano.toByteArray(second));
3038334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    assertEquals(5, first.repeatedPackedSfixed64.length);
3039334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    assertEquals(-1, first.repeatedPackedSfixed64[0]);
3040334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    assertEquals(-4, first.repeatedPackedSfixed64[3]);
3041334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai
3042334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    first = new TestAllTypesNano();
3043334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    first.repeatedPackedNestedEnum = new int[] {TestAllTypesNano.BAR};
3044334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    second = new TestAllTypesNano();
3045334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    second.repeatedPackedNestedEnum = new int[] {TestAllTypesNano.FOO};
3046334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    MessageNano.mergeFrom(first, MessageNano.toByteArray(second));
3047334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    assertEquals(2, first.repeatedPackedNestedEnum.length);
3048334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    assertEquals(TestAllTypesNano.BAR, first.repeatedPackedNestedEnum[0]);
3049334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    assertEquals(TestAllTypesNano.FOO, first.repeatedPackedNestedEnum[1]);
3050334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai
3051334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    // Now test repeated merging in a nested scope
3052334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    TestRepeatedMergeNano firstContainer = new TestRepeatedMergeNano();
3053334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    firstContainer.contained = new TestAllTypesNano();
3054334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    firstContainer.contained.repeatedInt32 = new int[] {10, 20};
3055334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    TestRepeatedMergeNano secondContainer = new TestRepeatedMergeNano();
3056334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    secondContainer.contained = new TestAllTypesNano();
3057334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    secondContainer.contained.repeatedInt32 = new int[] {30};
3058334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    MessageNano.mergeFrom(firstContainer, MessageNano.toByteArray(secondContainer));
3059334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    assertEquals(3, firstContainer.contained.repeatedInt32.length);
3060334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    assertEquals(20, firstContainer.contained.repeatedInt32[1]);
3061334a7d1117a576bc6010c14677fb6444639c1ddaMax Cai    assertEquals(30, firstContainer.contained.repeatedInt32[2]);
3062e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff  }
3063e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff
30640b8579237336f221711a0aac42400eb31a58fed3Brian Duff  private void assertHasWireData(MessageNano message, boolean expected) {
3065e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff    byte[] bytes = MessageNano.toByteArray(message);
3066e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff    int wireLength = bytes.length;
30670b8579237336f221711a0aac42400eb31a58fed3Brian Duff    if (expected) {
30680b8579237336f221711a0aac42400eb31a58fed3Brian Duff      assertFalse(wireLength == 0);
30690b8579237336f221711a0aac42400eb31a58fed3Brian Duff    } else {
3070e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff      if (wireLength != 0) {
3071e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff        fail("Expected no wire data for message \n" + message
3072e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff            + "\nBut got:\n"
3073e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff            + hexDump(bytes));
3074e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff      }
3075e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff    }
3076e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff  }
3077e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff
3078e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff  private static String hexDump(byte[] bytes) {
3079e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff    StringBuilder sb = new StringBuilder();
3080e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff    for (byte b : bytes) {
3081e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff      sb.append(String.format("%02x ", b));
30820b8579237336f221711a0aac42400eb31a58fed3Brian Duff    }
3083e03e9f4b5774c0ffe04140d83bbdb532863b1720Brian Duff    return sb.toString();
30840b8579237336f221711a0aac42400eb31a58fed3Brian Duff  }
30850b8579237336f221711a0aac42400eb31a58fed3Brian Duff
30860e055f079f53b07de3705838a7b4742ce56839f8Brian Duff  private <T> List<T> list(T first, T... remaining) {
30870e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    List<T> list = new ArrayList<T>();
30880e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    list.add(first);
30890e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    for (T item : remaining) {
30900e055f079f53b07de3705838a7b4742ce56839f8Brian Duff      list.add(item);
30910e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    }
30920e055f079f53b07de3705838a7b4742ce56839f8Brian Duff    return list;
30930e055f079f53b07de3705838a7b4742ce56839f8Brian Duff  }
309464d8d8f89050c5ada85341f967af391f4716a7cbUlas Kirazci}
3095