1*890232f2SAndroid Build Coastguard Worker 2*890232f2SAndroid Build Coastguard Worker import static com.google.flatbuffers.Constants.*; 3*890232f2SAndroid Build Coastguard Worker 4*890232f2SAndroid Build Coastguard Worker import DictionaryLookup.*; 5*890232f2SAndroid Build Coastguard Worker import MyGame.Example.*; 6*890232f2SAndroid Build Coastguard Worker import optional_scalars.ScalarStuff; 7*890232f2SAndroid Build Coastguard Worker import optional_scalars.OptionalByte; 8*890232f2SAndroid Build Coastguard Worker import MyGame.MonsterExtra; 9*890232f2SAndroid Build Coastguard Worker import NamespaceA.*; 10*890232f2SAndroid Build Coastguard Worker import NamespaceA.NamespaceB.*; 11*890232f2SAndroid Build Coastguard Worker import com.google.flatbuffers.ByteBufferUtil; 12*890232f2SAndroid Build Coastguard Worker import com.google.flatbuffers.ByteVector; 13*890232f2SAndroid Build Coastguard Worker import com.google.flatbuffers.FlatBufferBuilder; 14*890232f2SAndroid Build Coastguard Worker import com.google.flatbuffers.FlexBuffers; 15*890232f2SAndroid Build Coastguard Worker import com.google.flatbuffers.FlexBuffersBuilder; 16*890232f2SAndroid Build Coastguard Worker import com.google.flatbuffers.StringVector; 17*890232f2SAndroid Build Coastguard Worker import com.google.flatbuffers.UnionVector; 18*890232f2SAndroid Build Coastguard Worker 19*890232f2SAndroid Build Coastguard Worker import com.google.flatbuffers.FlexBuffers.FlexBufferException; 20*890232f2SAndroid Build Coastguard Worker import com.google.flatbuffers.FlexBuffers.Reference; 21*890232f2SAndroid Build Coastguard Worker import com.google.flatbuffers.FlexBuffers.Vector; 22*890232f2SAndroid Build Coastguard Worker import com.google.flatbuffers.ArrayReadWriteBuf; 23*890232f2SAndroid Build Coastguard Worker import com.google.flatbuffers.FlexBuffers.KeyVector; 24*890232f2SAndroid Build Coastguard Worker 25*890232f2SAndroid Build Coastguard Worker import java.io.*; 26*890232f2SAndroid Build Coastguard Worker import java.math.BigInteger; 27*890232f2SAndroid Build Coastguard Worker import java.nio.ByteBuffer; 28*890232f2SAndroid Build Coastguard Worker import java.nio.ByteOrder; 29*890232f2SAndroid Build Coastguard Worker import java.nio.CharBuffer; 30*890232f2SAndroid Build Coastguard Worker import java.nio.channels.FileChannel; 31*890232f2SAndroid Build Coastguard Worker import java.nio.charset.StandardCharsets; 32*890232f2SAndroid Build Coastguard Worker import java.util.Arrays; 33*890232f2SAndroid Build Coastguard Worker import java.util.HashMap; 34*890232f2SAndroid Build Coastguard Worker import java.util.Map; 35*890232f2SAndroid Build Coastguard Worker 36*890232f2SAndroid Build Coastguard Worker /* 37*890232f2SAndroid Build Coastguard Worker * Copyright 2014 Google Inc. All rights reserved. 38*890232f2SAndroid Build Coastguard Worker * 39*890232f2SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 40*890232f2SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 41*890232f2SAndroid Build Coastguard Worker * You may obtain a copy of the License at 42*890232f2SAndroid Build Coastguard Worker * 43*890232f2SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 44*890232f2SAndroid Build Coastguard Worker * 45*890232f2SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 46*890232f2SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 47*890232f2SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 48*890232f2SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 49*890232f2SAndroid Build Coastguard Worker * limitations under the License. 50*890232f2SAndroid Build Coastguard Worker */ 51*890232f2SAndroid Build Coastguard Worker 52*890232f2SAndroid Build Coastguard Worker 53*890232f2SAndroid Build Coastguard Worker 54*890232f2SAndroid Build Coastguard Worker class JavaTest { main(String[] args)55*890232f2SAndroid Build Coastguard Worker public static void main(String[] args) { 56*890232f2SAndroid Build Coastguard Worker 57*890232f2SAndroid Build Coastguard Worker // First, let's test reading a FlatBuffer generated by C++ code: 58*890232f2SAndroid Build Coastguard Worker // This file was generated from monsterdata_test.json 59*890232f2SAndroid Build Coastguard Worker 60*890232f2SAndroid Build Coastguard Worker byte[] data = null; 61*890232f2SAndroid Build Coastguard Worker File file = new File("monsterdata_test.mon"); 62*890232f2SAndroid Build Coastguard Worker RandomAccessFile f = null; 63*890232f2SAndroid Build Coastguard Worker try { 64*890232f2SAndroid Build Coastguard Worker f = new RandomAccessFile(file, "r"); 65*890232f2SAndroid Build Coastguard Worker data = new byte[(int)f.length()]; 66*890232f2SAndroid Build Coastguard Worker f.readFully(data); 67*890232f2SAndroid Build Coastguard Worker f.close(); 68*890232f2SAndroid Build Coastguard Worker } catch(java.io.IOException e) { 69*890232f2SAndroid Build Coastguard Worker System.out.println("FlatBuffers test: couldn't read file"); 70*890232f2SAndroid Build Coastguard Worker return; 71*890232f2SAndroid Build Coastguard Worker } 72*890232f2SAndroid Build Coastguard Worker 73*890232f2SAndroid Build Coastguard Worker // Now test it: 74*890232f2SAndroid Build Coastguard Worker 75*890232f2SAndroid Build Coastguard Worker ByteBuffer bb = ByteBuffer.wrap(data); 76*890232f2SAndroid Build Coastguard Worker TestBuffer(bb); 77*890232f2SAndroid Build Coastguard Worker 78*890232f2SAndroid Build Coastguard Worker // Second, let's create a FlatBuffer from scratch in Java, and test it also. 79*890232f2SAndroid Build Coastguard Worker // We use an initial size of 1 to exercise the reallocation algorithm, 80*890232f2SAndroid Build Coastguard Worker // normally a size larger than the typical FlatBuffer you generate would be 81*890232f2SAndroid Build Coastguard Worker // better for performance. 82*890232f2SAndroid Build Coastguard Worker FlatBufferBuilder fbb = new FlatBufferBuilder(1); 83*890232f2SAndroid Build Coastguard Worker 84*890232f2SAndroid Build Coastguard Worker TestBuilderBasics(fbb, true); 85*890232f2SAndroid Build Coastguard Worker TestBuilderBasics(fbb, false); 86*890232f2SAndroid Build Coastguard Worker 87*890232f2SAndroid Build Coastguard Worker TestExtendedBuffer(fbb.dataBuffer().asReadOnlyBuffer()); 88*890232f2SAndroid Build Coastguard Worker 89*890232f2SAndroid Build Coastguard Worker TestNamespaceNesting(); 90*890232f2SAndroid Build Coastguard Worker 91*890232f2SAndroid Build Coastguard Worker TestNestedFlatBuffer(); 92*890232f2SAndroid Build Coastguard Worker 93*890232f2SAndroid Build Coastguard Worker TestCreateByteVector(); 94*890232f2SAndroid Build Coastguard Worker 95*890232f2SAndroid Build Coastguard Worker TestCreateUninitializedVector(); 96*890232f2SAndroid Build Coastguard Worker 97*890232f2SAndroid Build Coastguard Worker TestByteBufferFactory(); 98*890232f2SAndroid Build Coastguard Worker 99*890232f2SAndroid Build Coastguard Worker TestSizedInputStream(); 100*890232f2SAndroid Build Coastguard Worker 101*890232f2SAndroid Build Coastguard Worker TestVectorOfUnions(); 102*890232f2SAndroid Build Coastguard Worker 103*890232f2SAndroid Build Coastguard Worker TestFixedLengthArrays(); 104*890232f2SAndroid Build Coastguard Worker 105*890232f2SAndroid Build Coastguard Worker TestFlexBuffers(); 106*890232f2SAndroid Build Coastguard Worker 107*890232f2SAndroid Build Coastguard Worker TestVectorOfBytes(); 108*890232f2SAndroid Build Coastguard Worker 109*890232f2SAndroid Build Coastguard Worker TestSharedStringPool(); 110*890232f2SAndroid Build Coastguard Worker 111*890232f2SAndroid Build Coastguard Worker TestScalarOptional(); 112*890232f2SAndroid Build Coastguard Worker 113*890232f2SAndroid Build Coastguard Worker TestPackUnpack(bb); 114*890232f2SAndroid Build Coastguard Worker 115*890232f2SAndroid Build Coastguard Worker TestDictionaryLookup(); 116*890232f2SAndroid Build Coastguard Worker 117*890232f2SAndroid Build Coastguard Worker System.out.println("FlatBuffers test: completed successfully"); 118*890232f2SAndroid Build Coastguard Worker } 119*890232f2SAndroid Build Coastguard Worker TestEnums()120*890232f2SAndroid Build Coastguard Worker static void TestEnums() { 121*890232f2SAndroid Build Coastguard Worker TestEq(Color.name(Color.Red), "Red"); 122*890232f2SAndroid Build Coastguard Worker TestEq(Color.name(Color.Blue), "Blue"); 123*890232f2SAndroid Build Coastguard Worker TestEq(Any.name(Any.NONE), "NONE"); 124*890232f2SAndroid Build Coastguard Worker TestEq(Any.name(Any.Monster), "Monster"); 125*890232f2SAndroid Build Coastguard Worker } 126*890232f2SAndroid Build Coastguard Worker TestBuffer(ByteBuffer bb)127*890232f2SAndroid Build Coastguard Worker static void TestBuffer(ByteBuffer bb) { 128*890232f2SAndroid Build Coastguard Worker TestEq(Monster.MonsterBufferHasIdentifier(bb), true); 129*890232f2SAndroid Build Coastguard Worker 130*890232f2SAndroid Build Coastguard Worker Monster monster = Monster.getRootAsMonster(bb); 131*890232f2SAndroid Build Coastguard Worker 132*890232f2SAndroid Build Coastguard Worker TestEq(monster.hp(), (short)80); 133*890232f2SAndroid Build Coastguard Worker TestEq(monster.mana(), (short)150); // default 134*890232f2SAndroid Build Coastguard Worker 135*890232f2SAndroid Build Coastguard Worker TestEq(monster.name(), "MyMonster"); 136*890232f2SAndroid Build Coastguard Worker // monster.friendly() // can't access, deprecated 137*890232f2SAndroid Build Coastguard Worker 138*890232f2SAndroid Build Coastguard Worker Vec3 pos = monster.pos(); 139*890232f2SAndroid Build Coastguard Worker TestEq(pos.x(), 1.0f); 140*890232f2SAndroid Build Coastguard Worker TestEq(pos.y(), 2.0f); 141*890232f2SAndroid Build Coastguard Worker TestEq(pos.z(), 3.0f); 142*890232f2SAndroid Build Coastguard Worker TestEq(pos.test1(), 3.0); 143*890232f2SAndroid Build Coastguard Worker // issue: int != byte 144*890232f2SAndroid Build Coastguard Worker TestEq(pos.test2(), (int) Color.Green); 145*890232f2SAndroid Build Coastguard Worker Test t = pos.test3(); 146*890232f2SAndroid Build Coastguard Worker TestEq(t.a(), (short)5); 147*890232f2SAndroid Build Coastguard Worker TestEq(t.b(), (byte)6); 148*890232f2SAndroid Build Coastguard Worker 149*890232f2SAndroid Build Coastguard Worker TestEq(monster.testType(), (byte)Any.Monster); 150*890232f2SAndroid Build Coastguard Worker Monster monster2 = new Monster(); 151*890232f2SAndroid Build Coastguard Worker TestEq(monster.test(monster2) != null, true); 152*890232f2SAndroid Build Coastguard Worker TestEq(monster2.name(), "Fred"); 153*890232f2SAndroid Build Coastguard Worker 154*890232f2SAndroid Build Coastguard Worker TestEq(monster.inventoryLength(), 5); 155*890232f2SAndroid Build Coastguard Worker int invsum = 0; 156*890232f2SAndroid Build Coastguard Worker for (int i = 0; i < monster.inventoryLength(); i++) 157*890232f2SAndroid Build Coastguard Worker invsum += monster.inventory(i); 158*890232f2SAndroid Build Coastguard Worker TestEq(invsum, 10); 159*890232f2SAndroid Build Coastguard Worker 160*890232f2SAndroid Build Coastguard Worker // Method using a vector access object: 161*890232f2SAndroid Build Coastguard Worker ByteVector inventoryVector = monster.inventoryVector(); 162*890232f2SAndroid Build Coastguard Worker TestEq(inventoryVector.length(), 5); 163*890232f2SAndroid Build Coastguard Worker invsum = 0; 164*890232f2SAndroid Build Coastguard Worker for (int i = 0; i < inventoryVector.length(); i++) 165*890232f2SAndroid Build Coastguard Worker invsum += inventoryVector.getAsUnsigned(i); 166*890232f2SAndroid Build Coastguard Worker TestEq(invsum, 10); 167*890232f2SAndroid Build Coastguard Worker 168*890232f2SAndroid Build Coastguard Worker // Alternative way of accessing a vector: 169*890232f2SAndroid Build Coastguard Worker ByteBuffer ibb = monster.inventoryAsByteBuffer(); 170*890232f2SAndroid Build Coastguard Worker invsum = 0; 171*890232f2SAndroid Build Coastguard Worker while (ibb.position() < ibb.limit()) 172*890232f2SAndroid Build Coastguard Worker invsum += ibb.get(); 173*890232f2SAndroid Build Coastguard Worker TestEq(invsum, 10); 174*890232f2SAndroid Build Coastguard Worker 175*890232f2SAndroid Build Coastguard Worker Test test_0 = monster.test4(0); 176*890232f2SAndroid Build Coastguard Worker Test test_1 = monster.test4(1); 177*890232f2SAndroid Build Coastguard Worker TestEq(monster.test4Length(), 2); 178*890232f2SAndroid Build Coastguard Worker TestEq(test_0.a() + test_0.b() + test_1.a() + test_1.b(), 100); 179*890232f2SAndroid Build Coastguard Worker 180*890232f2SAndroid Build Coastguard Worker Test.Vector test4Vector = monster.test4Vector(); 181*890232f2SAndroid Build Coastguard Worker test_0 = test4Vector.get(0); 182*890232f2SAndroid Build Coastguard Worker test_1 = test4Vector.get(1); 183*890232f2SAndroid Build Coastguard Worker TestEq(test4Vector.length(), 2); 184*890232f2SAndroid Build Coastguard Worker TestEq(test_0.a() + test_0.b() + test_1.a() + test_1.b(), 100); 185*890232f2SAndroid Build Coastguard Worker 186*890232f2SAndroid Build Coastguard Worker TestEq(monster.testarrayofstringLength(), 2); 187*890232f2SAndroid Build Coastguard Worker TestEq(monster.testarrayofstring(0),"test1"); 188*890232f2SAndroid Build Coastguard Worker TestEq(monster.testarrayofstring(1),"test2"); 189*890232f2SAndroid Build Coastguard Worker 190*890232f2SAndroid Build Coastguard Worker // Method using a vector access object: 191*890232f2SAndroid Build Coastguard Worker StringVector testarrayofstringVector = monster.testarrayofstringVector(); 192*890232f2SAndroid Build Coastguard Worker TestEq(testarrayofstringVector.length(), 2); 193*890232f2SAndroid Build Coastguard Worker TestEq(testarrayofstringVector.get(0),"test1"); 194*890232f2SAndroid Build Coastguard Worker TestEq(testarrayofstringVector.get(1),"test2"); 195*890232f2SAndroid Build Coastguard Worker 196*890232f2SAndroid Build Coastguard Worker TestEq(monster.testbool(), true); 197*890232f2SAndroid Build Coastguard Worker } 198*890232f2SAndroid Build Coastguard Worker 199*890232f2SAndroid Build Coastguard Worker // this method checks additional fields not present in the binary buffer read from file 200*890232f2SAndroid Build Coastguard Worker // these new tests are performed on top of the regular tests TestExtendedBuffer(ByteBuffer bb)201*890232f2SAndroid Build Coastguard Worker static void TestExtendedBuffer(ByteBuffer bb) { 202*890232f2SAndroid Build Coastguard Worker TestBuffer(bb); 203*890232f2SAndroid Build Coastguard Worker 204*890232f2SAndroid Build Coastguard Worker Monster monster = Monster.getRootAsMonster(bb); 205*890232f2SAndroid Build Coastguard Worker 206*890232f2SAndroid Build Coastguard Worker TestEq(monster.testhashu32Fnv1(), Integer.MAX_VALUE + 1L); 207*890232f2SAndroid Build Coastguard Worker } 208*890232f2SAndroid Build Coastguard Worker TestNamespaceNesting()209*890232f2SAndroid Build Coastguard Worker static void TestNamespaceNesting() { 210*890232f2SAndroid Build Coastguard Worker // reference / manipulate these to verify compilation 211*890232f2SAndroid Build Coastguard Worker FlatBufferBuilder fbb = new FlatBufferBuilder(1); 212*890232f2SAndroid Build Coastguard Worker 213*890232f2SAndroid Build Coastguard Worker TableInNestedNS.startTableInNestedNS(fbb); 214*890232f2SAndroid Build Coastguard Worker TableInNestedNS.addFoo(fbb, 1234); 215*890232f2SAndroid Build Coastguard Worker int nestedTableOff = TableInNestedNS.endTableInNestedNS(fbb); 216*890232f2SAndroid Build Coastguard Worker 217*890232f2SAndroid Build Coastguard Worker TableInFirstNS.startTableInFirstNS(fbb); 218*890232f2SAndroid Build Coastguard Worker TableInFirstNS.addFooTable(fbb, nestedTableOff); 219*890232f2SAndroid Build Coastguard Worker int off = TableInFirstNS.endTableInFirstNS(fbb); 220*890232f2SAndroid Build Coastguard Worker } 221*890232f2SAndroid Build Coastguard Worker TestNestedFlatBuffer()222*890232f2SAndroid Build Coastguard Worker static void TestNestedFlatBuffer() { 223*890232f2SAndroid Build Coastguard Worker final String nestedMonsterName = "NestedMonsterName"; 224*890232f2SAndroid Build Coastguard Worker final short nestedMonsterHp = 600; 225*890232f2SAndroid Build Coastguard Worker final short nestedMonsterMana = 1024; 226*890232f2SAndroid Build Coastguard Worker 227*890232f2SAndroid Build Coastguard Worker FlatBufferBuilder fbb1 = new FlatBufferBuilder(16); 228*890232f2SAndroid Build Coastguard Worker int str1 = fbb1.createString(nestedMonsterName); 229*890232f2SAndroid Build Coastguard Worker Monster.startMonster(fbb1); 230*890232f2SAndroid Build Coastguard Worker Monster.addName(fbb1, str1); 231*890232f2SAndroid Build Coastguard Worker Monster.addHp(fbb1, nestedMonsterHp); 232*890232f2SAndroid Build Coastguard Worker Monster.addMana(fbb1, nestedMonsterMana); 233*890232f2SAndroid Build Coastguard Worker int monster1 = Monster.endMonster(fbb1); 234*890232f2SAndroid Build Coastguard Worker Monster.finishMonsterBuffer(fbb1, monster1); 235*890232f2SAndroid Build Coastguard Worker byte[] fbb1Bytes = fbb1.sizedByteArray(); 236*890232f2SAndroid Build Coastguard Worker fbb1 = null; 237*890232f2SAndroid Build Coastguard Worker 238*890232f2SAndroid Build Coastguard Worker FlatBufferBuilder fbb2 = new FlatBufferBuilder(16); 239*890232f2SAndroid Build Coastguard Worker int str2 = fbb2.createString("My Monster"); 240*890232f2SAndroid Build Coastguard Worker int nestedBuffer = Monster.createTestnestedflatbufferVector(fbb2, fbb1Bytes); 241*890232f2SAndroid Build Coastguard Worker Monster.startMonster(fbb2); 242*890232f2SAndroid Build Coastguard Worker Monster.addName(fbb2, str2); 243*890232f2SAndroid Build Coastguard Worker Monster.addHp(fbb2, (short)50); 244*890232f2SAndroid Build Coastguard Worker Monster.addMana(fbb2, (short)32); 245*890232f2SAndroid Build Coastguard Worker Monster.addTestnestedflatbuffer(fbb2, nestedBuffer); 246*890232f2SAndroid Build Coastguard Worker int monster = Monster.endMonster(fbb2); 247*890232f2SAndroid Build Coastguard Worker Monster.finishMonsterBuffer(fbb2, monster); 248*890232f2SAndroid Build Coastguard Worker 249*890232f2SAndroid Build Coastguard Worker // Now test the data extracted from the nested buffer 250*890232f2SAndroid Build Coastguard Worker Monster mons = Monster.getRootAsMonster(fbb2.dataBuffer()); 251*890232f2SAndroid Build Coastguard Worker Monster nestedMonster = mons.testnestedflatbufferAsMonster(); 252*890232f2SAndroid Build Coastguard Worker 253*890232f2SAndroid Build Coastguard Worker TestEq(nestedMonsterMana, nestedMonster.mana()); 254*890232f2SAndroid Build Coastguard Worker TestEq(nestedMonsterHp, nestedMonster.hp()); 255*890232f2SAndroid Build Coastguard Worker TestEq(nestedMonsterName, nestedMonster.name()); 256*890232f2SAndroid Build Coastguard Worker } 257*890232f2SAndroid Build Coastguard Worker TestCreateByteVector()258*890232f2SAndroid Build Coastguard Worker static void TestCreateByteVector() { 259*890232f2SAndroid Build Coastguard Worker FlatBufferBuilder fbb = new FlatBufferBuilder(16); 260*890232f2SAndroid Build Coastguard Worker int str = fbb.createString("MyMonster"); 261*890232f2SAndroid Build Coastguard Worker byte[] inventory = new byte[] { 0, 1, 2, 3, 4 }; 262*890232f2SAndroid Build Coastguard Worker int vec = fbb.createByteVector(inventory); 263*890232f2SAndroid Build Coastguard Worker Monster.startMonster(fbb); 264*890232f2SAndroid Build Coastguard Worker Monster.addInventory(fbb, vec); 265*890232f2SAndroid Build Coastguard Worker Monster.addName(fbb, str); 266*890232f2SAndroid Build Coastguard Worker int monster1 = Monster.endMonster(fbb); 267*890232f2SAndroid Build Coastguard Worker Monster.finishMonsterBuffer(fbb, monster1); 268*890232f2SAndroid Build Coastguard Worker Monster monsterObject = Monster.getRootAsMonster(fbb.dataBuffer()); 269*890232f2SAndroid Build Coastguard Worker 270*890232f2SAndroid Build Coastguard Worker TestEq(monsterObject.inventory(1), (int)inventory[1]); 271*890232f2SAndroid Build Coastguard Worker TestEq(monsterObject.inventoryLength(), inventory.length); 272*890232f2SAndroid Build Coastguard Worker ByteVector inventoryVector = monsterObject.inventoryVector(); 273*890232f2SAndroid Build Coastguard Worker TestEq(inventoryVector.getAsUnsigned(1), (int)inventory[1]); 274*890232f2SAndroid Build Coastguard Worker TestEq(inventoryVector.length(), inventory.length); 275*890232f2SAndroid Build Coastguard Worker 276*890232f2SAndroid Build Coastguard Worker TestEq(ByteBuffer.wrap(inventory), monsterObject.inventoryAsByteBuffer()); 277*890232f2SAndroid Build Coastguard Worker } 278*890232f2SAndroid Build Coastguard Worker TestCreateUninitializedVector()279*890232f2SAndroid Build Coastguard Worker static void TestCreateUninitializedVector() { 280*890232f2SAndroid Build Coastguard Worker FlatBufferBuilder fbb = new FlatBufferBuilder(16); 281*890232f2SAndroid Build Coastguard Worker int str = fbb.createString("MyMonster"); 282*890232f2SAndroid Build Coastguard Worker byte[] inventory = new byte[] { 0, 1, 2, 3, 4 }; 283*890232f2SAndroid Build Coastguard Worker ByteBuffer bb = fbb.createUnintializedVector(1, inventory.length, 1); 284*890232f2SAndroid Build Coastguard Worker for (byte i:inventory) { 285*890232f2SAndroid Build Coastguard Worker bb.put(i); 286*890232f2SAndroid Build Coastguard Worker } 287*890232f2SAndroid Build Coastguard Worker int vec = fbb.endVector(); 288*890232f2SAndroid Build Coastguard Worker Monster.startMonster(fbb); 289*890232f2SAndroid Build Coastguard Worker Monster.addInventory(fbb, vec); 290*890232f2SAndroid Build Coastguard Worker Monster.addName(fbb, str); 291*890232f2SAndroid Build Coastguard Worker int monster1 = Monster.endMonster(fbb); 292*890232f2SAndroid Build Coastguard Worker Monster.finishMonsterBuffer(fbb, monster1); 293*890232f2SAndroid Build Coastguard Worker Monster monsterObject = Monster.getRootAsMonster(fbb.dataBuffer()); 294*890232f2SAndroid Build Coastguard Worker 295*890232f2SAndroid Build Coastguard Worker TestEq(monsterObject.inventory(1), (int)inventory[1]); 296*890232f2SAndroid Build Coastguard Worker TestEq(monsterObject.inventoryLength(), inventory.length); 297*890232f2SAndroid Build Coastguard Worker ByteVector inventoryVector = monsterObject.inventoryVector(); 298*890232f2SAndroid Build Coastguard Worker TestEq(inventoryVector.getAsUnsigned(1), (int)inventory[1]); 299*890232f2SAndroid Build Coastguard Worker TestEq(inventoryVector.length(), inventory.length); 300*890232f2SAndroid Build Coastguard Worker TestEq(ByteBuffer.wrap(inventory), monsterObject.inventoryAsByteBuffer()); 301*890232f2SAndroid Build Coastguard Worker } 302*890232f2SAndroid Build Coastguard Worker TestByteBufferFactory()303*890232f2SAndroid Build Coastguard Worker static void TestByteBufferFactory() { 304*890232f2SAndroid Build Coastguard Worker final class MappedByteBufferFactory extends FlatBufferBuilder.ByteBufferFactory { 305*890232f2SAndroid Build Coastguard Worker @Override 306*890232f2SAndroid Build Coastguard Worker public ByteBuffer newByteBuffer(int capacity) { 307*890232f2SAndroid Build Coastguard Worker ByteBuffer bb; 308*890232f2SAndroid Build Coastguard Worker try { 309*890232f2SAndroid Build Coastguard Worker RandomAccessFile f = new RandomAccessFile("javatest.bin", "rw"); 310*890232f2SAndroid Build Coastguard Worker bb = f.getChannel().map(FileChannel.MapMode.READ_WRITE, 0, capacity).order(ByteOrder.LITTLE_ENDIAN); 311*890232f2SAndroid Build Coastguard Worker f.close(); 312*890232f2SAndroid Build Coastguard Worker } catch(Throwable e) { 313*890232f2SAndroid Build Coastguard Worker System.out.println("FlatBuffers test: couldn't map ByteBuffer to a file"); 314*890232f2SAndroid Build Coastguard Worker bb = null; 315*890232f2SAndroid Build Coastguard Worker } 316*890232f2SAndroid Build Coastguard Worker return bb; 317*890232f2SAndroid Build Coastguard Worker } 318*890232f2SAndroid Build Coastguard Worker } 319*890232f2SAndroid Build Coastguard Worker 320*890232f2SAndroid Build Coastguard Worker FlatBufferBuilder fbb = new FlatBufferBuilder(1, new MappedByteBufferFactory()); 321*890232f2SAndroid Build Coastguard Worker 322*890232f2SAndroid Build Coastguard Worker TestBuilderBasics(fbb, false); 323*890232f2SAndroid Build Coastguard Worker } 324*890232f2SAndroid Build Coastguard Worker TestSizedInputStream()325*890232f2SAndroid Build Coastguard Worker static void TestSizedInputStream() { 326*890232f2SAndroid Build Coastguard Worker // Test on default FlatBufferBuilder that uses HeapByteBuffer 327*890232f2SAndroid Build Coastguard Worker FlatBufferBuilder fbb = new FlatBufferBuilder(1); 328*890232f2SAndroid Build Coastguard Worker 329*890232f2SAndroid Build Coastguard Worker TestBuilderBasics(fbb, false); 330*890232f2SAndroid Build Coastguard Worker 331*890232f2SAndroid Build Coastguard Worker InputStream in = fbb.sizedInputStream(); 332*890232f2SAndroid Build Coastguard Worker byte[] array = fbb.sizedByteArray(); 333*890232f2SAndroid Build Coastguard Worker int count = 0; 334*890232f2SAndroid Build Coastguard Worker int currentVal = 0; 335*890232f2SAndroid Build Coastguard Worker 336*890232f2SAndroid Build Coastguard Worker while (currentVal != -1 && count < array.length) { 337*890232f2SAndroid Build Coastguard Worker try { 338*890232f2SAndroid Build Coastguard Worker currentVal = in.read(); 339*890232f2SAndroid Build Coastguard Worker } catch(java.io.IOException e) { 340*890232f2SAndroid Build Coastguard Worker System.out.println("FlatBuffers test: couldn't read from InputStream"); 341*890232f2SAndroid Build Coastguard Worker return; 342*890232f2SAndroid Build Coastguard Worker } 343*890232f2SAndroid Build Coastguard Worker TestEq((byte)currentVal, array[count]); 344*890232f2SAndroid Build Coastguard Worker count++; 345*890232f2SAndroid Build Coastguard Worker } 346*890232f2SAndroid Build Coastguard Worker TestEq(count, array.length); 347*890232f2SAndroid Build Coastguard Worker } 348*890232f2SAndroid Build Coastguard Worker TestBuilderBasics(FlatBufferBuilder fbb, boolean sizePrefix)349*890232f2SAndroid Build Coastguard Worker static void TestBuilderBasics(FlatBufferBuilder fbb, boolean sizePrefix) { 350*890232f2SAndroid Build Coastguard Worker int[] names = {fbb.createString("Frodo"), fbb.createString("Barney"), fbb.createString("Wilma")}; 351*890232f2SAndroid Build Coastguard Worker int[] off = new int[3]; 352*890232f2SAndroid Build Coastguard Worker Monster.startMonster(fbb); 353*890232f2SAndroid Build Coastguard Worker Monster.addName(fbb, names[0]); 354*890232f2SAndroid Build Coastguard Worker off[0] = Monster.endMonster(fbb); 355*890232f2SAndroid Build Coastguard Worker Monster.startMonster(fbb); 356*890232f2SAndroid Build Coastguard Worker Monster.addName(fbb, names[1]); 357*890232f2SAndroid Build Coastguard Worker off[1] = Monster.endMonster(fbb); 358*890232f2SAndroid Build Coastguard Worker Monster.startMonster(fbb); 359*890232f2SAndroid Build Coastguard Worker Monster.addName(fbb, names[2]); 360*890232f2SAndroid Build Coastguard Worker off[2] = Monster.endMonster(fbb); 361*890232f2SAndroid Build Coastguard Worker int sortMons = fbb.createSortedVectorOfTables(new Monster(), off); 362*890232f2SAndroid Build Coastguard Worker 363*890232f2SAndroid Build Coastguard Worker // We set up the same values as monsterdata.json: 364*890232f2SAndroid Build Coastguard Worker 365*890232f2SAndroid Build Coastguard Worker int str = fbb.createString("MyMonster"); 366*890232f2SAndroid Build Coastguard Worker 367*890232f2SAndroid Build Coastguard Worker int inv = Monster.createInventoryVector(fbb, new byte[] { 0, 1, 2, 3, 4 }); 368*890232f2SAndroid Build Coastguard Worker 369*890232f2SAndroid Build Coastguard Worker int fred = fbb.createString("Fred"); 370*890232f2SAndroid Build Coastguard Worker Monster.startMonster(fbb); 371*890232f2SAndroid Build Coastguard Worker Monster.addName(fbb, fred); 372*890232f2SAndroid Build Coastguard Worker int mon2 = Monster.endMonster(fbb); 373*890232f2SAndroid Build Coastguard Worker 374*890232f2SAndroid Build Coastguard Worker Monster.startTest4Vector(fbb, 2); 375*890232f2SAndroid Build Coastguard Worker Test.createTest(fbb, (short)10, (byte)20); 376*890232f2SAndroid Build Coastguard Worker Test.createTest(fbb, (short)30, (byte)40); 377*890232f2SAndroid Build Coastguard Worker int test4 = fbb.endVector(); 378*890232f2SAndroid Build Coastguard Worker 379*890232f2SAndroid Build Coastguard Worker int testArrayOfString = Monster.createTestarrayofstringVector(fbb, new int[] { 380*890232f2SAndroid Build Coastguard Worker fbb.createString("test1"), 381*890232f2SAndroid Build Coastguard Worker fbb.createString("test2") 382*890232f2SAndroid Build Coastguard Worker }); 383*890232f2SAndroid Build Coastguard Worker 384*890232f2SAndroid Build Coastguard Worker Monster.startMonster(fbb); 385*890232f2SAndroid Build Coastguard Worker Monster.addPos(fbb, Vec3.createVec3(fbb, 1.0f, 2.0f, 3.0f, 3.0, 386*890232f2SAndroid Build Coastguard Worker Color.Green, (short)5, (byte)6)); 387*890232f2SAndroid Build Coastguard Worker Monster.addHp(fbb, (short)80); 388*890232f2SAndroid Build Coastguard Worker Monster.addName(fbb, str); 389*890232f2SAndroid Build Coastguard Worker Monster.addInventory(fbb, inv); 390*890232f2SAndroid Build Coastguard Worker Monster.addTestType(fbb, (byte)Any.Monster); 391*890232f2SAndroid Build Coastguard Worker Monster.addTest(fbb, mon2); 392*890232f2SAndroid Build Coastguard Worker Monster.addTest4(fbb, test4); 393*890232f2SAndroid Build Coastguard Worker Monster.addTestarrayofstring(fbb, testArrayOfString); 394*890232f2SAndroid Build Coastguard Worker Monster.addTestbool(fbb, true); 395*890232f2SAndroid Build Coastguard Worker Monster.addTesthashu32Fnv1(fbb, Integer.MAX_VALUE + 1L); 396*890232f2SAndroid Build Coastguard Worker Monster.addTestarrayoftables(fbb, sortMons); 397*890232f2SAndroid Build Coastguard Worker int mon = Monster.endMonster(fbb); 398*890232f2SAndroid Build Coastguard Worker 399*890232f2SAndroid Build Coastguard Worker if (sizePrefix) { 400*890232f2SAndroid Build Coastguard Worker Monster.finishSizePrefixedMonsterBuffer(fbb, mon); 401*890232f2SAndroid Build Coastguard Worker } else { 402*890232f2SAndroid Build Coastguard Worker Monster.finishMonsterBuffer(fbb, mon); 403*890232f2SAndroid Build Coastguard Worker } 404*890232f2SAndroid Build Coastguard Worker 405*890232f2SAndroid Build Coastguard Worker // Write the result to a file for debugging purposes: 406*890232f2SAndroid Build Coastguard Worker // Note that the binaries are not necessarily identical, since the JSON 407*890232f2SAndroid Build Coastguard Worker // parser may serialize in a slightly different order than the above 408*890232f2SAndroid Build Coastguard Worker // Java code. They are functionally equivalent though. 409*890232f2SAndroid Build Coastguard Worker 410*890232f2SAndroid Build Coastguard Worker try { 411*890232f2SAndroid Build Coastguard Worker String filename = "monsterdata_java_wire" + (sizePrefix ? "_sp" : "") + ".mon"; 412*890232f2SAndroid Build Coastguard Worker FileChannel fc = new FileOutputStream(filename).getChannel(); 413*890232f2SAndroid Build Coastguard Worker fc.write(fbb.dataBuffer().duplicate()); 414*890232f2SAndroid Build Coastguard Worker fc.close(); 415*890232f2SAndroid Build Coastguard Worker } catch(java.io.IOException e) { 416*890232f2SAndroid Build Coastguard Worker System.out.println("FlatBuffers test: couldn't write file"); 417*890232f2SAndroid Build Coastguard Worker return; 418*890232f2SAndroid Build Coastguard Worker } 419*890232f2SAndroid Build Coastguard Worker 420*890232f2SAndroid Build Coastguard Worker // Test it: 421*890232f2SAndroid Build Coastguard Worker ByteBuffer dataBuffer = fbb.dataBuffer(); 422*890232f2SAndroid Build Coastguard Worker if (sizePrefix) { 423*890232f2SAndroid Build Coastguard Worker TestEq(ByteBufferUtil.getSizePrefix(dataBuffer) + SIZE_PREFIX_LENGTH, 424*890232f2SAndroid Build Coastguard Worker dataBuffer.remaining()); 425*890232f2SAndroid Build Coastguard Worker dataBuffer = ByteBufferUtil.removeSizePrefix(dataBuffer); 426*890232f2SAndroid Build Coastguard Worker } 427*890232f2SAndroid Build Coastguard Worker TestExtendedBuffer(dataBuffer); 428*890232f2SAndroid Build Coastguard Worker 429*890232f2SAndroid Build Coastguard Worker // Make sure it also works with read only ByteBuffers. This is slower, 430*890232f2SAndroid Build Coastguard Worker // since creating strings incurs an additional copy 431*890232f2SAndroid Build Coastguard Worker // (see Table.__string). 432*890232f2SAndroid Build Coastguard Worker TestExtendedBuffer(dataBuffer.asReadOnlyBuffer()); 433*890232f2SAndroid Build Coastguard Worker 434*890232f2SAndroid Build Coastguard Worker TestEnums(); 435*890232f2SAndroid Build Coastguard Worker 436*890232f2SAndroid Build Coastguard Worker //Attempt to mutate Monster fields and check whether the buffer has been mutated properly 437*890232f2SAndroid Build Coastguard Worker // revert to original values after testing 438*890232f2SAndroid Build Coastguard Worker Monster monster = Monster.getRootAsMonster(dataBuffer); 439*890232f2SAndroid Build Coastguard Worker 440*890232f2SAndroid Build Coastguard Worker // mana is optional and does not exist in the buffer so the mutation should fail 441*890232f2SAndroid Build Coastguard Worker // the mana field should retain its default value 442*890232f2SAndroid Build Coastguard Worker TestEq(monster.mutateMana((short)10), false); 443*890232f2SAndroid Build Coastguard Worker TestEq(monster.mana(), (short)150); 444*890232f2SAndroid Build Coastguard Worker 445*890232f2SAndroid Build Coastguard Worker // Accessing a vector of sorted by the key tables 446*890232f2SAndroid Build Coastguard Worker TestEq(monster.testarrayoftables(0).name(), "Barney"); 447*890232f2SAndroid Build Coastguard Worker TestEq(monster.testarrayoftables(1).name(), "Frodo"); 448*890232f2SAndroid Build Coastguard Worker TestEq(monster.testarrayoftables(2).name(), "Wilma"); 449*890232f2SAndroid Build Coastguard Worker Monster.Vector testarrayoftablesVector = monster.testarrayoftablesVector(); 450*890232f2SAndroid Build Coastguard Worker TestEq(testarrayoftablesVector.get(0).name(), "Barney"); 451*890232f2SAndroid Build Coastguard Worker TestEq(testarrayoftablesVector.get(1).name(), "Frodo"); 452*890232f2SAndroid Build Coastguard Worker TestEq(testarrayoftablesVector.get(2).name(), "Wilma"); 453*890232f2SAndroid Build Coastguard Worker 454*890232f2SAndroid Build Coastguard Worker // Example of searching for a table by the key 455*890232f2SAndroid Build Coastguard Worker TestEq(monster.testarrayoftablesByKey("Frodo").name(), "Frodo"); 456*890232f2SAndroid Build Coastguard Worker TestEq(monster.testarrayoftablesByKey("Barney").name(), "Barney"); 457*890232f2SAndroid Build Coastguard Worker TestEq(monster.testarrayoftablesByKey("Wilma").name(), "Wilma"); 458*890232f2SAndroid Build Coastguard Worker TestEq(testarrayoftablesVector.getByKey("Frodo").name(), "Frodo"); 459*890232f2SAndroid Build Coastguard Worker TestEq(testarrayoftablesVector.getByKey("Barney").name(), "Barney"); 460*890232f2SAndroid Build Coastguard Worker TestEq(testarrayoftablesVector.getByKey("Wilma").name(), "Wilma"); 461*890232f2SAndroid Build Coastguard Worker 462*890232f2SAndroid Build Coastguard Worker // testType is an existing field and mutating it should succeed 463*890232f2SAndroid Build Coastguard Worker TestEq(monster.testType(), (byte)Any.Monster); 464*890232f2SAndroid Build Coastguard Worker 465*890232f2SAndroid Build Coastguard Worker //mutate the inventory vector 466*890232f2SAndroid Build Coastguard Worker TestEq(monster.mutateInventory(0, 1), true); 467*890232f2SAndroid Build Coastguard Worker TestEq(monster.mutateInventory(1, 2), true); 468*890232f2SAndroid Build Coastguard Worker TestEq(monster.mutateInventory(2, 3), true); 469*890232f2SAndroid Build Coastguard Worker TestEq(monster.mutateInventory(3, 4), true); 470*890232f2SAndroid Build Coastguard Worker TestEq(monster.mutateInventory(4, 5), true); 471*890232f2SAndroid Build Coastguard Worker 472*890232f2SAndroid Build Coastguard Worker for (int i = 0; i < monster.inventoryLength(); i++) { 473*890232f2SAndroid Build Coastguard Worker TestEq(monster.inventory(i), i + 1); 474*890232f2SAndroid Build Coastguard Worker } 475*890232f2SAndroid Build Coastguard Worker ByteVector inventoryVector = monster.inventoryVector(); 476*890232f2SAndroid Build Coastguard Worker for (int i = 0; i < inventoryVector.length(); i++) { 477*890232f2SAndroid Build Coastguard Worker TestEq((int)inventoryVector.get(i), i + 1); 478*890232f2SAndroid Build Coastguard Worker } 479*890232f2SAndroid Build Coastguard Worker 480*890232f2SAndroid Build Coastguard Worker //reverse mutation 481*890232f2SAndroid Build Coastguard Worker TestEq(monster.mutateInventory(0, 0), true); 482*890232f2SAndroid Build Coastguard Worker TestEq(monster.mutateInventory(1, 1), true); 483*890232f2SAndroid Build Coastguard Worker TestEq(monster.mutateInventory(2, 2), true); 484*890232f2SAndroid Build Coastguard Worker TestEq(monster.mutateInventory(3, 3), true); 485*890232f2SAndroid Build Coastguard Worker TestEq(monster.mutateInventory(4, 4), true); 486*890232f2SAndroid Build Coastguard Worker 487*890232f2SAndroid Build Coastguard Worker // get a struct field and edit one of its fields 488*890232f2SAndroid Build Coastguard Worker Vec3 pos = monster.pos(); 489*890232f2SAndroid Build Coastguard Worker TestEq(pos.x(), 1.0f); 490*890232f2SAndroid Build Coastguard Worker pos.mutateX(55.0f); 491*890232f2SAndroid Build Coastguard Worker TestEq(pos.x(), 55.0f); 492*890232f2SAndroid Build Coastguard Worker pos.mutateX(1.0f); 493*890232f2SAndroid Build Coastguard Worker TestEq(pos.x(), 1.0f); 494*890232f2SAndroid Build Coastguard Worker } 495*890232f2SAndroid Build Coastguard Worker TestVectorOfUnions()496*890232f2SAndroid Build Coastguard Worker static void TestVectorOfUnions() { 497*890232f2SAndroid Build Coastguard Worker final FlatBufferBuilder fbb = new FlatBufferBuilder(); 498*890232f2SAndroid Build Coastguard Worker 499*890232f2SAndroid Build Coastguard Worker final int swordAttackDamage = 1; 500*890232f2SAndroid Build Coastguard Worker 501*890232f2SAndroid Build Coastguard Worker final int[] characterVector = new int[] { 502*890232f2SAndroid Build Coastguard Worker Attacker.createAttacker(fbb, swordAttackDamage), 503*890232f2SAndroid Build Coastguard Worker }; 504*890232f2SAndroid Build Coastguard Worker 505*890232f2SAndroid Build Coastguard Worker final byte[] characterTypeVector = new byte[]{ 506*890232f2SAndroid Build Coastguard Worker Character.MuLan, 507*890232f2SAndroid Build Coastguard Worker }; 508*890232f2SAndroid Build Coastguard Worker 509*890232f2SAndroid Build Coastguard Worker Movie.finishMovieBuffer( 510*890232f2SAndroid Build Coastguard Worker fbb, 511*890232f2SAndroid Build Coastguard Worker Movie.createMovie( 512*890232f2SAndroid Build Coastguard Worker fbb, 513*890232f2SAndroid Build Coastguard Worker (byte)0, 514*890232f2SAndroid Build Coastguard Worker (byte)0, 515*890232f2SAndroid Build Coastguard Worker Movie.createCharactersTypeVector(fbb, characterTypeVector), 516*890232f2SAndroid Build Coastguard Worker Movie.createCharactersVector(fbb, characterVector) 517*890232f2SAndroid Build Coastguard Worker ) 518*890232f2SAndroid Build Coastguard Worker ); 519*890232f2SAndroid Build Coastguard Worker 520*890232f2SAndroid Build Coastguard Worker final Movie movie = Movie.getRootAsMovie(fbb.dataBuffer()); 521*890232f2SAndroid Build Coastguard Worker ByteVector charactersTypeByteVector = movie.charactersTypeVector(); 522*890232f2SAndroid Build Coastguard Worker UnionVector charactersVector = movie.charactersVector(); 523*890232f2SAndroid Build Coastguard Worker 524*890232f2SAndroid Build Coastguard Worker TestEq(movie.charactersTypeLength(), characterTypeVector.length); 525*890232f2SAndroid Build Coastguard Worker TestEq(charactersTypeByteVector.length(), characterTypeVector.length); 526*890232f2SAndroid Build Coastguard Worker TestEq(movie.charactersLength(), characterVector.length); 527*890232f2SAndroid Build Coastguard Worker TestEq(charactersVector.length(), characterVector.length); 528*890232f2SAndroid Build Coastguard Worker 529*890232f2SAndroid Build Coastguard Worker TestEq(movie.charactersType(0), characterTypeVector[0]); 530*890232f2SAndroid Build Coastguard Worker TestEq(charactersTypeByteVector.get(0), characterTypeVector[0]); 531*890232f2SAndroid Build Coastguard Worker 532*890232f2SAndroid Build Coastguard Worker TestEq(((Attacker)movie.characters(new Attacker(), 0)).swordAttackDamage(), swordAttackDamage); 533*890232f2SAndroid Build Coastguard Worker } 534*890232f2SAndroid Build Coastguard Worker TestFixedLengthArrays()535*890232f2SAndroid Build Coastguard Worker static void TestFixedLengthArrays() { 536*890232f2SAndroid Build Coastguard Worker FlatBufferBuilder builder = new FlatBufferBuilder(0); 537*890232f2SAndroid Build Coastguard Worker 538*890232f2SAndroid Build Coastguard Worker float a; 539*890232f2SAndroid Build Coastguard Worker int[] b = new int[15]; 540*890232f2SAndroid Build Coastguard Worker byte c; 541*890232f2SAndroid Build Coastguard Worker int[][] d_a = new int[2][2]; 542*890232f2SAndroid Build Coastguard Worker byte[] d_b = new byte[2]; 543*890232f2SAndroid Build Coastguard Worker byte[][] d_c = new byte[2][2]; 544*890232f2SAndroid Build Coastguard Worker long[][] d_d = new long[2][2]; 545*890232f2SAndroid Build Coastguard Worker int e; 546*890232f2SAndroid Build Coastguard Worker long[] f = new long[2]; 547*890232f2SAndroid Build Coastguard Worker 548*890232f2SAndroid Build Coastguard Worker a = 0.5f; 549*890232f2SAndroid Build Coastguard Worker for (int i = 0; i < 15; i++) b[i] = i; 550*890232f2SAndroid Build Coastguard Worker c = 1; 551*890232f2SAndroid Build Coastguard Worker d_a[0][0] = 1; 552*890232f2SAndroid Build Coastguard Worker d_a[0][1] = 2; 553*890232f2SAndroid Build Coastguard Worker d_a[1][0] = 3; 554*890232f2SAndroid Build Coastguard Worker d_a[1][1] = 4; 555*890232f2SAndroid Build Coastguard Worker d_b[0] = TestEnum.B; 556*890232f2SAndroid Build Coastguard Worker d_b[1] = TestEnum.C; 557*890232f2SAndroid Build Coastguard Worker d_c[0][0] = TestEnum.A; 558*890232f2SAndroid Build Coastguard Worker d_c[0][1] = TestEnum.B; 559*890232f2SAndroid Build Coastguard Worker d_c[1][0] = TestEnum.C; 560*890232f2SAndroid Build Coastguard Worker d_c[1][1] = TestEnum.B; 561*890232f2SAndroid Build Coastguard Worker d_d[0][0] = -1; 562*890232f2SAndroid Build Coastguard Worker d_d[0][1] = 1; 563*890232f2SAndroid Build Coastguard Worker d_d[1][0] = -2; 564*890232f2SAndroid Build Coastguard Worker d_d[1][1] = 2; 565*890232f2SAndroid Build Coastguard Worker e = 2; 566*890232f2SAndroid Build Coastguard Worker f[0] = -1; 567*890232f2SAndroid Build Coastguard Worker f[1] = 1; 568*890232f2SAndroid Build Coastguard Worker 569*890232f2SAndroid Build Coastguard Worker int arrayOffset = ArrayStruct.createArrayStruct(builder, 570*890232f2SAndroid Build Coastguard Worker a, b, c, d_a, d_b, d_c, d_d, e, f); 571*890232f2SAndroid Build Coastguard Worker 572*890232f2SAndroid Build Coastguard Worker // Create a table with the ArrayStruct. 573*890232f2SAndroid Build Coastguard Worker ArrayTable.startArrayTable(builder); 574*890232f2SAndroid Build Coastguard Worker ArrayTable.addA(builder, arrayOffset); 575*890232f2SAndroid Build Coastguard Worker int tableOffset = ArrayTable.endArrayTable(builder); 576*890232f2SAndroid Build Coastguard Worker 577*890232f2SAndroid Build Coastguard Worker ArrayTable.finishArrayTableBuffer(builder, tableOffset); 578*890232f2SAndroid Build Coastguard Worker 579*890232f2SAndroid Build Coastguard Worker ArrayTable table = ArrayTable.getRootAsArrayTable(builder.dataBuffer()); 580*890232f2SAndroid Build Coastguard Worker NestedStruct nested = new NestedStruct(); 581*890232f2SAndroid Build Coastguard Worker 582*890232f2SAndroid Build Coastguard Worker TestEq(table.a().a(), 0.5f); 583*890232f2SAndroid Build Coastguard Worker for (int i = 0; i < 15; i++) TestEq(table.a().b(i), i); 584*890232f2SAndroid Build Coastguard Worker TestEq(table.a().c(), (byte)1); 585*890232f2SAndroid Build Coastguard Worker TestEq(table.a().d(nested, 0).a(0), 1); 586*890232f2SAndroid Build Coastguard Worker TestEq(table.a().d(nested, 0).a(1), 2); 587*890232f2SAndroid Build Coastguard Worker TestEq(table.a().d(nested, 1).a(0), 3); 588*890232f2SAndroid Build Coastguard Worker TestEq(table.a().d(nested, 1).a(1), 4); 589*890232f2SAndroid Build Coastguard Worker TestEq(table.a().d(nested, 0).b(), TestEnum.B); 590*890232f2SAndroid Build Coastguard Worker TestEq(table.a().d(nested, 1).b(), TestEnum.C); 591*890232f2SAndroid Build Coastguard Worker TestEq(table.a().d(nested, 0).c(0), TestEnum.A); 592*890232f2SAndroid Build Coastguard Worker TestEq(table.a().d(nested, 0).c(1), TestEnum.B); 593*890232f2SAndroid Build Coastguard Worker TestEq(table.a().d(nested, 1).c(0), TestEnum.C); 594*890232f2SAndroid Build Coastguard Worker TestEq(table.a().d(nested, 1).c(1), TestEnum.B); 595*890232f2SAndroid Build Coastguard Worker TestEq(table.a().d(nested, 0).d(0), (long)-1); 596*890232f2SAndroid Build Coastguard Worker TestEq(table.a().d(nested, 0).d(1), (long)1); 597*890232f2SAndroid Build Coastguard Worker TestEq(table.a().d(nested, 1).d(0), (long)-2); 598*890232f2SAndroid Build Coastguard Worker TestEq(table.a().d(nested, 1).d(1), (long)2); 599*890232f2SAndroid Build Coastguard Worker TestEq(table.a().e(), 2); 600*890232f2SAndroid Build Coastguard Worker TestEq(table.a().f(0), (long)-1); 601*890232f2SAndroid Build Coastguard Worker TestEq(table.a().f(1), (long)1); 602*890232f2SAndroid Build Coastguard Worker } 603*890232f2SAndroid Build Coastguard Worker testFlexBuffersTest()604*890232f2SAndroid Build Coastguard Worker public static void testFlexBuffersTest() { 605*890232f2SAndroid Build Coastguard Worker FlexBuffersBuilder builder = new FlexBuffersBuilder(ByteBuffer.allocate(512), 606*890232f2SAndroid Build Coastguard Worker FlexBuffersBuilder.BUILDER_FLAG_SHARE_KEYS_AND_STRINGS); 607*890232f2SAndroid Build Coastguard Worker testFlexBuffersTest(builder); 608*890232f2SAndroid Build Coastguard Worker int bufferLimit1 = ((ArrayReadWriteBuf) builder.getBuffer()).limit(); 609*890232f2SAndroid Build Coastguard Worker 610*890232f2SAndroid Build Coastguard Worker // Repeat after clearing the builder to ensure the builder is reusable 611*890232f2SAndroid Build Coastguard Worker builder.clear(); 612*890232f2SAndroid Build Coastguard Worker testFlexBuffersTest(builder); 613*890232f2SAndroid Build Coastguard Worker int bufferLimit2 = ((ArrayReadWriteBuf) builder.getBuffer()).limit(); 614*890232f2SAndroid Build Coastguard Worker TestEq(bufferLimit1, bufferLimit2); 615*890232f2SAndroid Build Coastguard Worker } 616*890232f2SAndroid Build Coastguard Worker testFlexBuffersTest(FlexBuffersBuilder builder)617*890232f2SAndroid Build Coastguard Worker public static void testFlexBuffersTest(FlexBuffersBuilder builder) { 618*890232f2SAndroid Build Coastguard Worker // Write the equivalent of: 619*890232f2SAndroid Build Coastguard Worker // { vec: [ -100, "Fred", 4.0, false ], bar: [ 1, 2, 3 ], bar3: [ 1, 2, 3 ], 620*890232f2SAndroid Build Coastguard Worker // foo: 100, bool: true, mymap: { foo: "Fred" } } 621*890232f2SAndroid Build Coastguard Worker // It's possible to do this without std::function support as well. 622*890232f2SAndroid Build Coastguard Worker int map1 = builder.startMap(); 623*890232f2SAndroid Build Coastguard Worker 624*890232f2SAndroid Build Coastguard Worker int vec1 = builder.startVector(); 625*890232f2SAndroid Build Coastguard Worker builder.putInt(-100); 626*890232f2SAndroid Build Coastguard Worker builder.putString("Fred"); 627*890232f2SAndroid Build Coastguard Worker builder.putBlob(new byte[]{(byte) 77}); 628*890232f2SAndroid Build Coastguard Worker builder.putBoolean(false); 629*890232f2SAndroid Build Coastguard Worker builder.putInt(Long.MAX_VALUE); 630*890232f2SAndroid Build Coastguard Worker 631*890232f2SAndroid Build Coastguard Worker int map2 = builder.startMap(); 632*890232f2SAndroid Build Coastguard Worker builder.putInt("test", 200); 633*890232f2SAndroid Build Coastguard Worker builder.endMap(null, map2); 634*890232f2SAndroid Build Coastguard Worker 635*890232f2SAndroid Build Coastguard Worker builder.putFloat(150.9); 636*890232f2SAndroid Build Coastguard Worker builder.putFloat(150.9999998); 637*890232f2SAndroid Build Coastguard Worker builder.endVector("vec", vec1, false, false); 638*890232f2SAndroid Build Coastguard Worker 639*890232f2SAndroid Build Coastguard Worker vec1 = builder.startVector(); 640*890232f2SAndroid Build Coastguard Worker builder.putInt(1); 641*890232f2SAndroid Build Coastguard Worker builder.putInt(2); 642*890232f2SAndroid Build Coastguard Worker builder.putInt(3); 643*890232f2SAndroid Build Coastguard Worker builder.endVector("bar", vec1, true, false); 644*890232f2SAndroid Build Coastguard Worker 645*890232f2SAndroid Build Coastguard Worker vec1 = builder.startVector(); 646*890232f2SAndroid Build Coastguard Worker builder.putBoolean(true); 647*890232f2SAndroid Build Coastguard Worker builder.putBoolean(false); 648*890232f2SAndroid Build Coastguard Worker builder.putBoolean(true); 649*890232f2SAndroid Build Coastguard Worker builder.putBoolean(false); 650*890232f2SAndroid Build Coastguard Worker builder.endVector("bools", vec1, true, false); 651*890232f2SAndroid Build Coastguard Worker 652*890232f2SAndroid Build Coastguard Worker builder.putBoolean("bool", true); 653*890232f2SAndroid Build Coastguard Worker builder.putFloat("foo", 100); 654*890232f2SAndroid Build Coastguard Worker 655*890232f2SAndroid Build Coastguard Worker map2 = builder.startMap(); 656*890232f2SAndroid Build Coastguard Worker builder.putString("bar", "Fred"); // Testing key and string reuse. 657*890232f2SAndroid Build Coastguard Worker builder.putInt("int", -120); 658*890232f2SAndroid Build Coastguard Worker builder.putFloat("float", -123.0f); 659*890232f2SAndroid Build Coastguard Worker builder.putBlob("blob", new byte[]{ 65, 67 }); 660*890232f2SAndroid Build Coastguard Worker builder.endMap("mymap", map2); 661*890232f2SAndroid Build Coastguard Worker 662*890232f2SAndroid Build Coastguard Worker builder.endMap(null, map1); 663*890232f2SAndroid Build Coastguard Worker builder.finish(); 664*890232f2SAndroid Build Coastguard Worker 665*890232f2SAndroid Build Coastguard Worker FlexBuffers.Map m = FlexBuffers.getRoot(builder.getBuffer()).asMap(); 666*890232f2SAndroid Build Coastguard Worker 667*890232f2SAndroid Build Coastguard Worker TestEq(m.size(), 6); 668*890232f2SAndroid Build Coastguard Worker 669*890232f2SAndroid Build Coastguard Worker // test empty (an null) 670*890232f2SAndroid Build Coastguard Worker TestEq(m.get("no_key").asString(), ""); // empty if fail 671*890232f2SAndroid Build Coastguard Worker TestEq(m.get("no_key").asMap(), FlexBuffers.Map.empty()); // empty if fail 672*890232f2SAndroid Build Coastguard Worker TestEq(m.get("no_key").asKey(), FlexBuffers.Key.empty()); // empty if fail 673*890232f2SAndroid Build Coastguard Worker TestEq(m.get("no_key").asVector(), FlexBuffers.Vector.empty()); // empty if fail 674*890232f2SAndroid Build Coastguard Worker TestEq(m.get("no_key").asBlob(), FlexBuffers.Blob.empty()); // empty if fail 675*890232f2SAndroid Build Coastguard Worker assert(m.get("no_key").asVector().isEmpty()); // empty if fail 676*890232f2SAndroid Build Coastguard Worker 677*890232f2SAndroid Build Coastguard Worker // testing "vec" field 678*890232f2SAndroid Build Coastguard Worker FlexBuffers.Vector vec = m.get("vec").asVector(); 679*890232f2SAndroid Build Coastguard Worker TestEq(vec.size(), 8); 680*890232f2SAndroid Build Coastguard Worker TestEq(vec.get(0).asLong(), (long) -100); 681*890232f2SAndroid Build Coastguard Worker TestEq(vec.get(1).asString(), "Fred"); 682*890232f2SAndroid Build Coastguard Worker TestEq(vec.get(2).isBlob(), true); 683*890232f2SAndroid Build Coastguard Worker TestEq(vec.get(2).asBlob().size(), 1); 684*890232f2SAndroid Build Coastguard Worker TestEq(vec.get(2).asBlob().data().get(0), (byte) 77); 685*890232f2SAndroid Build Coastguard Worker TestEq(vec.get(3).isBoolean(), true); // Check if type is a bool 686*890232f2SAndroid Build Coastguard Worker TestEq(vec.get(3).asBoolean(), false); // Check if value is false 687*890232f2SAndroid Build Coastguard Worker TestEq(vec.get(4).asLong(), Long.MAX_VALUE); 688*890232f2SAndroid Build Coastguard Worker TestEq(vec.get(5).isMap(), true); 689*890232f2SAndroid Build Coastguard Worker TestEq(vec.get(5).asMap().get("test").asInt(), 200); 690*890232f2SAndroid Build Coastguard Worker TestEq(Float.compare((float)vec.get(6).asFloat(), 150.9f), 0); 691*890232f2SAndroid Build Coastguard Worker TestEq(Double.compare(vec.get(7).asFloat(), 150.9999998), 0); 692*890232f2SAndroid Build Coastguard Worker TestEq((long)0, (long)vec.get(1).asLong()); //conversion fail returns 0 as C++ 693*890232f2SAndroid Build Coastguard Worker 694*890232f2SAndroid Build Coastguard Worker // bar vector 695*890232f2SAndroid Build Coastguard Worker FlexBuffers.Vector tvec = m.get("bar").asVector(); 696*890232f2SAndroid Build Coastguard Worker TestEq(tvec.size(), 3); 697*890232f2SAndroid Build Coastguard Worker TestEq(tvec.get(0).asInt(), 1); 698*890232f2SAndroid Build Coastguard Worker TestEq(tvec.get(1).asInt(), 2); 699*890232f2SAndroid Build Coastguard Worker TestEq(tvec.get(2).asInt(), 3); 700*890232f2SAndroid Build Coastguard Worker TestEq(((FlexBuffers.TypedVector) tvec).getElemType(), FlexBuffers.FBT_INT); 701*890232f2SAndroid Build Coastguard Worker 702*890232f2SAndroid Build Coastguard Worker // bools vector 703*890232f2SAndroid Build Coastguard Worker FlexBuffers.Vector bvec = m.get("bools").asVector(); 704*890232f2SAndroid Build Coastguard Worker TestEq(bvec.size(), 4); 705*890232f2SAndroid Build Coastguard Worker TestEq(bvec.get(0).asBoolean(), true); 706*890232f2SAndroid Build Coastguard Worker TestEq(bvec.get(1).asBoolean(), false); 707*890232f2SAndroid Build Coastguard Worker TestEq(bvec.get(2).asBoolean(), true); 708*890232f2SAndroid Build Coastguard Worker TestEq(bvec.get(3).asBoolean(), false); 709*890232f2SAndroid Build Coastguard Worker TestEq(((FlexBuffers.TypedVector) bvec).getElemType(), FlexBuffers.FBT_BOOL); 710*890232f2SAndroid Build Coastguard Worker 711*890232f2SAndroid Build Coastguard Worker 712*890232f2SAndroid Build Coastguard Worker TestEq((float)m.get("foo").asFloat(), (float) 100); 713*890232f2SAndroid Build Coastguard Worker TestEq(m.get("unknown").isNull(), true); 714*890232f2SAndroid Build Coastguard Worker 715*890232f2SAndroid Build Coastguard Worker // mymap vector 716*890232f2SAndroid Build Coastguard Worker FlexBuffers.Map mymap = m.get("mymap").asMap(); 717*890232f2SAndroid Build Coastguard Worker TestEq(mymap.keys().get(0), m.keys().get(0)); // These should be equal by pointer equality, since key and value are shared. 718*890232f2SAndroid Build Coastguard Worker TestEq(mymap.keys().get(0).toString(), "bar"); 719*890232f2SAndroid Build Coastguard Worker TestEq(mymap.values().get(0).asString(), vec.get(1).asString()); 720*890232f2SAndroid Build Coastguard Worker TestEq(mymap.get("int").asInt(), -120); 721*890232f2SAndroid Build Coastguard Worker TestEq((float)mymap.get("float").asFloat(), -123.0f); 722*890232f2SAndroid Build Coastguard Worker TestEq(Arrays.equals(mymap.get("blob").asBlob().getBytes(), new byte[]{ 65, 67 }), true); 723*890232f2SAndroid Build Coastguard Worker TestEq(mymap.get("blob").asBlob().toString(), "AC"); 724*890232f2SAndroid Build Coastguard Worker TestEq(mymap.get("blob").toString(), "\"AC\""); 725*890232f2SAndroid Build Coastguard Worker } 726*890232f2SAndroid Build Coastguard Worker testFlexBufferVectorStrings()727*890232f2SAndroid Build Coastguard Worker public static void testFlexBufferVectorStrings() { 728*890232f2SAndroid Build Coastguard Worker FlexBuffersBuilder builder = new FlexBuffersBuilder(ByteBuffer.allocate(10000000)); 729*890232f2SAndroid Build Coastguard Worker 730*890232f2SAndroid Build Coastguard Worker int size = 3000; 731*890232f2SAndroid Build Coastguard Worker StringBuilder sb = new StringBuilder(); 732*890232f2SAndroid Build Coastguard Worker for (int i=0; i< size; i++) { 733*890232f2SAndroid Build Coastguard Worker sb.append("a"); 734*890232f2SAndroid Build Coastguard Worker } 735*890232f2SAndroid Build Coastguard Worker 736*890232f2SAndroid Build Coastguard Worker String text = sb.toString(); 737*890232f2SAndroid Build Coastguard Worker TestEq(text.length(), size); 738*890232f2SAndroid Build Coastguard Worker 739*890232f2SAndroid Build Coastguard Worker int pos = builder.startVector(); 740*890232f2SAndroid Build Coastguard Worker 741*890232f2SAndroid Build Coastguard Worker for (int i=0; i<size; i++) { 742*890232f2SAndroid Build Coastguard Worker builder.putString(text); 743*890232f2SAndroid Build Coastguard Worker } 744*890232f2SAndroid Build Coastguard Worker 745*890232f2SAndroid Build Coastguard Worker try { 746*890232f2SAndroid Build Coastguard Worker builder.endVector(null, pos, true, false); 747*890232f2SAndroid Build Coastguard Worker // this should raise an exception as 748*890232f2SAndroid Build Coastguard Worker // typed vector of string was deprecated 749*890232f2SAndroid Build Coastguard Worker assert false; 750*890232f2SAndroid Build Coastguard Worker } catch(FlexBufferException fb) { 751*890232f2SAndroid Build Coastguard Worker // no op 752*890232f2SAndroid Build Coastguard Worker } 753*890232f2SAndroid Build Coastguard Worker // we finish the vector again as non-typed 754*890232f2SAndroid Build Coastguard Worker builder.endVector(null, pos, false, false); 755*890232f2SAndroid Build Coastguard Worker 756*890232f2SAndroid Build Coastguard Worker ByteBuffer b = builder.finish(); 757*890232f2SAndroid Build Coastguard Worker Vector v = FlexBuffers.getRoot(b).asVector(); 758*890232f2SAndroid Build Coastguard Worker 759*890232f2SAndroid Build Coastguard Worker TestEq(v.size(), size); 760*890232f2SAndroid Build Coastguard Worker for (int i=0; i<size; i++) { 761*890232f2SAndroid Build Coastguard Worker TestEq(v.get(i).asString().length(), size); 762*890232f2SAndroid Build Coastguard Worker TestEq(v.get(i).asString(), text); 763*890232f2SAndroid Build Coastguard Worker } 764*890232f2SAndroid Build Coastguard Worker } 765*890232f2SAndroid Build Coastguard Worker testDeprecatedTypedVectorString()766*890232f2SAndroid Build Coastguard Worker public static void testDeprecatedTypedVectorString() { 767*890232f2SAndroid Build Coastguard Worker // tests whether we are able to support reading deprecated typed vector string 768*890232f2SAndroid Build Coastguard Worker // data is equivalent to [ "abc", "abc", "abc", "abc"] 769*890232f2SAndroid Build Coastguard Worker byte[] data = new byte[] {0x03, 0x61, 0x62, 0x63, 0x00, 0x03, 0x61, 0x62, 0x63, 0x00, 770*890232f2SAndroid Build Coastguard Worker 0x03, 0x61, 0x62, 0x63, 0x00, 0x03, 0x61, 0x62, 0x63, 0x00, 0x04, 0x14, 0x10, 771*890232f2SAndroid Build Coastguard Worker 0x0c, 0x08, 0x04, 0x3c, 0x01}; 772*890232f2SAndroid Build Coastguard Worker Reference ref = FlexBuffers.getRoot(ByteBuffer.wrap(data)); 773*890232f2SAndroid Build Coastguard Worker TestEq(ref.getType(), FlexBuffers.FBT_VECTOR_STRING_DEPRECATED); 774*890232f2SAndroid Build Coastguard Worker TestEq(ref.isTypedVector(), true); 775*890232f2SAndroid Build Coastguard Worker Vector vec = ref.asVector(); 776*890232f2SAndroid Build Coastguard Worker for (int i=0; i< vec.size(); i++) { 777*890232f2SAndroid Build Coastguard Worker TestEq("abc", vec.get(i).asString()); 778*890232f2SAndroid Build Coastguard Worker } 779*890232f2SAndroid Build Coastguard Worker } 780*890232f2SAndroid Build Coastguard Worker testSingleElementBoolean()781*890232f2SAndroid Build Coastguard Worker public static void testSingleElementBoolean() { 782*890232f2SAndroid Build Coastguard Worker FlexBuffersBuilder builder = new FlexBuffersBuilder(ByteBuffer.allocate(100)); 783*890232f2SAndroid Build Coastguard Worker builder.putBoolean(true); 784*890232f2SAndroid Build Coastguard Worker ByteBuffer b = builder.finish(); 785*890232f2SAndroid Build Coastguard Worker assert(FlexBuffers.getRoot(b).asBoolean()); 786*890232f2SAndroid Build Coastguard Worker } 787*890232f2SAndroid Build Coastguard Worker testSingleElementByte()788*890232f2SAndroid Build Coastguard Worker public static void testSingleElementByte() { 789*890232f2SAndroid Build Coastguard Worker FlexBuffersBuilder builder = new FlexBuffersBuilder(); 790*890232f2SAndroid Build Coastguard Worker builder.putInt(10); 791*890232f2SAndroid Build Coastguard Worker ByteBuffer b = builder.finish(); 792*890232f2SAndroid Build Coastguard Worker TestEq(10, FlexBuffers.getRoot(b).asInt()); 793*890232f2SAndroid Build Coastguard Worker } 794*890232f2SAndroid Build Coastguard Worker testSingleElementShort()795*890232f2SAndroid Build Coastguard Worker public static void testSingleElementShort() { 796*890232f2SAndroid Build Coastguard Worker FlexBuffersBuilder builder = new FlexBuffersBuilder(); 797*890232f2SAndroid Build Coastguard Worker builder.putInt(Short.MAX_VALUE); 798*890232f2SAndroid Build Coastguard Worker ByteBuffer b = builder.finish(); 799*890232f2SAndroid Build Coastguard Worker TestEq(Short.MAX_VALUE, (short)FlexBuffers.getRoot(b).asInt()); 800*890232f2SAndroid Build Coastguard Worker } 801*890232f2SAndroid Build Coastguard Worker testSingleElementInt()802*890232f2SAndroid Build Coastguard Worker public static void testSingleElementInt() { 803*890232f2SAndroid Build Coastguard Worker FlexBuffersBuilder builder = new FlexBuffersBuilder(); 804*890232f2SAndroid Build Coastguard Worker builder.putInt(Integer.MIN_VALUE); 805*890232f2SAndroid Build Coastguard Worker ByteBuffer b = builder.finish(); 806*890232f2SAndroid Build Coastguard Worker TestEq(Integer.MIN_VALUE, FlexBuffers.getRoot(b).asInt()); 807*890232f2SAndroid Build Coastguard Worker } 808*890232f2SAndroid Build Coastguard Worker testSingleElementLong()809*890232f2SAndroid Build Coastguard Worker public static void testSingleElementLong() { 810*890232f2SAndroid Build Coastguard Worker FlexBuffersBuilder builder = new FlexBuffersBuilder(); 811*890232f2SAndroid Build Coastguard Worker builder.putInt(Long.MAX_VALUE); 812*890232f2SAndroid Build Coastguard Worker ByteBuffer b = builder.finish(); 813*890232f2SAndroid Build Coastguard Worker TestEq(Long.MAX_VALUE, FlexBuffers.getRoot(b).asLong()); 814*890232f2SAndroid Build Coastguard Worker } 815*890232f2SAndroid Build Coastguard Worker testSingleElementFloat()816*890232f2SAndroid Build Coastguard Worker public static void testSingleElementFloat() { 817*890232f2SAndroid Build Coastguard Worker FlexBuffersBuilder builder = new FlexBuffersBuilder(); 818*890232f2SAndroid Build Coastguard Worker builder.putFloat(Float.MAX_VALUE); 819*890232f2SAndroid Build Coastguard Worker ByteBuffer b = builder.finish(); 820*890232f2SAndroid Build Coastguard Worker TestEq(Float.compare(Float.MAX_VALUE, (float) FlexBuffers.getRoot(b).asFloat()), 0); 821*890232f2SAndroid Build Coastguard Worker } 822*890232f2SAndroid Build Coastguard Worker testSingleElementDouble()823*890232f2SAndroid Build Coastguard Worker public static void testSingleElementDouble() { 824*890232f2SAndroid Build Coastguard Worker FlexBuffersBuilder builder = new FlexBuffersBuilder(); 825*890232f2SAndroid Build Coastguard Worker builder.putFloat(Double.MAX_VALUE); 826*890232f2SAndroid Build Coastguard Worker ByteBuffer b = builder.finish(); 827*890232f2SAndroid Build Coastguard Worker TestEq(Double.compare(Double.MAX_VALUE, FlexBuffers.getRoot(b).asFloat()), 0); 828*890232f2SAndroid Build Coastguard Worker } 829*890232f2SAndroid Build Coastguard Worker testSingleElementBigString()830*890232f2SAndroid Build Coastguard Worker public static void testSingleElementBigString() { 831*890232f2SAndroid Build Coastguard Worker FlexBuffersBuilder builder = new FlexBuffersBuilder(ByteBuffer.allocate(10000)); 832*890232f2SAndroid Build Coastguard Worker StringBuilder sb = new StringBuilder(); 833*890232f2SAndroid Build Coastguard Worker 834*890232f2SAndroid Build Coastguard Worker for (int i=0; i< 3000; i++) { 835*890232f2SAndroid Build Coastguard Worker sb.append("a"); 836*890232f2SAndroid Build Coastguard Worker } 837*890232f2SAndroid Build Coastguard Worker 838*890232f2SAndroid Build Coastguard Worker builder.putString(sb.toString()); 839*890232f2SAndroid Build Coastguard Worker ByteBuffer b = builder.finish(); 840*890232f2SAndroid Build Coastguard Worker 841*890232f2SAndroid Build Coastguard Worker FlexBuffers.Reference r = FlexBuffers.getRoot(b); 842*890232f2SAndroid Build Coastguard Worker 843*890232f2SAndroid Build Coastguard Worker TestEq(FlexBuffers.FBT_STRING, r.getType()); 844*890232f2SAndroid Build Coastguard Worker TestEq(sb.toString(), r.asString()); 845*890232f2SAndroid Build Coastguard Worker } 846*890232f2SAndroid Build Coastguard Worker testSingleElementSmallString()847*890232f2SAndroid Build Coastguard Worker public static void testSingleElementSmallString() { 848*890232f2SAndroid Build Coastguard Worker FlexBuffersBuilder builder = new FlexBuffersBuilder(ByteBuffer.allocate(10000)); 849*890232f2SAndroid Build Coastguard Worker 850*890232f2SAndroid Build Coastguard Worker builder.putString("aa"); 851*890232f2SAndroid Build Coastguard Worker ByteBuffer b = builder.finish(); 852*890232f2SAndroid Build Coastguard Worker FlexBuffers.Reference r = FlexBuffers.getRoot(b); 853*890232f2SAndroid Build Coastguard Worker 854*890232f2SAndroid Build Coastguard Worker TestEq(FlexBuffers.FBT_STRING, r.getType()); 855*890232f2SAndroid Build Coastguard Worker TestEq("aa", r.asString()); 856*890232f2SAndroid Build Coastguard Worker } 857*890232f2SAndroid Build Coastguard Worker testSingleElementBlob()858*890232f2SAndroid Build Coastguard Worker public static void testSingleElementBlob() { 859*890232f2SAndroid Build Coastguard Worker FlexBuffersBuilder builder = new FlexBuffersBuilder(); 860*890232f2SAndroid Build Coastguard Worker builder.putBlob(new byte[]{5, 124, 118, -1}); 861*890232f2SAndroid Build Coastguard Worker ByteBuffer b = builder.finish(); 862*890232f2SAndroid Build Coastguard Worker FlexBuffers.Reference r = FlexBuffers.getRoot(b); 863*890232f2SAndroid Build Coastguard Worker byte[] result = r.asBlob().getBytes(); 864*890232f2SAndroid Build Coastguard Worker TestEq((byte)5, result[0]); 865*890232f2SAndroid Build Coastguard Worker TestEq((byte)124, result[1]); 866*890232f2SAndroid Build Coastguard Worker TestEq((byte)118, result[2]); 867*890232f2SAndroid Build Coastguard Worker TestEq((byte)-1, result[3]); 868*890232f2SAndroid Build Coastguard Worker } 869*890232f2SAndroid Build Coastguard Worker testSingleElementLongBlob()870*890232f2SAndroid Build Coastguard Worker public static void testSingleElementLongBlob() { 871*890232f2SAndroid Build Coastguard Worker 872*890232f2SAndroid Build Coastguard Worker // verifies blobs of up to 2^16 in length 873*890232f2SAndroid Build Coastguard Worker for (int i = 2; i <= 1<<16; i = i<<1) { 874*890232f2SAndroid Build Coastguard Worker byte[] input = new byte[i-1]; 875*890232f2SAndroid Build Coastguard Worker for (int index = 0; index < input.length; index++) { 876*890232f2SAndroid Build Coastguard Worker input[index] = (byte)(index % 64); 877*890232f2SAndroid Build Coastguard Worker } 878*890232f2SAndroid Build Coastguard Worker 879*890232f2SAndroid Build Coastguard Worker FlexBuffersBuilder builder = new FlexBuffersBuilder(); 880*890232f2SAndroid Build Coastguard Worker builder.putBlob(input); 881*890232f2SAndroid Build Coastguard Worker ByteBuffer b = builder.finish(); 882*890232f2SAndroid Build Coastguard Worker FlexBuffers.Reference r = FlexBuffers.getRoot(b); 883*890232f2SAndroid Build Coastguard Worker byte[] result = r.asBlob().getBytes(); 884*890232f2SAndroid Build Coastguard Worker 885*890232f2SAndroid Build Coastguard Worker for (int index = 0; index < input.length; index++) { 886*890232f2SAndroid Build Coastguard Worker TestEq((byte)(index % 64), result[index]); 887*890232f2SAndroid Build Coastguard Worker } 888*890232f2SAndroid Build Coastguard Worker } 889*890232f2SAndroid Build Coastguard Worker } 890*890232f2SAndroid Build Coastguard Worker testSingleElementUByte()891*890232f2SAndroid Build Coastguard Worker public static void testSingleElementUByte() { 892*890232f2SAndroid Build Coastguard Worker FlexBuffersBuilder builder = new FlexBuffersBuilder(); 893*890232f2SAndroid Build Coastguard Worker builder.putUInt(0xFF); 894*890232f2SAndroid Build Coastguard Worker ByteBuffer b = builder.finish(); 895*890232f2SAndroid Build Coastguard Worker FlexBuffers.Reference r = FlexBuffers.getRoot(b); 896*890232f2SAndroid Build Coastguard Worker TestEq(255, (int)r.asUInt()); 897*890232f2SAndroid Build Coastguard Worker } 898*890232f2SAndroid Build Coastguard Worker testSingleElementUShort()899*890232f2SAndroid Build Coastguard Worker public static void testSingleElementUShort() { 900*890232f2SAndroid Build Coastguard Worker FlexBuffersBuilder builder = new FlexBuffersBuilder(); 901*890232f2SAndroid Build Coastguard Worker builder.putUInt(0xFFFF); 902*890232f2SAndroid Build Coastguard Worker ByteBuffer b = builder.finish(); 903*890232f2SAndroid Build Coastguard Worker FlexBuffers.Reference r = FlexBuffers.getRoot(b); 904*890232f2SAndroid Build Coastguard Worker TestEq(65535, (int)r.asUInt()); 905*890232f2SAndroid Build Coastguard Worker } 906*890232f2SAndroid Build Coastguard Worker testSingleElementUInt()907*890232f2SAndroid Build Coastguard Worker public static void testSingleElementUInt() { 908*890232f2SAndroid Build Coastguard Worker FlexBuffersBuilder builder = new FlexBuffersBuilder(); 909*890232f2SAndroid Build Coastguard Worker builder.putUInt(0xFFFF_FFFFL); 910*890232f2SAndroid Build Coastguard Worker ByteBuffer b = builder.finish(); 911*890232f2SAndroid Build Coastguard Worker FlexBuffers.Reference r = FlexBuffers.getRoot(b); 912*890232f2SAndroid Build Coastguard Worker TestEq(4294967295L, r.asUInt()); 913*890232f2SAndroid Build Coastguard Worker } 914*890232f2SAndroid Build Coastguard Worker testSingleFixedTypeVector()915*890232f2SAndroid Build Coastguard Worker public static void testSingleFixedTypeVector() { 916*890232f2SAndroid Build Coastguard Worker 917*890232f2SAndroid Build Coastguard Worker int[] ints = new int[]{5, 124, 118, -1}; 918*890232f2SAndroid Build Coastguard Worker float[] floats = new float[]{5.5f, 124.124f, 118.118f, -1.1f}; 919*890232f2SAndroid Build Coastguard Worker String[] strings = new String[]{"This", "is", "a", "typed", "array"}; 920*890232f2SAndroid Build Coastguard Worker boolean[] booleans = new boolean[]{false, true, true, false}; 921*890232f2SAndroid Build Coastguard Worker 922*890232f2SAndroid Build Coastguard Worker 923*890232f2SAndroid Build Coastguard Worker FlexBuffersBuilder builder = new FlexBuffersBuilder(ByteBuffer.allocate(512), 924*890232f2SAndroid Build Coastguard Worker FlexBuffersBuilder.BUILDER_FLAG_NONE); 925*890232f2SAndroid Build Coastguard Worker 926*890232f2SAndroid Build Coastguard Worker int mapPos = builder.startMap(); 927*890232f2SAndroid Build Coastguard Worker 928*890232f2SAndroid Build Coastguard Worker int vecPos = builder.startVector(); 929*890232f2SAndroid Build Coastguard Worker for (final int i : ints) { 930*890232f2SAndroid Build Coastguard Worker builder.putInt(i); 931*890232f2SAndroid Build Coastguard Worker } 932*890232f2SAndroid Build Coastguard Worker builder.endVector("ints", vecPos, true, false); 933*890232f2SAndroid Build Coastguard Worker 934*890232f2SAndroid Build Coastguard Worker vecPos = builder.startVector(); 935*890232f2SAndroid Build Coastguard Worker for (final float i : floats) { 936*890232f2SAndroid Build Coastguard Worker builder.putFloat(i); 937*890232f2SAndroid Build Coastguard Worker } 938*890232f2SAndroid Build Coastguard Worker builder.endVector("floats", vecPos, true, false); 939*890232f2SAndroid Build Coastguard Worker 940*890232f2SAndroid Build Coastguard Worker vecPos = builder.startVector(); 941*890232f2SAndroid Build Coastguard Worker for (final boolean i : booleans) { 942*890232f2SAndroid Build Coastguard Worker builder.putBoolean(i); 943*890232f2SAndroid Build Coastguard Worker } 944*890232f2SAndroid Build Coastguard Worker builder.endVector("booleans", vecPos, true, false); 945*890232f2SAndroid Build Coastguard Worker 946*890232f2SAndroid Build Coastguard Worker builder.endMap(null, mapPos); 947*890232f2SAndroid Build Coastguard Worker 948*890232f2SAndroid Build Coastguard Worker 949*890232f2SAndroid Build Coastguard Worker ByteBuffer b = builder.finish(); 950*890232f2SAndroid Build Coastguard Worker FlexBuffers.Reference r = FlexBuffers.getRoot(b); 951*890232f2SAndroid Build Coastguard Worker assert(r.asMap().get("ints").isTypedVector()); 952*890232f2SAndroid Build Coastguard Worker assert(r.asMap().get("floats").isTypedVector()); 953*890232f2SAndroid Build Coastguard Worker assert(r.asMap().get("booleans").isTypedVector()); 954*890232f2SAndroid Build Coastguard Worker } 955*890232f2SAndroid Build Coastguard Worker testSingleElementVector()956*890232f2SAndroid Build Coastguard Worker public static void testSingleElementVector() { 957*890232f2SAndroid Build Coastguard Worker FlexBuffersBuilder b = new FlexBuffersBuilder(); 958*890232f2SAndroid Build Coastguard Worker 959*890232f2SAndroid Build Coastguard Worker int vecPos = b.startVector(); 960*890232f2SAndroid Build Coastguard Worker b.putInt(99); 961*890232f2SAndroid Build Coastguard Worker b.putString("wow"); 962*890232f2SAndroid Build Coastguard Worker int vecpos2 = b.startVector(); 963*890232f2SAndroid Build Coastguard Worker b.putInt(99); 964*890232f2SAndroid Build Coastguard Worker b.putString("wow"); 965*890232f2SAndroid Build Coastguard Worker b.endVector(null, vecpos2, false, false); 966*890232f2SAndroid Build Coastguard Worker b.endVector(null, vecPos, false, false); 967*890232f2SAndroid Build Coastguard Worker b.finish(); 968*890232f2SAndroid Build Coastguard Worker 969*890232f2SAndroid Build Coastguard Worker FlexBuffers.Reference r = FlexBuffers.getRoot(b.getBuffer()); 970*890232f2SAndroid Build Coastguard Worker TestEq(FlexBuffers.FBT_VECTOR, r.getType()); 971*890232f2SAndroid Build Coastguard Worker FlexBuffers.Vector vec = FlexBuffers.getRoot(b.getBuffer()).asVector(); 972*890232f2SAndroid Build Coastguard Worker TestEq(3, vec.size()); 973*890232f2SAndroid Build Coastguard Worker TestEq(99, vec.get(0).asInt()); 974*890232f2SAndroid Build Coastguard Worker TestEq("wow", vec.get(1).asString()); 975*890232f2SAndroid Build Coastguard Worker TestEq("[ 99, \"wow\" ]", vec.get(2).toString()); 976*890232f2SAndroid Build Coastguard Worker TestEq("[ 99, \"wow\", [ 99, \"wow\" ] ]", FlexBuffers.getRoot(b.getBuffer()).toString()); 977*890232f2SAndroid Build Coastguard Worker } 978*890232f2SAndroid Build Coastguard Worker testSingleElementMap()979*890232f2SAndroid Build Coastguard Worker public static void testSingleElementMap() { 980*890232f2SAndroid Build Coastguard Worker FlexBuffersBuilder b = new FlexBuffersBuilder(); 981*890232f2SAndroid Build Coastguard Worker 982*890232f2SAndroid Build Coastguard Worker int mapPost = b.startMap(); 983*890232f2SAndroid Build Coastguard Worker b.putInt("myInt", 0x7fffffbbbfffffffL); 984*890232f2SAndroid Build Coastguard Worker b.putString("myString", "wow"); 985*890232f2SAndroid Build Coastguard Worker b.putString("myString2", "incredible"); 986*890232f2SAndroid Build Coastguard Worker int start = b.startVector(); 987*890232f2SAndroid Build Coastguard Worker b.putInt(99); 988*890232f2SAndroid Build Coastguard Worker b.putString("wow"); 989*890232f2SAndroid Build Coastguard Worker b.endVector("myVec", start, false, false); 990*890232f2SAndroid Build Coastguard Worker 991*890232f2SAndroid Build Coastguard Worker b.putFloat("double", 0x1.ffffbbbffffffP+1023); 992*890232f2SAndroid Build Coastguard Worker b.endMap(null, mapPost); 993*890232f2SAndroid Build Coastguard Worker b.finish(); 994*890232f2SAndroid Build Coastguard Worker 995*890232f2SAndroid Build Coastguard Worker FlexBuffers.Reference r = FlexBuffers.getRoot(b.getBuffer()); 996*890232f2SAndroid Build Coastguard Worker TestEq(FlexBuffers.FBT_MAP, r.getType()); 997*890232f2SAndroid Build Coastguard Worker FlexBuffers.Map map = FlexBuffers.getRoot(b.getBuffer()).asMap(); 998*890232f2SAndroid Build Coastguard Worker TestEq(5, map.size()); 999*890232f2SAndroid Build Coastguard Worker TestEq(0x7fffffbbbfffffffL, map.get("myInt").asLong()); 1000*890232f2SAndroid Build Coastguard Worker TestEq("wow", map.get("myString").asString()); 1001*890232f2SAndroid Build Coastguard Worker TestEq("incredible", map.get("myString2").asString()); 1002*890232f2SAndroid Build Coastguard Worker TestEq(99, map.get("myVec").asVector().get(0).asInt()); 1003*890232f2SAndroid Build Coastguard Worker TestEq("wow", map.get("myVec").asVector().get(1).asString()); 1004*890232f2SAndroid Build Coastguard Worker TestEq(Double.compare(0x1.ffffbbbffffffP+1023, map.get("double").asFloat()), 0); 1005*890232f2SAndroid Build Coastguard Worker TestEq("{ \"double\" : 1.7976894783391937E308, \"myInt\" : 9223371743723257855, \"myString\" : \"wow\", \"myString2\" : \"incredible\", \"myVec\" : [ 99, \"wow\" ] }", 1006*890232f2SAndroid Build Coastguard Worker FlexBuffers.getRoot(b.getBuffer()).toString()); 1007*890232f2SAndroid Build Coastguard Worker } 1008*890232f2SAndroid Build Coastguard Worker testFlexBuferEmpty()1009*890232f2SAndroid Build Coastguard Worker public static void testFlexBuferEmpty() { 1010*890232f2SAndroid Build Coastguard Worker FlexBuffers.Blob blob = FlexBuffers.Blob.empty(); 1011*890232f2SAndroid Build Coastguard Worker FlexBuffers.Map ary = FlexBuffers.Map.empty(); 1012*890232f2SAndroid Build Coastguard Worker FlexBuffers.Vector map = FlexBuffers.Vector.empty(); 1013*890232f2SAndroid Build Coastguard Worker FlexBuffers.TypedVector typedAry = FlexBuffers.TypedVector.empty(); 1014*890232f2SAndroid Build Coastguard Worker TestEq(blob.size(), 0); 1015*890232f2SAndroid Build Coastguard Worker TestEq(map.size(), 0); 1016*890232f2SAndroid Build Coastguard Worker TestEq(ary.size(), 0); 1017*890232f2SAndroid Build Coastguard Worker TestEq(typedAry.size(), 0); 1018*890232f2SAndroid Build Coastguard Worker } 1019*890232f2SAndroid Build Coastguard Worker testHashMapToMap()1020*890232f2SAndroid Build Coastguard Worker public static void testHashMapToMap() { 1021*890232f2SAndroid Build Coastguard Worker int entriesCount = 12; 1022*890232f2SAndroid Build Coastguard Worker 1023*890232f2SAndroid Build Coastguard Worker HashMap<String, String> source = new HashMap<>(); 1024*890232f2SAndroid Build Coastguard Worker for (int i = 0; i < entriesCount; i++) { 1025*890232f2SAndroid Build Coastguard Worker source.put("foo_param_" + i, "foo_value_" + i); 1026*890232f2SAndroid Build Coastguard Worker } 1027*890232f2SAndroid Build Coastguard Worker 1028*890232f2SAndroid Build Coastguard Worker FlexBuffersBuilder builder = new FlexBuffersBuilder(1000); 1029*890232f2SAndroid Build Coastguard Worker int mapStart = builder.startMap(); 1030*890232f2SAndroid Build Coastguard Worker for (Map.Entry<String, String> entry : source.entrySet()) { 1031*890232f2SAndroid Build Coastguard Worker builder.putString(entry.getKey(), entry.getValue()); 1032*890232f2SAndroid Build Coastguard Worker } 1033*890232f2SAndroid Build Coastguard Worker builder.endMap(null, mapStart); 1034*890232f2SAndroid Build Coastguard Worker ByteBuffer bb = builder.finish(); 1035*890232f2SAndroid Build Coastguard Worker bb.rewind(); 1036*890232f2SAndroid Build Coastguard Worker 1037*890232f2SAndroid Build Coastguard Worker FlexBuffers.Reference rootReference = FlexBuffers.getRoot(bb); 1038*890232f2SAndroid Build Coastguard Worker 1039*890232f2SAndroid Build Coastguard Worker TestEq(rootReference.isMap(), true); 1040*890232f2SAndroid Build Coastguard Worker 1041*890232f2SAndroid Build Coastguard Worker FlexBuffers.Map flexMap = rootReference.asMap(); 1042*890232f2SAndroid Build Coastguard Worker 1043*890232f2SAndroid Build Coastguard Worker FlexBuffers.KeyVector keys = flexMap.keys(); 1044*890232f2SAndroid Build Coastguard Worker FlexBuffers.Vector values = flexMap.values(); 1045*890232f2SAndroid Build Coastguard Worker 1046*890232f2SAndroid Build Coastguard Worker TestEq(entriesCount, keys.size()); 1047*890232f2SAndroid Build Coastguard Worker TestEq(entriesCount, values.size()); 1048*890232f2SAndroid Build Coastguard Worker 1049*890232f2SAndroid Build Coastguard Worker HashMap<String, String> result = new HashMap<>(); 1050*890232f2SAndroid Build Coastguard Worker for (int i = 0; i < keys.size(); i++) { 1051*890232f2SAndroid Build Coastguard Worker result.put(keys.get(i).toString(), values.get(i).asString()); 1052*890232f2SAndroid Build Coastguard Worker } 1053*890232f2SAndroid Build Coastguard Worker 1054*890232f2SAndroid Build Coastguard Worker TestEq(source, result); 1055*890232f2SAndroid Build Coastguard Worker } 1056*890232f2SAndroid Build Coastguard Worker testBuilderGrowth()1057*890232f2SAndroid Build Coastguard Worker public static void testBuilderGrowth() { 1058*890232f2SAndroid Build Coastguard Worker FlexBuffersBuilder builder = new FlexBuffersBuilder(); 1059*890232f2SAndroid Build Coastguard Worker String someString = "This is a small string"; 1060*890232f2SAndroid Build Coastguard Worker builder.putString(someString); 1061*890232f2SAndroid Build Coastguard Worker ByteBuffer b = builder.finish(); 1062*890232f2SAndroid Build Coastguard Worker TestEq(someString, FlexBuffers.getRoot(b).asString()); 1063*890232f2SAndroid Build Coastguard Worker 1064*890232f2SAndroid Build Coastguard Worker FlexBuffersBuilder failBuilder = new FlexBuffersBuilder(ByteBuffer.allocate(1)); 1065*890232f2SAndroid Build Coastguard Worker failBuilder.putString(someString); 1066*890232f2SAndroid Build Coastguard Worker } 1067*890232f2SAndroid Build Coastguard Worker testFlexBuffersUtf8Map()1068*890232f2SAndroid Build Coastguard Worker public static void testFlexBuffersUtf8Map() { 1069*890232f2SAndroid Build Coastguard Worker FlexBuffersBuilder builder = new FlexBuffersBuilder(ByteBuffer.allocate(512), 1070*890232f2SAndroid Build Coastguard Worker FlexBuffersBuilder.BUILDER_FLAG_SHARE_KEYS_AND_STRINGS); 1071*890232f2SAndroid Build Coastguard Worker 1072*890232f2SAndroid Build Coastguard Worker String key0 = " face1"; 1073*890232f2SAndroid Build Coastguard Worker String key1 = " face2"; 1074*890232f2SAndroid Build Coastguard Worker String key2 = " face3"; 1075*890232f2SAndroid Build Coastguard Worker String key3 = "trademark ®"; 1076*890232f2SAndroid Build Coastguard Worker String key4 = "€ euro"; 1077*890232f2SAndroid Build Coastguard Worker String utf8keys[] = { " face1", " face2", " face3", "trademark ®", "€ euro"}; 1078*890232f2SAndroid Build Coastguard Worker 1079*890232f2SAndroid Build Coastguard Worker int map = builder.startMap(); 1080*890232f2SAndroid Build Coastguard Worker 1081*890232f2SAndroid Build Coastguard Worker for (int i=0; i< utf8keys.length; i++) { 1082*890232f2SAndroid Build Coastguard Worker builder.putString(utf8keys[i], utf8keys[i]); // Testing key and string reuse. 1083*890232f2SAndroid Build Coastguard Worker } 1084*890232f2SAndroid Build Coastguard Worker builder.endMap(null, map); 1085*890232f2SAndroid Build Coastguard Worker builder.finish(); 1086*890232f2SAndroid Build Coastguard Worker 1087*890232f2SAndroid Build Coastguard Worker FlexBuffers.Map m = FlexBuffers.getRoot(builder.getBuffer()).asMap(); 1088*890232f2SAndroid Build Coastguard Worker 1089*890232f2SAndroid Build Coastguard Worker TestEq(m.size(), 5); 1090*890232f2SAndroid Build Coastguard Worker 1091*890232f2SAndroid Build Coastguard Worker KeyVector kv = m.keys(); 1092*890232f2SAndroid Build Coastguard Worker for (int i=0; i< utf8keys.length; i++) { 1093*890232f2SAndroid Build Coastguard Worker TestEq(kv.get(i).toString(), m.get(i).asString()); 1094*890232f2SAndroid Build Coastguard Worker } 1095*890232f2SAndroid Build Coastguard Worker 1096*890232f2SAndroid Build Coastguard Worker TestEq(m.get(key0).asString(), utf8keys[0]); 1097*890232f2SAndroid Build Coastguard Worker TestEq(m.get(key1).asString(), utf8keys[1]); 1098*890232f2SAndroid Build Coastguard Worker TestEq(m.get(key2).asString(), utf8keys[2]); 1099*890232f2SAndroid Build Coastguard Worker TestEq(m.get(key3).asString(), utf8keys[3]); 1100*890232f2SAndroid Build Coastguard Worker TestEq(m.get(key4).asString(), utf8keys[4]); 1101*890232f2SAndroid Build Coastguard Worker } 1102*890232f2SAndroid Build Coastguard Worker testFlexBuffersMapLookup()1103*890232f2SAndroid Build Coastguard Worker public static void testFlexBuffersMapLookup() { 1104*890232f2SAndroid Build Coastguard Worker FlexBuffersBuilder builder = new FlexBuffersBuilder(ByteBuffer.allocate(512), 1105*890232f2SAndroid Build Coastguard Worker FlexBuffersBuilder.BUILDER_FLAG_SHARE_KEYS_AND_STRINGS); 1106*890232f2SAndroid Build Coastguard Worker 1107*890232f2SAndroid Build Coastguard Worker String key0 = "123"; 1108*890232f2SAndroid Build Coastguard Worker String key1 = "1234"; 1109*890232f2SAndroid Build Coastguard Worker String key2 = "12345"; 1110*890232f2SAndroid Build Coastguard Worker String[] keys = new String[]{key0, key1, key2}; 1111*890232f2SAndroid Build Coastguard Worker 1112*890232f2SAndroid Build Coastguard Worker int map = builder.startMap(); 1113*890232f2SAndroid Build Coastguard Worker 1114*890232f2SAndroid Build Coastguard Worker for (int i=0; i< keys.length; i++) { 1115*890232f2SAndroid Build Coastguard Worker builder.putString(keys[i], keys[i]); // Testing key and string reuse. 1116*890232f2SAndroid Build Coastguard Worker } 1117*890232f2SAndroid Build Coastguard Worker builder.endMap(null, map); 1118*890232f2SAndroid Build Coastguard Worker builder.finish(); 1119*890232f2SAndroid Build Coastguard Worker 1120*890232f2SAndroid Build Coastguard Worker FlexBuffers.Map m = FlexBuffers.getRoot(builder.getBuffer()).asMap(); 1121*890232f2SAndroid Build Coastguard Worker for (int i=0; i< keys.length; i++) { 1122*890232f2SAndroid Build Coastguard Worker TestEq(m.get(keys[i]).asString(), keys[i]); 1123*890232f2SAndroid Build Coastguard Worker TestEq(m.get(keys[i].getBytes(StandardCharsets.UTF_8)).asString(), keys[i]); 1124*890232f2SAndroid Build Coastguard Worker } 1125*890232f2SAndroid Build Coastguard Worker } 1126*890232f2SAndroid Build Coastguard Worker TestFlexBuffers()1127*890232f2SAndroid Build Coastguard Worker public static void TestFlexBuffers() { 1128*890232f2SAndroid Build Coastguard Worker testSingleElementByte(); 1129*890232f2SAndroid Build Coastguard Worker testSingleElementShort(); 1130*890232f2SAndroid Build Coastguard Worker testSingleElementInt(); 1131*890232f2SAndroid Build Coastguard Worker testSingleElementLong(); 1132*890232f2SAndroid Build Coastguard Worker testSingleElementFloat(); 1133*890232f2SAndroid Build Coastguard Worker testSingleElementDouble(); 1134*890232f2SAndroid Build Coastguard Worker testSingleElementSmallString(); 1135*890232f2SAndroid Build Coastguard Worker testSingleElementBigString(); 1136*890232f2SAndroid Build Coastguard Worker testSingleElementBlob(); 1137*890232f2SAndroid Build Coastguard Worker testSingleElementLongBlob(); 1138*890232f2SAndroid Build Coastguard Worker testSingleElementVector(); 1139*890232f2SAndroid Build Coastguard Worker testSingleFixedTypeVector(); 1140*890232f2SAndroid Build Coastguard Worker testSingleElementUShort(); 1141*890232f2SAndroid Build Coastguard Worker testSingleElementUInt(); 1142*890232f2SAndroid Build Coastguard Worker testSingleElementUByte(); 1143*890232f2SAndroid Build Coastguard Worker testSingleElementMap(); 1144*890232f2SAndroid Build Coastguard Worker testFlexBuffersTest(); 1145*890232f2SAndroid Build Coastguard Worker testHashMapToMap(); 1146*890232f2SAndroid Build Coastguard Worker testFlexBuferEmpty(); 1147*890232f2SAndroid Build Coastguard Worker testFlexBufferVectorStrings(); 1148*890232f2SAndroid Build Coastguard Worker testDeprecatedTypedVectorString(); 1149*890232f2SAndroid Build Coastguard Worker testBuilderGrowth(); 1150*890232f2SAndroid Build Coastguard Worker testFlexBuffersUtf8Map(); 1151*890232f2SAndroid Build Coastguard Worker testFlexBuffersMapLookup(); 1152*890232f2SAndroid Build Coastguard Worker } 1153*890232f2SAndroid Build Coastguard Worker TestDictionaryLookup()1154*890232f2SAndroid Build Coastguard Worker static void TestDictionaryLookup() { 1155*890232f2SAndroid Build Coastguard Worker FlatBufferBuilder fbb = new FlatBufferBuilder(16); 1156*890232f2SAndroid Build Coastguard Worker int lfIndex = LongFloatEntry.createLongFloatEntry(fbb, 0, 99); 1157*890232f2SAndroid Build Coastguard Worker int vectorEntriesIdx = LongFloatMap.createEntriesVector(fbb, new int[] { lfIndex }); 1158*890232f2SAndroid Build Coastguard Worker int rootIdx = LongFloatMap.createLongFloatMap(fbb, vectorEntriesIdx); 1159*890232f2SAndroid Build Coastguard Worker 1160*890232f2SAndroid Build Coastguard Worker LongFloatMap.finishLongFloatMapBuffer(fbb, rootIdx); 1161*890232f2SAndroid Build Coastguard Worker LongFloatMap map = LongFloatMap.getRootAsLongFloatMap(fbb.dataBuffer()); 1162*890232f2SAndroid Build Coastguard Worker TestEq(map.entriesLength(), 1); 1163*890232f2SAndroid Build Coastguard Worker 1164*890232f2SAndroid Build Coastguard Worker LongFloatEntry e = map.entries(0); 1165*890232f2SAndroid Build Coastguard Worker TestEq(e.key(), 0L); 1166*890232f2SAndroid Build Coastguard Worker TestEq(e.value(), 99.0f); 1167*890232f2SAndroid Build Coastguard Worker 1168*890232f2SAndroid Build Coastguard Worker LongFloatEntry e2 = map.entriesByKey(0); 1169*890232f2SAndroid Build Coastguard Worker TestEq(e2.key(), 0L); 1170*890232f2SAndroid Build Coastguard Worker TestEq(e2.value(), 99.0f); 1171*890232f2SAndroid Build Coastguard Worker } 1172*890232f2SAndroid Build Coastguard Worker TestVectorOfBytes()1173*890232f2SAndroid Build Coastguard Worker static void TestVectorOfBytes() { 1174*890232f2SAndroid Build Coastguard Worker FlatBufferBuilder fbb = new FlatBufferBuilder(16); 1175*890232f2SAndroid Build Coastguard Worker int str = fbb.createString("ByteMonster"); 1176*890232f2SAndroid Build Coastguard Worker byte[] data = new byte[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; 1177*890232f2SAndroid Build Coastguard Worker int offset = Monster.createInventoryVector(fbb, data); 1178*890232f2SAndroid Build Coastguard Worker Monster.startMonster(fbb); 1179*890232f2SAndroid Build Coastguard Worker Monster.addName(fbb, str); 1180*890232f2SAndroid Build Coastguard Worker Monster.addInventory(fbb, offset); 1181*890232f2SAndroid Build Coastguard Worker int monster1 = Monster.endMonster(fbb); 1182*890232f2SAndroid Build Coastguard Worker Monster.finishMonsterBuffer(fbb, monster1); 1183*890232f2SAndroid Build Coastguard Worker Monster monsterObject = Monster.getRootAsMonster(fbb.dataBuffer()); 1184*890232f2SAndroid Build Coastguard Worker 1185*890232f2SAndroid Build Coastguard Worker TestEq(monsterObject.inventoryLength(), data.length); 1186*890232f2SAndroid Build Coastguard Worker TestEq(monsterObject.inventory(4), (int) data[4]); 1187*890232f2SAndroid Build Coastguard Worker TestEq(ByteBuffer.wrap(data), monsterObject.inventoryAsByteBuffer()); 1188*890232f2SAndroid Build Coastguard Worker 1189*890232f2SAndroid Build Coastguard Worker fbb.clear(); 1190*890232f2SAndroid Build Coastguard Worker ByteBuffer bb = ByteBuffer.wrap(data); 1191*890232f2SAndroid Build Coastguard Worker offset = fbb.createByteVector(bb); 1192*890232f2SAndroid Build Coastguard Worker str = fbb.createString("ByteMonster"); 1193*890232f2SAndroid Build Coastguard Worker Monster.startMonster(fbb); 1194*890232f2SAndroid Build Coastguard Worker Monster.addName(fbb, str); 1195*890232f2SAndroid Build Coastguard Worker Monster.addInventory(fbb, offset); 1196*890232f2SAndroid Build Coastguard Worker monster1 = Monster.endMonster(fbb); 1197*890232f2SAndroid Build Coastguard Worker Monster.finishMonsterBuffer(fbb, monster1); 1198*890232f2SAndroid Build Coastguard Worker Monster monsterObject2 = Monster.getRootAsMonster(fbb.dataBuffer()); 1199*890232f2SAndroid Build Coastguard Worker 1200*890232f2SAndroid Build Coastguard Worker TestEq(monsterObject2.inventoryLength(), data.length); 1201*890232f2SAndroid Build Coastguard Worker for (int i = 0; i < data.length; i++) { 1202*890232f2SAndroid Build Coastguard Worker TestEq(monsterObject2.inventory(i), (int) bb.get(i)); 1203*890232f2SAndroid Build Coastguard Worker } 1204*890232f2SAndroid Build Coastguard Worker 1205*890232f2SAndroid Build Coastguard Worker fbb.clear(); 1206*890232f2SAndroid Build Coastguard Worker offset = fbb.createByteVector(data, 3, 4); 1207*890232f2SAndroid Build Coastguard Worker str = fbb.createString("ByteMonster"); 1208*890232f2SAndroid Build Coastguard Worker Monster.startMonster(fbb); 1209*890232f2SAndroid Build Coastguard Worker Monster.addName(fbb, str); 1210*890232f2SAndroid Build Coastguard Worker Monster.addInventory(fbb, offset); 1211*890232f2SAndroid Build Coastguard Worker monster1 = Monster.endMonster(fbb); 1212*890232f2SAndroid Build Coastguard Worker Monster.finishMonsterBuffer(fbb, monster1); 1213*890232f2SAndroid Build Coastguard Worker Monster monsterObject3 = Monster.getRootAsMonster(fbb.dataBuffer()); 1214*890232f2SAndroid Build Coastguard Worker 1215*890232f2SAndroid Build Coastguard Worker TestEq(monsterObject3.inventoryLength(), 4); 1216*890232f2SAndroid Build Coastguard Worker TestEq(monsterObject3.inventory(0), (int) data[3]); 1217*890232f2SAndroid Build Coastguard Worker 1218*890232f2SAndroid Build Coastguard Worker fbb.clear(); 1219*890232f2SAndroid Build Coastguard Worker bb = ByteBuffer.wrap(data); 1220*890232f2SAndroid Build Coastguard Worker offset = Monster.createInventoryVector(fbb, bb); 1221*890232f2SAndroid Build Coastguard Worker str = fbb.createString("ByteMonster"); 1222*890232f2SAndroid Build Coastguard Worker Monster.startMonster(fbb); 1223*890232f2SAndroid Build Coastguard Worker Monster.addName(fbb, str); 1224*890232f2SAndroid Build Coastguard Worker Monster.addInventory(fbb, offset); 1225*890232f2SAndroid Build Coastguard Worker monster1 = Monster.endMonster(fbb); 1226*890232f2SAndroid Build Coastguard Worker Monster.finishMonsterBuffer(fbb, monster1); 1227*890232f2SAndroid Build Coastguard Worker Monster monsterObject4 = Monster.getRootAsMonster(fbb.dataBuffer()); 1228*890232f2SAndroid Build Coastguard Worker 1229*890232f2SAndroid Build Coastguard Worker TestEq(monsterObject4.inventoryLength(), data.length); 1230*890232f2SAndroid Build Coastguard Worker TestEq(monsterObject4.inventory(8), (int) 8); 1231*890232f2SAndroid Build Coastguard Worker 1232*890232f2SAndroid Build Coastguard Worker fbb.clear(); 1233*890232f2SAndroid Build Coastguard Worker byte[] largeData = new byte[1024]; 1234*890232f2SAndroid Build Coastguard Worker offset = fbb.createByteVector(largeData); 1235*890232f2SAndroid Build Coastguard Worker str = fbb.createString("ByteMonster"); 1236*890232f2SAndroid Build Coastguard Worker Monster.startMonster(fbb); 1237*890232f2SAndroid Build Coastguard Worker Monster.addName(fbb, str); 1238*890232f2SAndroid Build Coastguard Worker Monster.addInventory(fbb, offset); 1239*890232f2SAndroid Build Coastguard Worker monster1 = Monster.endMonster(fbb); 1240*890232f2SAndroid Build Coastguard Worker Monster.finishMonsterBuffer(fbb, monster1); 1241*890232f2SAndroid Build Coastguard Worker Monster monsterObject5 = Monster.getRootAsMonster(fbb.dataBuffer()); 1242*890232f2SAndroid Build Coastguard Worker 1243*890232f2SAndroid Build Coastguard Worker TestEq(monsterObject5.inventoryLength(), largeData.length); 1244*890232f2SAndroid Build Coastguard Worker TestEq(monsterObject5.inventory(25), (int) largeData[25]); 1245*890232f2SAndroid Build Coastguard Worker 1246*890232f2SAndroid Build Coastguard Worker fbb.clear(); 1247*890232f2SAndroid Build Coastguard Worker bb = ByteBuffer.wrap(largeData); 1248*890232f2SAndroid Build Coastguard Worker bb.position(512); 1249*890232f2SAndroid Build Coastguard Worker ByteBuffer bb2 = bb.slice(); 1250*890232f2SAndroid Build Coastguard Worker TestEq(bb2.arrayOffset(), 512); 1251*890232f2SAndroid Build Coastguard Worker offset = fbb.createByteVector(bb2); 1252*890232f2SAndroid Build Coastguard Worker str = fbb.createString("ByteMonster"); 1253*890232f2SAndroid Build Coastguard Worker Monster.startMonster(fbb); 1254*890232f2SAndroid Build Coastguard Worker Monster.addName(fbb, str); 1255*890232f2SAndroid Build Coastguard Worker Monster.addInventory(fbb, offset); 1256*890232f2SAndroid Build Coastguard Worker monster1 = Monster.endMonster(fbb); 1257*890232f2SAndroid Build Coastguard Worker Monster.finishMonsterBuffer(fbb, monster1); 1258*890232f2SAndroid Build Coastguard Worker Monster monsterObject6 = Monster.getRootAsMonster(fbb.dataBuffer()); 1259*890232f2SAndroid Build Coastguard Worker 1260*890232f2SAndroid Build Coastguard Worker TestEq(monsterObject6.inventoryLength(), 512); 1261*890232f2SAndroid Build Coastguard Worker TestEq(monsterObject6.inventory(0), (int) largeData[512]); 1262*890232f2SAndroid Build Coastguard Worker 1263*890232f2SAndroid Build Coastguard Worker fbb.clear(); 1264*890232f2SAndroid Build Coastguard Worker bb = ByteBuffer.wrap(largeData); 1265*890232f2SAndroid Build Coastguard Worker bb.limit(256); 1266*890232f2SAndroid Build Coastguard Worker offset = fbb.createByteVector(bb); 1267*890232f2SAndroid Build Coastguard Worker str = fbb.createString("ByteMonster"); 1268*890232f2SAndroid Build Coastguard Worker Monster.startMonster(fbb); 1269*890232f2SAndroid Build Coastguard Worker Monster.addName(fbb, str); 1270*890232f2SAndroid Build Coastguard Worker Monster.addInventory(fbb, offset); 1271*890232f2SAndroid Build Coastguard Worker monster1 = Monster.endMonster(fbb); 1272*890232f2SAndroid Build Coastguard Worker Monster.finishMonsterBuffer(fbb, monster1); 1273*890232f2SAndroid Build Coastguard Worker Monster monsterObject7 = Monster.getRootAsMonster(fbb.dataBuffer()); 1274*890232f2SAndroid Build Coastguard Worker 1275*890232f2SAndroid Build Coastguard Worker TestEq(monsterObject7.inventoryLength(), 256); 1276*890232f2SAndroid Build Coastguard Worker 1277*890232f2SAndroid Build Coastguard Worker fbb.clear(); 1278*890232f2SAndroid Build Coastguard Worker bb = ByteBuffer.allocateDirect(2048); 1279*890232f2SAndroid Build Coastguard Worker offset = fbb.createByteVector(bb); 1280*890232f2SAndroid Build Coastguard Worker str = fbb.createString("ByteMonster"); 1281*890232f2SAndroid Build Coastguard Worker Monster.startMonster(fbb); 1282*890232f2SAndroid Build Coastguard Worker Monster.addName(fbb, str); 1283*890232f2SAndroid Build Coastguard Worker Monster.addInventory(fbb, offset); 1284*890232f2SAndroid Build Coastguard Worker monster1 = Monster.endMonster(fbb); 1285*890232f2SAndroid Build Coastguard Worker Monster.finishMonsterBuffer(fbb, monster1); 1286*890232f2SAndroid Build Coastguard Worker Monster monsterObject8 = Monster.getRootAsMonster(fbb.dataBuffer()); 1287*890232f2SAndroid Build Coastguard Worker 1288*890232f2SAndroid Build Coastguard Worker TestEq(monsterObject8.inventoryLength(), 2048); 1289*890232f2SAndroid Build Coastguard Worker } 1290*890232f2SAndroid Build Coastguard Worker TestSharedStringPool()1291*890232f2SAndroid Build Coastguard Worker static void TestSharedStringPool() { 1292*890232f2SAndroid Build Coastguard Worker FlatBufferBuilder fb = new FlatBufferBuilder(1); 1293*890232f2SAndroid Build Coastguard Worker String testString = "My string"; 1294*890232f2SAndroid Build Coastguard Worker int offset = fb.createSharedString(testString); 1295*890232f2SAndroid Build Coastguard Worker for (int i=0; i< 10; i++) { 1296*890232f2SAndroid Build Coastguard Worker TestEq(offset, fb.createSharedString(testString)); 1297*890232f2SAndroid Build Coastguard Worker } 1298*890232f2SAndroid Build Coastguard Worker } 1299*890232f2SAndroid Build Coastguard Worker TestScalarOptional()1300*890232f2SAndroid Build Coastguard Worker static void TestScalarOptional() { 1301*890232f2SAndroid Build Coastguard Worker FlatBufferBuilder fbb = new FlatBufferBuilder(1); 1302*890232f2SAndroid Build Coastguard Worker ScalarStuff.startScalarStuff(fbb); 1303*890232f2SAndroid Build Coastguard Worker int pos = ScalarStuff.endScalarStuff(fbb); 1304*890232f2SAndroid Build Coastguard Worker fbb.finish(pos); 1305*890232f2SAndroid Build Coastguard Worker 1306*890232f2SAndroid Build Coastguard Worker ScalarStuff scalarStuff = ScalarStuff.getRootAsScalarStuff(fbb.dataBuffer()); 1307*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.justI8(), (byte)0); 1308*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.maybeI8(), (byte)0); 1309*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.defaultI8(), (byte)42); 1310*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.justU8(), 0); 1311*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.maybeU8(), 0); 1312*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.defaultU8(), 42); 1313*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.justI16(), (short)0); 1314*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.maybeI16(), (short)0); 1315*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.defaultI16(), (short)42); 1316*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.justU16(), 0); 1317*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.maybeU16(), 0); 1318*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.defaultU16(), 42); 1319*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.justI32(), 0); 1320*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.maybeI32(), 0); 1321*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.defaultI32(), 42); 1322*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.justU32(), 0L); 1323*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.maybeU32(), 0L); 1324*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.defaultU32(), 42L); 1325*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.justI64(), 0L); 1326*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.maybeI64(), 0L); 1327*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.defaultI64(), 42L); 1328*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.justU64(), 0L); 1329*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.maybeU64(), 0L); 1330*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.defaultU64(), 42L); 1331*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.justF32(), 0.0f); 1332*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.maybeF32(), 0f); 1333*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.defaultF32(), 42.0f); 1334*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.justF64(), 0.0); 1335*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.maybeF64(), 0.0); 1336*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.defaultF64(), 42.0); 1337*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.justBool(), false); 1338*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.maybeBool(), false); 1339*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.defaultBool(), true); 1340*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.justEnum(), OptionalByte.None); 1341*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.maybeEnum(), OptionalByte.None); 1342*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.defaultEnum(), OptionalByte.One); 1343*890232f2SAndroid Build Coastguard Worker 1344*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.hasMaybeI8(), false); 1345*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.hasMaybeI16(), false); 1346*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.hasMaybeI32(), false); 1347*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.hasMaybeI64(), false); 1348*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.hasMaybeU8(), false); 1349*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.hasMaybeU16(), false); 1350*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.hasMaybeU32(), false); 1351*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.hasMaybeU64(), false); 1352*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.hasMaybeF32(), false); 1353*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.hasMaybeF64(), false); 1354*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.hasMaybeBool(), false); 1355*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.hasMaybeEnum(), false); 1356*890232f2SAndroid Build Coastguard Worker 1357*890232f2SAndroid Build Coastguard Worker fbb.clear(); 1358*890232f2SAndroid Build Coastguard Worker 1359*890232f2SAndroid Build Coastguard Worker ScalarStuff.startScalarStuff(fbb); 1360*890232f2SAndroid Build Coastguard Worker ScalarStuff.addJustI8(fbb, (byte)5); 1361*890232f2SAndroid Build Coastguard Worker ScalarStuff.addMaybeI8(fbb, (byte)5); 1362*890232f2SAndroid Build Coastguard Worker ScalarStuff.addDefaultI8(fbb, (byte)5); 1363*890232f2SAndroid Build Coastguard Worker ScalarStuff.addJustU8(fbb, 6); 1364*890232f2SAndroid Build Coastguard Worker ScalarStuff.addMaybeU8(fbb, 6); 1365*890232f2SAndroid Build Coastguard Worker ScalarStuff.addDefaultU8(fbb, 6); 1366*890232f2SAndroid Build Coastguard Worker ScalarStuff.addJustI16(fbb, (short)7); 1367*890232f2SAndroid Build Coastguard Worker ScalarStuff.addMaybeI16(fbb, (short)7); 1368*890232f2SAndroid Build Coastguard Worker ScalarStuff.addDefaultI16(fbb, (short)7); 1369*890232f2SAndroid Build Coastguard Worker ScalarStuff.addJustU16(fbb, 8); 1370*890232f2SAndroid Build Coastguard Worker ScalarStuff.addMaybeU16(fbb, 8); 1371*890232f2SAndroid Build Coastguard Worker ScalarStuff.addDefaultU16(fbb, 8); 1372*890232f2SAndroid Build Coastguard Worker ScalarStuff.addJustI32(fbb, 9); 1373*890232f2SAndroid Build Coastguard Worker ScalarStuff.addMaybeI32(fbb, 9); 1374*890232f2SAndroid Build Coastguard Worker ScalarStuff.addDefaultI32(fbb, 9); 1375*890232f2SAndroid Build Coastguard Worker ScalarStuff.addJustU32(fbb, (long)10); 1376*890232f2SAndroid Build Coastguard Worker ScalarStuff.addMaybeU32(fbb, (long)10); 1377*890232f2SAndroid Build Coastguard Worker ScalarStuff.addDefaultU32(fbb, (long)10); 1378*890232f2SAndroid Build Coastguard Worker ScalarStuff.addJustI64(fbb, 11L); 1379*890232f2SAndroid Build Coastguard Worker ScalarStuff.addMaybeI64(fbb, 11L); 1380*890232f2SAndroid Build Coastguard Worker ScalarStuff.addDefaultI64(fbb, 11L); 1381*890232f2SAndroid Build Coastguard Worker ScalarStuff.addJustU64(fbb, 12L); 1382*890232f2SAndroid Build Coastguard Worker ScalarStuff.addMaybeU64(fbb, 12L); 1383*890232f2SAndroid Build Coastguard Worker ScalarStuff.addDefaultU64(fbb, 12L); 1384*890232f2SAndroid Build Coastguard Worker ScalarStuff.addJustF32(fbb, 13.0f); 1385*890232f2SAndroid Build Coastguard Worker ScalarStuff.addMaybeF32(fbb, 13.0f); 1386*890232f2SAndroid Build Coastguard Worker ScalarStuff.addDefaultF32(fbb, 13.0f); 1387*890232f2SAndroid Build Coastguard Worker ScalarStuff.addJustF64(fbb, 14.0); 1388*890232f2SAndroid Build Coastguard Worker ScalarStuff.addMaybeF64(fbb, 14.0); 1389*890232f2SAndroid Build Coastguard Worker ScalarStuff.addDefaultF64(fbb, 14.0); 1390*890232f2SAndroid Build Coastguard Worker ScalarStuff.addJustBool(fbb, true); 1391*890232f2SAndroid Build Coastguard Worker ScalarStuff.addMaybeBool(fbb, true); 1392*890232f2SAndroid Build Coastguard Worker ScalarStuff.addDefaultBool(fbb, true); 1393*890232f2SAndroid Build Coastguard Worker ScalarStuff.addJustEnum(fbb, OptionalByte.Two); 1394*890232f2SAndroid Build Coastguard Worker ScalarStuff.addMaybeEnum(fbb, OptionalByte.Two); 1395*890232f2SAndroid Build Coastguard Worker ScalarStuff.addDefaultEnum(fbb, OptionalByte.Two); 1396*890232f2SAndroid Build Coastguard Worker 1397*890232f2SAndroid Build Coastguard Worker pos = ScalarStuff.endScalarStuff(fbb); 1398*890232f2SAndroid Build Coastguard Worker 1399*890232f2SAndroid Build Coastguard Worker fbb.finish(pos); 1400*890232f2SAndroid Build Coastguard Worker 1401*890232f2SAndroid Build Coastguard Worker scalarStuff = ScalarStuff.getRootAsScalarStuff(fbb.dataBuffer()); 1402*890232f2SAndroid Build Coastguard Worker 1403*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.justI8(), (byte)5); 1404*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.maybeI8(), (byte)5); 1405*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.defaultI8(), (byte)5); 1406*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.justU8(), 6); 1407*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.maybeU8(), 6); 1408*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.defaultU8(), 6); 1409*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.justI16(), (short)7); 1410*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.maybeI16(), (short)7); 1411*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.defaultI16(), (short)7); 1412*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.justU16(), 8); 1413*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.maybeU16(), 8); 1414*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.defaultU16(), 8); 1415*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.justI32(), 9); 1416*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.maybeI32(), 9); 1417*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.defaultI32(), 9); 1418*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.justU32(), 10L); 1419*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.maybeU32(), 10L); 1420*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.defaultU32(), 10L); 1421*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.justI64(), 11L); 1422*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.maybeI64(), 11L); 1423*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.defaultI64(), 11L); 1424*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.justU64(), 12L); 1425*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.maybeU64(), 12L); 1426*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.defaultU64(), 12L); 1427*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.justF32(), 13.0f); 1428*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.maybeF32(), 13.0f); 1429*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.defaultF32(), 13.0f); 1430*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.justF64(), 14.0); 1431*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.maybeF64(), 14.0); 1432*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.defaultF64(), 14.0); 1433*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.justBool(), true); 1434*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.maybeBool(), true); 1435*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.defaultBool(), true); 1436*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.justEnum(), OptionalByte.Two); 1437*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.maybeEnum(), OptionalByte.Two); 1438*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.defaultEnum(), OptionalByte.Two); 1439*890232f2SAndroid Build Coastguard Worker 1440*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.hasMaybeI8(), true); 1441*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.hasMaybeI16(), true); 1442*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.hasMaybeI32(), true); 1443*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.hasMaybeI64(), true); 1444*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.hasMaybeU8(), true); 1445*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.hasMaybeU16(), true); 1446*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.hasMaybeU32(), true); 1447*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.hasMaybeU64(), true); 1448*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.hasMaybeF32(), true); 1449*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.hasMaybeF64(), true); 1450*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.hasMaybeBool(), true); 1451*890232f2SAndroid Build Coastguard Worker TestEq(scalarStuff.hasMaybeEnum(), true); 1452*890232f2SAndroid Build Coastguard Worker } 1453*890232f2SAndroid Build Coastguard Worker TestObject(MonsterT monster)1454*890232f2SAndroid Build Coastguard Worker static void TestObject(MonsterT monster) { 1455*890232f2SAndroid Build Coastguard Worker TestEq(monster.getHp(), (short) 80); 1456*890232f2SAndroid Build Coastguard Worker TestEq(monster.getMana(), (short) 150); // default 1457*890232f2SAndroid Build Coastguard Worker 1458*890232f2SAndroid Build Coastguard Worker TestEq(monster.getName(), "MyMonster"); 1459*890232f2SAndroid Build Coastguard Worker TestEq(monster.getColor(), Color.Blue); 1460*890232f2SAndroid Build Coastguard Worker // monster.friendly() // can't access, deprecated 1461*890232f2SAndroid Build Coastguard Worker 1462*890232f2SAndroid Build Coastguard Worker Vec3T pos = monster.getPos(); 1463*890232f2SAndroid Build Coastguard Worker TestEq(pos.getX(), 1.0f); 1464*890232f2SAndroid Build Coastguard Worker TestEq(pos.getY(), 2.0f); 1465*890232f2SAndroid Build Coastguard Worker TestEq(pos.getZ(), 3.0f); 1466*890232f2SAndroid Build Coastguard Worker TestEq(pos.getTest1(), 3.0); 1467*890232f2SAndroid Build Coastguard Worker // issue: int != byte 1468*890232f2SAndroid Build Coastguard Worker TestEq(pos.getTest2(), (int) Color.Green); 1469*890232f2SAndroid Build Coastguard Worker TestT t = pos.getTest3(); 1470*890232f2SAndroid Build Coastguard Worker TestEq(t.getA(), (short) 5); 1471*890232f2SAndroid Build Coastguard Worker TestEq(t.getB(), (byte) 6); 1472*890232f2SAndroid Build Coastguard Worker 1473*890232f2SAndroid Build Coastguard Worker TestEq(monster.getTest().getType(), (byte) Any.Monster); 1474*890232f2SAndroid Build Coastguard Worker MonsterT monster2 = (MonsterT) monster.getTest().getValue(); 1475*890232f2SAndroid Build Coastguard Worker TestEq(monster2 != null, true); 1476*890232f2SAndroid Build Coastguard Worker TestEq(monster2.getName(), "Fred"); 1477*890232f2SAndroid Build Coastguard Worker 1478*890232f2SAndroid Build Coastguard Worker int[] inv = monster.getInventory(); 1479*890232f2SAndroid Build Coastguard Worker TestEq(inv.length, 5); 1480*890232f2SAndroid Build Coastguard Worker int[] expInv = {0, 1, 2, 3, 4}; 1481*890232f2SAndroid Build Coastguard Worker for (int i = 0; i < inv.length; i++) 1482*890232f2SAndroid Build Coastguard Worker TestEq(expInv[i], inv[i]); 1483*890232f2SAndroid Build Coastguard Worker 1484*890232f2SAndroid Build Coastguard Worker TestT[] test4 = monster.getTest4(); 1485*890232f2SAndroid Build Coastguard Worker TestT test_0 = test4[0]; 1486*890232f2SAndroid Build Coastguard Worker TestT test_1 = test4[1]; 1487*890232f2SAndroid Build Coastguard Worker TestEq(test4.length, 2); 1488*890232f2SAndroid Build Coastguard Worker TestEq(test_0.getA(), (short) 10); 1489*890232f2SAndroid Build Coastguard Worker TestEq(test_0.getB(), (byte) 20); 1490*890232f2SAndroid Build Coastguard Worker TestEq(test_1.getA(), (short) 30); 1491*890232f2SAndroid Build Coastguard Worker TestEq(test_1.getB(), (byte) 40); 1492*890232f2SAndroid Build Coastguard Worker 1493*890232f2SAndroid Build Coastguard Worker String[] testarrayofstring = monster.getTestarrayofstring(); 1494*890232f2SAndroid Build Coastguard Worker TestEq(testarrayofstring.length, 2); 1495*890232f2SAndroid Build Coastguard Worker TestEq(testarrayofstring[0], "test1"); 1496*890232f2SAndroid Build Coastguard Worker TestEq(testarrayofstring[1], "test2"); 1497*890232f2SAndroid Build Coastguard Worker 1498*890232f2SAndroid Build Coastguard Worker MonsterT[] testarrayoftables = monster.getTestarrayoftables(); 1499*890232f2SAndroid Build Coastguard Worker TestEq(testarrayoftables.length, 0); 1500*890232f2SAndroid Build Coastguard Worker 1501*890232f2SAndroid Build Coastguard Worker MonsterT enemy = monster.getEnemy(); 1502*890232f2SAndroid Build Coastguard Worker TestEq(enemy != null, true); 1503*890232f2SAndroid Build Coastguard Worker TestEq(enemy.getName(), "Fred"); 1504*890232f2SAndroid Build Coastguard Worker 1505*890232f2SAndroid Build Coastguard Worker int[] testnestedflatbuffer = monster.getTestnestedflatbuffer(); 1506*890232f2SAndroid Build Coastguard Worker TestEq(testnestedflatbuffer.length, 0); 1507*890232f2SAndroid Build Coastguard Worker 1508*890232f2SAndroid Build Coastguard Worker TestEq(monster.getTestempty() == null, true); 1509*890232f2SAndroid Build Coastguard Worker 1510*890232f2SAndroid Build Coastguard Worker TestEq(monster.getTestbool(), true); 1511*890232f2SAndroid Build Coastguard Worker 1512*890232f2SAndroid Build Coastguard Worker boolean[] testarrayofbools = monster.getTestarrayofbools(); 1513*890232f2SAndroid Build Coastguard Worker TestEq(testarrayofbools.length, 3); 1514*890232f2SAndroid Build Coastguard Worker TestEq(testarrayofbools[0], true); 1515*890232f2SAndroid Build Coastguard Worker TestEq(testarrayofbools[1], false); 1516*890232f2SAndroid Build Coastguard Worker TestEq(testarrayofbools[2], true); 1517*890232f2SAndroid Build Coastguard Worker 1518*890232f2SAndroid Build Coastguard Worker TestEq(monster.getTestf(), 3.14159f); 1519*890232f2SAndroid Build Coastguard Worker TestEq(monster.getTestf2(), 3.0f); 1520*890232f2SAndroid Build Coastguard Worker TestEq(monster.getTestf3(), 0.0f); 1521*890232f2SAndroid Build Coastguard Worker TestEq(monster.getTestf3(), 0.0f); 1522*890232f2SAndroid Build Coastguard Worker 1523*890232f2SAndroid Build Coastguard Worker AbilityT[] testarrayofsortedstruct = monster.getTestarrayofsortedstruct(); 1524*890232f2SAndroid Build Coastguard Worker TestEq(testarrayofsortedstruct.length, 3); 1525*890232f2SAndroid Build Coastguard Worker TestEq(testarrayofsortedstruct[0].getId(), (long) 0); 1526*890232f2SAndroid Build Coastguard Worker TestEq(testarrayofsortedstruct[1].getId(), (long) 1); 1527*890232f2SAndroid Build Coastguard Worker TestEq(testarrayofsortedstruct[2].getId(), (long) 5); 1528*890232f2SAndroid Build Coastguard Worker TestEq(testarrayofsortedstruct[0].getDistance(), (long) 45); 1529*890232f2SAndroid Build Coastguard Worker TestEq(testarrayofsortedstruct[1].getDistance(), (long) 21); 1530*890232f2SAndroid Build Coastguard Worker TestEq(testarrayofsortedstruct[2].getDistance(), (long) 12); 1531*890232f2SAndroid Build Coastguard Worker 1532*890232f2SAndroid Build Coastguard Worker int[] flex = monster.getFlex(); 1533*890232f2SAndroid Build Coastguard Worker TestEq(flex.length, 0); 1534*890232f2SAndroid Build Coastguard Worker 1535*890232f2SAndroid Build Coastguard Worker long[] vectorOfLongs = monster.getVectorOfLongs(); 1536*890232f2SAndroid Build Coastguard Worker TestEq(vectorOfLongs.length, 5); 1537*890232f2SAndroid Build Coastguard Worker long l = 1; 1538*890232f2SAndroid Build Coastguard Worker for (int i = 0; i < vectorOfLongs.length; i++) { 1539*890232f2SAndroid Build Coastguard Worker TestEq(vectorOfLongs[i], l); 1540*890232f2SAndroid Build Coastguard Worker l *= 100; 1541*890232f2SAndroid Build Coastguard Worker } 1542*890232f2SAndroid Build Coastguard Worker 1543*890232f2SAndroid Build Coastguard Worker double[] vectorOfDoubles = monster.getVectorOfDoubles(); 1544*890232f2SAndroid Build Coastguard Worker TestEq(vectorOfDoubles.length, 3); 1545*890232f2SAndroid Build Coastguard Worker TestEq(vectorOfDoubles[0], -1.7976931348623157E308); 1546*890232f2SAndroid Build Coastguard Worker TestEq(vectorOfDoubles[1], 0.0); 1547*890232f2SAndroid Build Coastguard Worker TestEq(vectorOfDoubles[2], 1.7976931348623157E308); 1548*890232f2SAndroid Build Coastguard Worker 1549*890232f2SAndroid Build Coastguard Worker TestEq(monster.getParentNamespaceTest() == null, true); 1550*890232f2SAndroid Build Coastguard Worker ReferrableT[] vectorOfReferrables = monster.getVectorOfReferrables(); 1551*890232f2SAndroid Build Coastguard Worker TestEq(vectorOfReferrables.length, 0); 1552*890232f2SAndroid Build Coastguard Worker 1553*890232f2SAndroid Build Coastguard Worker TestEq(monster.getSignedEnum(), (byte) -1); 1554*890232f2SAndroid Build Coastguard Worker } 1555*890232f2SAndroid Build Coastguard Worker TestPackUnpack(ByteBuffer bb)1556*890232f2SAndroid Build Coastguard Worker static void TestPackUnpack(ByteBuffer bb) { 1557*890232f2SAndroid Build Coastguard Worker Monster m = Monster.getRootAsMonster(bb); 1558*890232f2SAndroid Build Coastguard Worker MonsterT mObject = m.unpack(); 1559*890232f2SAndroid Build Coastguard Worker TestObject(mObject); 1560*890232f2SAndroid Build Coastguard Worker FlatBufferBuilder fbb = new FlatBufferBuilder(); 1561*890232f2SAndroid Build Coastguard Worker int monster = Monster.pack(fbb, mObject); 1562*890232f2SAndroid Build Coastguard Worker Monster.finishMonsterBuffer(fbb, monster); 1563*890232f2SAndroid Build Coastguard Worker TestBuffer(fbb.dataBuffer()); 1564*890232f2SAndroid Build Coastguard Worker 1565*890232f2SAndroid Build Coastguard Worker byte[] bytes = mObject.serializeToBinary(); 1566*890232f2SAndroid Build Coastguard Worker MonsterT newMonsterT = MonsterT.deserializeFromBinary(bytes); 1567*890232f2SAndroid Build Coastguard Worker TestObject(newMonsterT); 1568*890232f2SAndroid Build Coastguard Worker } 1569*890232f2SAndroid Build Coastguard Worker TestEq(T a, T b)1570*890232f2SAndroid Build Coastguard Worker static <T> void TestEq(T a, T b) { 1571*890232f2SAndroid Build Coastguard Worker if ((a == null && a != b) || (a != null && !a.equals(b))) { 1572*890232f2SAndroid Build Coastguard Worker System.out.println("" + a.getClass().getName() + " " + b.getClass().getName()); 1573*890232f2SAndroid Build Coastguard Worker System.out.println("FlatBuffers test FAILED: \'" + a + "\' != \'" + b + "\'"); 1574*890232f2SAndroid Build Coastguard Worker new Throwable().printStackTrace(); 1575*890232f2SAndroid Build Coastguard Worker assert false; 1576*890232f2SAndroid Build Coastguard Worker System.exit(1); 1577*890232f2SAndroid Build Coastguard Worker } 1578*890232f2SAndroid Build Coastguard Worker } 1579*890232f2SAndroid Build Coastguard Worker 1580*890232f2SAndroid Build Coastguard Worker } 1581