1*890232f2SAndroid Build Coastguard Worker /* 2*890232f2SAndroid Build Coastguard Worker * Copyright 2014 Google Inc. All rights reserved. 3*890232f2SAndroid Build Coastguard Worker * 4*890232f2SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*890232f2SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*890232f2SAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*890232f2SAndroid Build Coastguard Worker * 8*890232f2SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*890232f2SAndroid Build Coastguard Worker * 10*890232f2SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*890232f2SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*890232f2SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*890232f2SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*890232f2SAndroid Build Coastguard Worker * limitations under the License. 15*890232f2SAndroid Build Coastguard Worker */ 16*890232f2SAndroid Build Coastguard Worker 17*890232f2SAndroid Build Coastguard Worker using System.IO; 18*890232f2SAndroid Build Coastguard Worker using System.Text; 19*890232f2SAndroid Build Coastguard Worker using System.Threading; 20*890232f2SAndroid Build Coastguard Worker using MyGame.Example; 21*890232f2SAndroid Build Coastguard Worker using optional_scalars; 22*890232f2SAndroid Build Coastguard Worker using KeywordTest; 23*890232f2SAndroid Build Coastguard Worker 24*890232f2SAndroid Build Coastguard Worker namespace FlatBuffers.Test 25*890232f2SAndroid Build Coastguard Worker { 26*890232f2SAndroid Build Coastguard Worker [FlatBuffersTestClass] 27*890232f2SAndroid Build Coastguard Worker public class FlatBuffersExampleTests 28*890232f2SAndroid Build Coastguard Worker { RunTests()29*890232f2SAndroid Build Coastguard Worker public void RunTests() 30*890232f2SAndroid Build Coastguard Worker { 31*890232f2SAndroid Build Coastguard Worker CanCreateNewFlatBufferFromScratch(); 32*890232f2SAndroid Build Coastguard Worker CanReadCppGeneratedWireFile(); 33*890232f2SAndroid Build Coastguard Worker TestEnums(); 34*890232f2SAndroid Build Coastguard Worker } 35*890232f2SAndroid Build Coastguard Worker 36*890232f2SAndroid Build Coastguard Worker [FlatBuffersTestMethod] CanCreateNewFlatBufferFromScratch()37*890232f2SAndroid Build Coastguard Worker public void CanCreateNewFlatBufferFromScratch() 38*890232f2SAndroid Build Coastguard Worker { 39*890232f2SAndroid Build Coastguard Worker CanCreateNewFlatBufferFromScratch(true); 40*890232f2SAndroid Build Coastguard Worker CanCreateNewFlatBufferFromScratch(false); 41*890232f2SAndroid Build Coastguard Worker } 42*890232f2SAndroid Build Coastguard Worker CanCreateNewFlatBufferFromScratch(bool sizePrefix)43*890232f2SAndroid Build Coastguard Worker private void CanCreateNewFlatBufferFromScratch(bool sizePrefix) 44*890232f2SAndroid Build Coastguard Worker { 45*890232f2SAndroid Build Coastguard Worker // Second, let's create a FlatBuffer from scratch in C#, and test it also. 46*890232f2SAndroid Build Coastguard Worker // We use an initial size of 1 to exercise the reallocation algorithm, 47*890232f2SAndroid Build Coastguard Worker // normally a size larger than the typical FlatBuffer you generate would be 48*890232f2SAndroid Build Coastguard Worker // better for performance. 49*890232f2SAndroid Build Coastguard Worker var fbb = new FlatBufferBuilder(1); 50*890232f2SAndroid Build Coastguard Worker 51*890232f2SAndroid Build Coastguard Worker StringOffset[] names = { fbb.CreateString("Frodo"), fbb.CreateString("Barney"), fbb.CreateString("Wilma") }; 52*890232f2SAndroid Build Coastguard Worker Offset<Monster>[] off = new Offset<Monster>[3]; 53*890232f2SAndroid Build Coastguard Worker Monster.StartMonster(fbb); 54*890232f2SAndroid Build Coastguard Worker Monster.AddName(fbb, names[0]); 55*890232f2SAndroid Build Coastguard Worker off[0] = Monster.EndMonster(fbb); 56*890232f2SAndroid Build Coastguard Worker Monster.StartMonster(fbb); 57*890232f2SAndroid Build Coastguard Worker Monster.AddName(fbb, names[1]); 58*890232f2SAndroid Build Coastguard Worker off[1] = Monster.EndMonster(fbb); 59*890232f2SAndroid Build Coastguard Worker Monster.StartMonster(fbb); 60*890232f2SAndroid Build Coastguard Worker Monster.AddName(fbb, names[2]); 61*890232f2SAndroid Build Coastguard Worker off[2] = Monster.EndMonster(fbb); 62*890232f2SAndroid Build Coastguard Worker var sortMons = Monster.CreateSortedVectorOfMonster(fbb, off); 63*890232f2SAndroid Build Coastguard Worker 64*890232f2SAndroid Build Coastguard Worker // We set up the same values as monsterdata.json: 65*890232f2SAndroid Build Coastguard Worker 66*890232f2SAndroid Build Coastguard Worker var str = fbb.CreateString("MyMonster"); 67*890232f2SAndroid Build Coastguard Worker var test1 = fbb.CreateString("test1"); 68*890232f2SAndroid Build Coastguard Worker var test2 = fbb.CreateString("test2"); 69*890232f2SAndroid Build Coastguard Worker 70*890232f2SAndroid Build Coastguard Worker 71*890232f2SAndroid Build Coastguard Worker Monster.StartInventoryVector(fbb, 5); 72*890232f2SAndroid Build Coastguard Worker for (int i = 4; i >= 0; i--) 73*890232f2SAndroid Build Coastguard Worker { 74*890232f2SAndroid Build Coastguard Worker fbb.AddByte((byte)i); 75*890232f2SAndroid Build Coastguard Worker } 76*890232f2SAndroid Build Coastguard Worker var inv = fbb.EndVector(); 77*890232f2SAndroid Build Coastguard Worker 78*890232f2SAndroid Build Coastguard Worker var fred = fbb.CreateString("Fred"); 79*890232f2SAndroid Build Coastguard Worker Monster.StartMonster(fbb); 80*890232f2SAndroid Build Coastguard Worker Monster.AddName(fbb, fred); 81*890232f2SAndroid Build Coastguard Worker var mon2 = Monster.EndMonster(fbb); 82*890232f2SAndroid Build Coastguard Worker 83*890232f2SAndroid Build Coastguard Worker Monster.StartTest4Vector(fbb, 2); 84*890232f2SAndroid Build Coastguard Worker MyGame.Example.Test.CreateTest(fbb, (short)10, (sbyte)20); 85*890232f2SAndroid Build Coastguard Worker MyGame.Example.Test.CreateTest(fbb, (short)30, (sbyte)40); 86*890232f2SAndroid Build Coastguard Worker var test4 = fbb.EndVector(); 87*890232f2SAndroid Build Coastguard Worker 88*890232f2SAndroid Build Coastguard Worker Monster.StartTestarrayofstringVector(fbb, 2); 89*890232f2SAndroid Build Coastguard Worker fbb.AddOffset(test2.Value); 90*890232f2SAndroid Build Coastguard Worker fbb.AddOffset(test1.Value); 91*890232f2SAndroid Build Coastguard Worker var testArrayOfString = fbb.EndVector(); 92*890232f2SAndroid Build Coastguard Worker 93*890232f2SAndroid Build Coastguard Worker Monster.StartMonster(fbb); 94*890232f2SAndroid Build Coastguard Worker Monster.AddPos(fbb, Vec3.CreateVec3(fbb, 1.0f, 2.0f, 3.0f, 3.0, 95*890232f2SAndroid Build Coastguard Worker Color.Green, (short)5, (sbyte)6)); 96*890232f2SAndroid Build Coastguard Worker Monster.AddHp(fbb, (short)80); 97*890232f2SAndroid Build Coastguard Worker Monster.AddName(fbb, str); 98*890232f2SAndroid Build Coastguard Worker Monster.AddInventory(fbb, inv); 99*890232f2SAndroid Build Coastguard Worker Monster.AddTestType(fbb, Any.Monster); 100*890232f2SAndroid Build Coastguard Worker Monster.AddTest(fbb, mon2.Value); 101*890232f2SAndroid Build Coastguard Worker Monster.AddTest4(fbb, test4); 102*890232f2SAndroid Build Coastguard Worker Monster.AddTestarrayofstring(fbb, testArrayOfString); 103*890232f2SAndroid Build Coastguard Worker Monster.AddTestbool(fbb, true); 104*890232f2SAndroid Build Coastguard Worker Monster.AddTestarrayoftables(fbb, sortMons); 105*890232f2SAndroid Build Coastguard Worker var mon = Monster.EndMonster(fbb); 106*890232f2SAndroid Build Coastguard Worker 107*890232f2SAndroid Build Coastguard Worker if (sizePrefix) 108*890232f2SAndroid Build Coastguard Worker { 109*890232f2SAndroid Build Coastguard Worker Monster.FinishSizePrefixedMonsterBuffer(fbb, mon); 110*890232f2SAndroid Build Coastguard Worker } 111*890232f2SAndroid Build Coastguard Worker else 112*890232f2SAndroid Build Coastguard Worker { 113*890232f2SAndroid Build Coastguard Worker Monster.FinishMonsterBuffer(fbb, mon); 114*890232f2SAndroid Build Coastguard Worker } 115*890232f2SAndroid Build Coastguard Worker 116*890232f2SAndroid Build Coastguard Worker // Dump to output directory so we can inspect later, if needed 117*890232f2SAndroid Build Coastguard Worker #if ENABLE_SPAN_T 118*890232f2SAndroid Build Coastguard Worker var data = fbb.DataBuffer.ToSizedArray(); 119*890232f2SAndroid Build Coastguard Worker string filename = @"monsterdata_cstest" + (sizePrefix ? "_sp" : "") + ".mon"; 120*890232f2SAndroid Build Coastguard Worker File.WriteAllBytes(filename, data); 121*890232f2SAndroid Build Coastguard Worker #else 122*890232f2SAndroid Build Coastguard Worker using (var ms = fbb.DataBuffer.ToMemoryStream(fbb.DataBuffer.Position, fbb.Offset)) 123*890232f2SAndroid Build Coastguard Worker { 124*890232f2SAndroid Build Coastguard Worker var data = ms.ToArray(); 125*890232f2SAndroid Build Coastguard Worker string filename = @"monsterdata_cstest" + (sizePrefix ? "_sp" : "") + ".mon"; 126*890232f2SAndroid Build Coastguard Worker File.WriteAllBytes(filename, data); 127*890232f2SAndroid Build Coastguard Worker } 128*890232f2SAndroid Build Coastguard Worker #endif 129*890232f2SAndroid Build Coastguard Worker 130*890232f2SAndroid Build Coastguard Worker // Remove the size prefix if necessary for further testing 131*890232f2SAndroid Build Coastguard Worker ByteBuffer dataBuffer = fbb.DataBuffer; 132*890232f2SAndroid Build Coastguard Worker if (sizePrefix) 133*890232f2SAndroid Build Coastguard Worker { 134*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(ByteBufferUtil.GetSizePrefix(dataBuffer) + FlatBufferConstants.SizePrefixLength, 135*890232f2SAndroid Build Coastguard Worker dataBuffer.Length - dataBuffer.Position); 136*890232f2SAndroid Build Coastguard Worker dataBuffer = ByteBufferUtil.RemoveSizePrefix(dataBuffer); 137*890232f2SAndroid Build Coastguard Worker } 138*890232f2SAndroid Build Coastguard Worker 139*890232f2SAndroid Build Coastguard Worker // Now assert the buffer 140*890232f2SAndroid Build Coastguard Worker TestBuffer(dataBuffer); 141*890232f2SAndroid Build Coastguard Worker 142*890232f2SAndroid Build Coastguard Worker //Attempt to mutate Monster fields and check whether the buffer has been mutated properly 143*890232f2SAndroid Build Coastguard Worker // revert to original values after testing 144*890232f2SAndroid Build Coastguard Worker Monster monster = Monster.GetRootAsMonster(dataBuffer); 145*890232f2SAndroid Build Coastguard Worker 146*890232f2SAndroid Build Coastguard Worker 147*890232f2SAndroid Build Coastguard Worker // mana is optional and does not exist in the buffer so the mutation should fail 148*890232f2SAndroid Build Coastguard Worker // the mana field should retain its default value 149*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(monster.MutateMana((short)10), false); 150*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(monster.Mana, (short)150); 151*890232f2SAndroid Build Coastguard Worker 152*890232f2SAndroid Build Coastguard Worker // Accessing a vector of sorted by the key tables 153*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(monster.Testarrayoftables(0).Value.Name, "Barney"); 154*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(monster.Testarrayoftables(1).Value.Name, "Frodo"); 155*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(monster.Testarrayoftables(2).Value.Name, "Wilma"); 156*890232f2SAndroid Build Coastguard Worker 157*890232f2SAndroid Build Coastguard Worker // Example of searching for a table by the key 158*890232f2SAndroid Build Coastguard Worker Assert.IsTrue(monster.TestarrayoftablesByKey("Frodo") != null); 159*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(monster.TestarrayoftablesByKey("Frodo").Value.Name, "Frodo"); 160*890232f2SAndroid Build Coastguard Worker Assert.IsTrue(monster.TestarrayoftablesByKey("Barney") != null); 161*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(monster.TestarrayoftablesByKey("Barney").Value.Name, "Barney"); 162*890232f2SAndroid Build Coastguard Worker Assert.IsTrue(monster.TestarrayoftablesByKey("Wilma") != null); 163*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(monster.TestarrayoftablesByKey("Wilma").Value.Name, "Wilma"); 164*890232f2SAndroid Build Coastguard Worker 165*890232f2SAndroid Build Coastguard Worker // testType is an existing field 166*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(monster.TestType, Any.Monster); 167*890232f2SAndroid Build Coastguard Worker 168*890232f2SAndroid Build Coastguard Worker //mutate the inventory vector 169*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(monster.MutateInventory(0, 1), true); 170*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(monster.MutateInventory(1, 2), true); 171*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(monster.MutateInventory(2, 3), true); 172*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(monster.MutateInventory(3, 4), true); 173*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(monster.MutateInventory(4, 5), true); 174*890232f2SAndroid Build Coastguard Worker 175*890232f2SAndroid Build Coastguard Worker for (int i = 0; i < monster.InventoryLength; i++) 176*890232f2SAndroid Build Coastguard Worker { 177*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(monster.Inventory(i), i + 1); 178*890232f2SAndroid Build Coastguard Worker } 179*890232f2SAndroid Build Coastguard Worker 180*890232f2SAndroid Build Coastguard Worker //reverse mutation 181*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(monster.MutateInventory(0, 0), true); 182*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(monster.MutateInventory(1, 1), true); 183*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(monster.MutateInventory(2, 2), true); 184*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(monster.MutateInventory(3, 3), true); 185*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(monster.MutateInventory(4, 4), true); 186*890232f2SAndroid Build Coastguard Worker 187*890232f2SAndroid Build Coastguard Worker // get a struct field and edit one of its fields 188*890232f2SAndroid Build Coastguard Worker Vec3 pos = (Vec3)monster.Pos; 189*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(pos.X, 1.0f); 190*890232f2SAndroid Build Coastguard Worker pos.MutateX(55.0f); 191*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(pos.X, 55.0f); 192*890232f2SAndroid Build Coastguard Worker pos.MutateX(1.0f); 193*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(pos.X, 1.0f); 194*890232f2SAndroid Build Coastguard Worker 195*890232f2SAndroid Build Coastguard Worker TestBuffer(dataBuffer); 196*890232f2SAndroid Build Coastguard Worker TestObjectAPI(Monster.GetRootAsMonster(dataBuffer)); 197*890232f2SAndroid Build Coastguard Worker } 198*890232f2SAndroid Build Coastguard Worker TestBuffer(ByteBuffer bb)199*890232f2SAndroid Build Coastguard Worker private void TestBuffer(ByteBuffer bb) 200*890232f2SAndroid Build Coastguard Worker { 201*890232f2SAndroid Build Coastguard Worker Monster monster = Monster.GetRootAsMonster(bb); 202*890232f2SAndroid Build Coastguard Worker 203*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(80, monster.Hp); 204*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(150, monster.Mana); 205*890232f2SAndroid Build Coastguard Worker Assert.AreEqual("MyMonster", monster.Name); 206*890232f2SAndroid Build Coastguard Worker 207*890232f2SAndroid Build Coastguard Worker var pos = monster.Pos.Value; 208*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(1.0f, pos.X); 209*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(2.0f, pos.Y); 210*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(3.0f, pos.Z); 211*890232f2SAndroid Build Coastguard Worker 212*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(3.0f, pos.Test1); 213*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(Color.Green, pos.Test2); 214*890232f2SAndroid Build Coastguard Worker var t = (MyGame.Example.Test)pos.Test3; 215*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((short)5, t.A); 216*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((sbyte)6, t.B); 217*890232f2SAndroid Build Coastguard Worker 218*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(Any.Monster, monster.TestType); 219*890232f2SAndroid Build Coastguard Worker 220*890232f2SAndroid Build Coastguard Worker var monster2 = monster.Test<Monster>().Value; 221*890232f2SAndroid Build Coastguard Worker Assert.AreEqual("Fred", monster2.Name); 222*890232f2SAndroid Build Coastguard Worker 223*890232f2SAndroid Build Coastguard Worker 224*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(5, monster.InventoryLength); 225*890232f2SAndroid Build Coastguard Worker var invsum = 0; 226*890232f2SAndroid Build Coastguard Worker for (var i = 0; i < monster.InventoryLength; i++) 227*890232f2SAndroid Build Coastguard Worker { 228*890232f2SAndroid Build Coastguard Worker invsum += monster.Inventory(i); 229*890232f2SAndroid Build Coastguard Worker } 230*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(10, invsum); 231*890232f2SAndroid Build Coastguard Worker 232*890232f2SAndroid Build Coastguard Worker // Get the inventory as an array and subtract the 233*890232f2SAndroid Build Coastguard Worker // sum to get it back to 0 234*890232f2SAndroid Build Coastguard Worker var inventoryArray = monster.GetInventoryArray(); 235*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(5, inventoryArray.Length); 236*890232f2SAndroid Build Coastguard Worker foreach(var inv in inventoryArray) 237*890232f2SAndroid Build Coastguard Worker { 238*890232f2SAndroid Build Coastguard Worker invsum -= inv; 239*890232f2SAndroid Build Coastguard Worker } 240*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(0, invsum); 241*890232f2SAndroid Build Coastguard Worker 242*890232f2SAndroid Build Coastguard Worker var test0 = monster.Test4(0).Value; 243*890232f2SAndroid Build Coastguard Worker var test1 = monster.Test4(1).Value; 244*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(2, monster.Test4Length); 245*890232f2SAndroid Build Coastguard Worker 246*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(100, test0.A + test0.B + test1.A + test1.B); 247*890232f2SAndroid Build Coastguard Worker 248*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(2, monster.TestarrayofstringLength); 249*890232f2SAndroid Build Coastguard Worker Assert.AreEqual("test1", monster.Testarrayofstring(0)); 250*890232f2SAndroid Build Coastguard Worker Assert.AreEqual("test2", monster.Testarrayofstring(1)); 251*890232f2SAndroid Build Coastguard Worker 252*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(true, monster.Testbool); 253*890232f2SAndroid Build Coastguard Worker 254*890232f2SAndroid Build Coastguard Worker #if ENABLE_SPAN_T 255*890232f2SAndroid Build Coastguard Worker var nameBytes = monster.GetNameBytes(); 256*890232f2SAndroid Build Coastguard Worker Assert.AreEqual("MyMonster", Encoding.UTF8.GetString(nameBytes.ToArray(), 0, nameBytes.Length)); 257*890232f2SAndroid Build Coastguard Worker 258*890232f2SAndroid Build Coastguard Worker if (0 == monster.TestarrayofboolsLength) 259*890232f2SAndroid Build Coastguard Worker { 260*890232f2SAndroid Build Coastguard Worker Assert.IsFalse(monster.GetTestarrayofboolsBytes().Length != 0); 261*890232f2SAndroid Build Coastguard Worker } 262*890232f2SAndroid Build Coastguard Worker else 263*890232f2SAndroid Build Coastguard Worker { 264*890232f2SAndroid Build Coastguard Worker Assert.IsTrue(monster.GetTestarrayofboolsBytes().Length != 0); 265*890232f2SAndroid Build Coastguard Worker } 266*890232f2SAndroid Build Coastguard Worker 267*890232f2SAndroid Build Coastguard Worker var longArrayBytes = monster.GetVectorOfLongsBytes(); 268*890232f2SAndroid Build Coastguard Worker Assert.IsTrue(monster.VectorOfLongsLength * 8 == longArrayBytes.Length); 269*890232f2SAndroid Build Coastguard Worker 270*890232f2SAndroid Build Coastguard Worker var doubleArrayBytes = monster.GetVectorOfDoublesBytes(); 271*890232f2SAndroid Build Coastguard Worker Assert.IsTrue(monster.VectorOfDoublesLength * 8 == doubleArrayBytes.Length); 272*890232f2SAndroid Build Coastguard Worker #else 273*890232f2SAndroid Build Coastguard Worker var nameBytes = monster.GetNameBytes().Value; 274*890232f2SAndroid Build Coastguard Worker Assert.AreEqual("MyMonster", Encoding.UTF8.GetString(nameBytes.Array, nameBytes.Offset, nameBytes.Count)); 275*890232f2SAndroid Build Coastguard Worker 276*890232f2SAndroid Build Coastguard Worker if (0 == monster.TestarrayofboolsLength) 277*890232f2SAndroid Build Coastguard Worker { 278*890232f2SAndroid Build Coastguard Worker Assert.IsFalse(monster.GetTestarrayofboolsBytes().HasValue); 279*890232f2SAndroid Build Coastguard Worker } 280*890232f2SAndroid Build Coastguard Worker else 281*890232f2SAndroid Build Coastguard Worker { 282*890232f2SAndroid Build Coastguard Worker Assert.IsTrue(monster.GetTestarrayofboolsBytes().HasValue); 283*890232f2SAndroid Build Coastguard Worker } 284*890232f2SAndroid Build Coastguard Worker #endif 285*890232f2SAndroid Build Coastguard Worker } 286*890232f2SAndroid Build Coastguard Worker 287*890232f2SAndroid Build Coastguard Worker [FlatBuffersTestMethod] CanReadCppGeneratedWireFile()288*890232f2SAndroid Build Coastguard Worker public void CanReadCppGeneratedWireFile() 289*890232f2SAndroid Build Coastguard Worker { 290*890232f2SAndroid Build Coastguard Worker var data = File.ReadAllBytes(@"../monsterdata_test.mon"); 291*890232f2SAndroid Build Coastguard Worker var bb = new ByteBuffer(data); 292*890232f2SAndroid Build Coastguard Worker TestBuffer(bb); 293*890232f2SAndroid Build Coastguard Worker TestObjectAPI(Monster.GetRootAsMonster(bb)); 294*890232f2SAndroid Build Coastguard Worker } 295*890232f2SAndroid Build Coastguard Worker 296*890232f2SAndroid Build Coastguard Worker [FlatBuffersTestMethod] CanReadJsonFile()297*890232f2SAndroid Build Coastguard Worker public void CanReadJsonFile() 298*890232f2SAndroid Build Coastguard Worker { 299*890232f2SAndroid Build Coastguard Worker var jsonText = File.ReadAllText(@"../monsterdata_test.json"); 300*890232f2SAndroid Build Coastguard Worker var mon = MonsterT.DeserializeFromJson(jsonText); 301*890232f2SAndroid Build Coastguard Worker var fbb = new FlatBufferBuilder(1); 302*890232f2SAndroid Build Coastguard Worker fbb.Finish(Monster.Pack(fbb, mon).Value); 303*890232f2SAndroid Build Coastguard Worker TestBuffer(fbb.DataBuffer); 304*890232f2SAndroid Build Coastguard Worker } 305*890232f2SAndroid Build Coastguard Worker 306*890232f2SAndroid Build Coastguard Worker [FlatBuffersTestMethod] TestEnums()307*890232f2SAndroid Build Coastguard Worker public void TestEnums() 308*890232f2SAndroid Build Coastguard Worker { 309*890232f2SAndroid Build Coastguard Worker Assert.AreEqual("Red", Color.Red.ToString()); 310*890232f2SAndroid Build Coastguard Worker Assert.AreEqual("Blue", Color.Blue.ToString()); 311*890232f2SAndroid Build Coastguard Worker Assert.AreEqual("NONE", Any.NONE.ToString()); 312*890232f2SAndroid Build Coastguard Worker Assert.AreEqual("Monster", Any.Monster.ToString()); 313*890232f2SAndroid Build Coastguard Worker } 314*890232f2SAndroid Build Coastguard Worker 315*890232f2SAndroid Build Coastguard Worker [FlatBuffersTestMethod] TestVectorOfEnums()316*890232f2SAndroid Build Coastguard Worker public void TestVectorOfEnums() 317*890232f2SAndroid Build Coastguard Worker { 318*890232f2SAndroid Build Coastguard Worker const string monsterName = "TestVectorOfEnumsMonster"; 319*890232f2SAndroid Build Coastguard Worker var colorVec = new Color[] { Color.Red, Color.Green, Color.Blue }; 320*890232f2SAndroid Build Coastguard Worker var fbb = new FlatBufferBuilder(32); 321*890232f2SAndroid Build Coastguard Worker var str1 = fbb.CreateString(monsterName); 322*890232f2SAndroid Build Coastguard Worker var vec1 = Monster.CreateVectorOfEnumsVector(fbb, colorVec); 323*890232f2SAndroid Build Coastguard Worker Monster.StartMonster(fbb); 324*890232f2SAndroid Build Coastguard Worker Monster.AddName(fbb, str1); 325*890232f2SAndroid Build Coastguard Worker Monster.AddVectorOfEnums(fbb, vec1); 326*890232f2SAndroid Build Coastguard Worker var monster1 = Monster.EndMonster(fbb); 327*890232f2SAndroid Build Coastguard Worker Monster.FinishMonsterBuffer(fbb, monster1); 328*890232f2SAndroid Build Coastguard Worker 329*890232f2SAndroid Build Coastguard Worker var mons = Monster.GetRootAsMonster(fbb.DataBuffer); 330*890232f2SAndroid Build Coastguard Worker var colors = mons.GetVectorOfEnumsArray(); 331*890232f2SAndroid Build Coastguard Worker Assert.ArrayEqual(colorVec, colors); 332*890232f2SAndroid Build Coastguard Worker 333*890232f2SAndroid Build Coastguard Worker TestObjectAPI(mons); 334*890232f2SAndroid Build Coastguard Worker } 335*890232f2SAndroid Build Coastguard Worker 336*890232f2SAndroid Build Coastguard Worker [FlatBuffersTestMethod] TestNestedFlatBuffer()337*890232f2SAndroid Build Coastguard Worker public void TestNestedFlatBuffer() 338*890232f2SAndroid Build Coastguard Worker { 339*890232f2SAndroid Build Coastguard Worker const string nestedMonsterName = "NestedMonsterName"; 340*890232f2SAndroid Build Coastguard Worker const short nestedMonsterHp = 600; 341*890232f2SAndroid Build Coastguard Worker const short nestedMonsterMana = 1024; 342*890232f2SAndroid Build Coastguard Worker // Create nested buffer as a Monster type 343*890232f2SAndroid Build Coastguard Worker var fbb1 = new FlatBufferBuilder(16); 344*890232f2SAndroid Build Coastguard Worker var str1 = fbb1.CreateString(nestedMonsterName); 345*890232f2SAndroid Build Coastguard Worker Monster.StartMonster(fbb1); 346*890232f2SAndroid Build Coastguard Worker Monster.AddName(fbb1, str1); 347*890232f2SAndroid Build Coastguard Worker Monster.AddHp(fbb1, nestedMonsterHp); 348*890232f2SAndroid Build Coastguard Worker Monster.AddMana(fbb1, nestedMonsterMana); 349*890232f2SAndroid Build Coastguard Worker var monster1 = Monster.EndMonster(fbb1); 350*890232f2SAndroid Build Coastguard Worker Monster.FinishMonsterBuffer(fbb1, monster1); 351*890232f2SAndroid Build Coastguard Worker var fbb1Bytes = fbb1.SizedByteArray(); 352*890232f2SAndroid Build Coastguard Worker fbb1 = null; 353*890232f2SAndroid Build Coastguard Worker 354*890232f2SAndroid Build Coastguard Worker // Create a Monster which has the first buffer as a nested buffer 355*890232f2SAndroid Build Coastguard Worker var fbb2 = new FlatBufferBuilder(16); 356*890232f2SAndroid Build Coastguard Worker var str2 = fbb2.CreateString("My Monster"); 357*890232f2SAndroid Build Coastguard Worker var nestedBuffer = Monster.CreateTestnestedflatbufferVector(fbb2, fbb1Bytes); 358*890232f2SAndroid Build Coastguard Worker Monster.StartMonster(fbb2); 359*890232f2SAndroid Build Coastguard Worker Monster.AddName(fbb2, str2); 360*890232f2SAndroid Build Coastguard Worker Monster.AddHp(fbb2, 50); 361*890232f2SAndroid Build Coastguard Worker Monster.AddMana(fbb2, 32); 362*890232f2SAndroid Build Coastguard Worker Monster.AddTestnestedflatbuffer(fbb2, nestedBuffer); 363*890232f2SAndroid Build Coastguard Worker var monster = Monster.EndMonster(fbb2); 364*890232f2SAndroid Build Coastguard Worker Monster.FinishMonsterBuffer(fbb2, monster); 365*890232f2SAndroid Build Coastguard Worker 366*890232f2SAndroid Build Coastguard Worker // Now test the data extracted from the nested buffer 367*890232f2SAndroid Build Coastguard Worker var mons = Monster.GetRootAsMonster(fbb2.DataBuffer); 368*890232f2SAndroid Build Coastguard Worker var nestedMonster = mons.GetTestnestedflatbufferAsMonster().Value; 369*890232f2SAndroid Build Coastguard Worker 370*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(nestedMonsterMana, nestedMonster.Mana); 371*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(nestedMonsterHp, nestedMonster.Hp); 372*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(nestedMonsterName, nestedMonster.Name); 373*890232f2SAndroid Build Coastguard Worker 374*890232f2SAndroid Build Coastguard Worker TestObjectAPI(mons); 375*890232f2SAndroid Build Coastguard Worker TestObjectAPI(nestedMonster); 376*890232f2SAndroid Build Coastguard Worker } 377*890232f2SAndroid Build Coastguard Worker 378*890232f2SAndroid Build Coastguard Worker [FlatBuffersTestMethod] TestFixedLenghtArrays()379*890232f2SAndroid Build Coastguard Worker public void TestFixedLenghtArrays() 380*890232f2SAndroid Build Coastguard Worker { 381*890232f2SAndroid Build Coastguard Worker FlatBufferBuilder builder = new FlatBufferBuilder(100); 382*890232f2SAndroid Build Coastguard Worker 383*890232f2SAndroid Build Coastguard Worker float a; 384*890232f2SAndroid Build Coastguard Worker int[] b = new int[15]; 385*890232f2SAndroid Build Coastguard Worker sbyte c; 386*890232f2SAndroid Build Coastguard Worker int[,] d_a = new int[2, 2]; 387*890232f2SAndroid Build Coastguard Worker TestEnum[] d_b = new TestEnum[2]; 388*890232f2SAndroid Build Coastguard Worker TestEnum[,] d_c = new TestEnum[2, 2]; 389*890232f2SAndroid Build Coastguard Worker long[,] d_d = new long[2, 2]; 390*890232f2SAndroid Build Coastguard Worker int e; 391*890232f2SAndroid Build Coastguard Worker long[] f = new long[2]; 392*890232f2SAndroid Build Coastguard Worker 393*890232f2SAndroid Build Coastguard Worker a = 0.5f; 394*890232f2SAndroid Build Coastguard Worker for (int i = 0; i < 15; i++) b[i] = i; 395*890232f2SAndroid Build Coastguard Worker c = 1; 396*890232f2SAndroid Build Coastguard Worker d_a[0, 0] = 1; 397*890232f2SAndroid Build Coastguard Worker d_a[0, 1] = 2; 398*890232f2SAndroid Build Coastguard Worker d_a[1, 0] = 3; 399*890232f2SAndroid Build Coastguard Worker d_a[1, 1] = 4; 400*890232f2SAndroid Build Coastguard Worker d_b[0] = TestEnum.B; 401*890232f2SAndroid Build Coastguard Worker d_b[1] = TestEnum.C; 402*890232f2SAndroid Build Coastguard Worker d_c[0, 0] = TestEnum.A; 403*890232f2SAndroid Build Coastguard Worker d_c[0, 1] = TestEnum.B; 404*890232f2SAndroid Build Coastguard Worker d_c[1, 0] = TestEnum.C; 405*890232f2SAndroid Build Coastguard Worker d_c[1, 1] = TestEnum.B; 406*890232f2SAndroid Build Coastguard Worker d_d[0, 0] = -1; 407*890232f2SAndroid Build Coastguard Worker d_d[0, 1] = 1; 408*890232f2SAndroid Build Coastguard Worker d_d[1, 0] = -2; 409*890232f2SAndroid Build Coastguard Worker d_d[1, 1] = 2; 410*890232f2SAndroid Build Coastguard Worker e = 2; 411*890232f2SAndroid Build Coastguard Worker f[0] = -1; 412*890232f2SAndroid Build Coastguard Worker f[1] = 1; 413*890232f2SAndroid Build Coastguard Worker 414*890232f2SAndroid Build Coastguard Worker Offset<ArrayStruct> arrayOffset = ArrayStruct.CreateArrayStruct( 415*890232f2SAndroid Build Coastguard Worker builder, a, b, c, d_a, d_b, d_c, d_d, e, f); 416*890232f2SAndroid Build Coastguard Worker 417*890232f2SAndroid Build Coastguard Worker // Create a table with the ArrayStruct. 418*890232f2SAndroid Build Coastguard Worker ArrayTable.StartArrayTable(builder); 419*890232f2SAndroid Build Coastguard Worker ArrayTable.AddA(builder, arrayOffset); 420*890232f2SAndroid Build Coastguard Worker Offset<ArrayTable> tableOffset = ArrayTable.EndArrayTable(builder); 421*890232f2SAndroid Build Coastguard Worker 422*890232f2SAndroid Build Coastguard Worker ArrayTable.FinishArrayTableBuffer(builder, tableOffset); 423*890232f2SAndroid Build Coastguard Worker 424*890232f2SAndroid Build Coastguard Worker ArrayTable table = ArrayTable.GetRootAsArrayTable(builder.DataBuffer); 425*890232f2SAndroid Build Coastguard Worker 426*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(table.A.Value.A, 0.5f); 427*890232f2SAndroid Build Coastguard Worker for (int i = 0; i < 15; i++) Assert.AreEqual(table.A.Value.B(i), i); 428*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(table.A.Value.C, (sbyte)1); 429*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(table.A.Value.D(0).A(0), 1); 430*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(table.A.Value.D(0).A(1), 2); 431*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(table.A.Value.D(1).A(0), 3); 432*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(table.A.Value.D(1).A(1), 4); 433*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(table.A.Value.D(0).B, TestEnum.B); 434*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(table.A.Value.D(1).B, TestEnum.C); 435*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(table.A.Value.D(0).C(0), TestEnum.A); 436*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(table.A.Value.D(0).C(1), TestEnum.B); 437*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(table.A.Value.D(1).C(0), TestEnum.C); 438*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(table.A.Value.D(1).C(1), TestEnum.B); 439*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(table.A.Value.D(0).D(0), -1); 440*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(table.A.Value.D(0).D(1), 1); 441*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(table.A.Value.D(1).D(0), -2); 442*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(table.A.Value.D(1).D(1), 2); 443*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(table.A.Value.E, 2); 444*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(table.A.Value.F(0), -1); 445*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(table.A.Value.F(1), 1); 446*890232f2SAndroid Build Coastguard Worker 447*890232f2SAndroid Build Coastguard Worker TestObjectAPI(table); 448*890232f2SAndroid Build Coastguard Worker } 449*890232f2SAndroid Build Coastguard Worker 450*890232f2SAndroid Build Coastguard Worker [FlatBuffersTestMethod] TestUnionVector()451*890232f2SAndroid Build Coastguard Worker public void TestUnionVector() 452*890232f2SAndroid Build Coastguard Worker { 453*890232f2SAndroid Build Coastguard Worker var fbb = new FlatBufferBuilder(100); 454*890232f2SAndroid Build Coastguard Worker var rapunzel = Rapunzel.CreateRapunzel(fbb, 40).Value; 455*890232f2SAndroid Build Coastguard Worker 456*890232f2SAndroid Build Coastguard Worker var characterTypes = new[] 457*890232f2SAndroid Build Coastguard Worker { 458*890232f2SAndroid Build Coastguard Worker Character.MuLan, 459*890232f2SAndroid Build Coastguard Worker Character.Belle, 460*890232f2SAndroid Build Coastguard Worker Character.Other, 461*890232f2SAndroid Build Coastguard Worker }; 462*890232f2SAndroid Build Coastguard Worker var characterTypesOffset = Movie.CreateCharactersTypeVector(fbb, characterTypes); 463*890232f2SAndroid Build Coastguard Worker 464*890232f2SAndroid Build Coastguard Worker var characters = new[] 465*890232f2SAndroid Build Coastguard Worker { 466*890232f2SAndroid Build Coastguard Worker Attacker.CreateAttacker(fbb, 10).Value, 467*890232f2SAndroid Build Coastguard Worker BookReader.CreateBookReader(fbb, 20).Value, 468*890232f2SAndroid Build Coastguard Worker fbb.CreateSharedString("Chip").Value, 469*890232f2SAndroid Build Coastguard Worker }; 470*890232f2SAndroid Build Coastguard Worker var charactersOffset = Movie.CreateCharactersVector(fbb, characters); 471*890232f2SAndroid Build Coastguard Worker 472*890232f2SAndroid Build Coastguard Worker var movieOffset = Movie.CreateMovie( 473*890232f2SAndroid Build Coastguard Worker fbb, 474*890232f2SAndroid Build Coastguard Worker Character.Rapunzel, 475*890232f2SAndroid Build Coastguard Worker rapunzel, 476*890232f2SAndroid Build Coastguard Worker characterTypesOffset, 477*890232f2SAndroid Build Coastguard Worker charactersOffset); 478*890232f2SAndroid Build Coastguard Worker Movie.FinishMovieBuffer(fbb, movieOffset); 479*890232f2SAndroid Build Coastguard Worker 480*890232f2SAndroid Build Coastguard Worker var movie = Movie.GetRootAsMovie(fbb.DataBuffer); 481*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(Character.Rapunzel, movie.MainCharacterType); 482*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(40, movie.MainCharacter<Rapunzel>().Value.HairLength); 483*890232f2SAndroid Build Coastguard Worker 484*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(3, movie.CharactersLength); 485*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(Character.MuLan, movie.CharactersType(0)); 486*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(10, movie.Characters<Attacker>(0).Value.SwordAttackDamage); 487*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(Character.Belle, movie.CharactersType(1)); 488*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(20, movie.Characters<BookReader>(1).Value.BooksRead); 489*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(Character.Other, movie.CharactersType(2)); 490*890232f2SAndroid Build Coastguard Worker Assert.AreEqual("Chip", movie.CharactersAsString(2)); 491*890232f2SAndroid Build Coastguard Worker 492*890232f2SAndroid Build Coastguard Worker TestObjectAPI(movie); 493*890232f2SAndroid Build Coastguard Worker } 494*890232f2SAndroid Build Coastguard Worker 495*890232f2SAndroid Build Coastguard Worker [FlatBuffersTestMethod] TestUnionUtility()496*890232f2SAndroid Build Coastguard Worker public void TestUnionUtility() 497*890232f2SAndroid Build Coastguard Worker { 498*890232f2SAndroid Build Coastguard Worker var movie = new MovieT 499*890232f2SAndroid Build Coastguard Worker { 500*890232f2SAndroid Build Coastguard Worker MainCharacter = CharacterUnion.FromRapunzel(new RapunzelT { HairLength = 40 }), 501*890232f2SAndroid Build Coastguard Worker Characters = new System.Collections.Generic.List<CharacterUnion> 502*890232f2SAndroid Build Coastguard Worker { 503*890232f2SAndroid Build Coastguard Worker CharacterUnion.FromMuLan(new AttackerT { SwordAttackDamage = 10 }), 504*890232f2SAndroid Build Coastguard Worker CharacterUnion.FromBelle(new BookReaderT { BooksRead = 20 }), 505*890232f2SAndroid Build Coastguard Worker CharacterUnion.FromOther("Chip"), 506*890232f2SAndroid Build Coastguard Worker }, 507*890232f2SAndroid Build Coastguard Worker }; 508*890232f2SAndroid Build Coastguard Worker 509*890232f2SAndroid Build Coastguard Worker var fbb = new FlatBufferBuilder(100); 510*890232f2SAndroid Build Coastguard Worker Movie.FinishMovieBuffer(fbb, Movie.Pack(fbb, movie)); 511*890232f2SAndroid Build Coastguard Worker 512*890232f2SAndroid Build Coastguard Worker TestObjectAPI(Movie.GetRootAsMovie(fbb.DataBuffer)); 513*890232f2SAndroid Build Coastguard Worker } 514*890232f2SAndroid Build Coastguard Worker AreEqual(Monster a, MonsterT b)515*890232f2SAndroid Build Coastguard Worker private void AreEqual(Monster a, MonsterT b) 516*890232f2SAndroid Build Coastguard Worker { 517*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.Hp, b.Hp); 518*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.Mana, b.Mana); 519*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.Name, b.Name); 520*890232f2SAndroid Build Coastguard Worker 521*890232f2SAndroid Build Coastguard Worker var posA = a.Pos; 522*890232f2SAndroid Build Coastguard Worker var posB = b.Pos; 523*890232f2SAndroid Build Coastguard Worker if (posA != null) 524*890232f2SAndroid Build Coastguard Worker { 525*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(posA.Value.X, posB.X); 526*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(posA.Value.Y, posB.Y); 527*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(posA.Value.Z, posB.Z); 528*890232f2SAndroid Build Coastguard Worker 529*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(posA.Value.Test1, posB.Test1); 530*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(posA.Value.Test2, posB.Test2); 531*890232f2SAndroid Build Coastguard Worker var tA = posA.Value.Test3; 532*890232f2SAndroid Build Coastguard Worker var tB = posB.Test3; 533*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(tA.A, tB.A); 534*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(tA.B, tB.B); 535*890232f2SAndroid Build Coastguard Worker } 536*890232f2SAndroid Build Coastguard Worker 537*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.TestType, b.Test.Type); 538*890232f2SAndroid Build Coastguard Worker if (a.TestType == Any.Monster) 539*890232f2SAndroid Build Coastguard Worker { 540*890232f2SAndroid Build Coastguard Worker var monster2A = a.Test<Monster>().Value; 541*890232f2SAndroid Build Coastguard Worker var monster2B = b.Test.AsMonster(); 542*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(monster2A.Name, monster2B.Name); 543*890232f2SAndroid Build Coastguard Worker } 544*890232f2SAndroid Build Coastguard Worker 545*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.InventoryLength, b.Inventory.Count); 546*890232f2SAndroid Build Coastguard Worker for (var i = 0; i < a.InventoryLength; ++i) 547*890232f2SAndroid Build Coastguard Worker { 548*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.Inventory(i), b.Inventory[i]); 549*890232f2SAndroid Build Coastguard Worker } 550*890232f2SAndroid Build Coastguard Worker 551*890232f2SAndroid Build Coastguard Worker var inventoryArray = a.GetInventoryArray(); 552*890232f2SAndroid Build Coastguard Worker var inventoryArrayLength = inventoryArray == null ? 0 : inventoryArray.Length; 553*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(inventoryArrayLength, b.Inventory.Count); 554*890232f2SAndroid Build Coastguard Worker for (var i = 0; i < inventoryArrayLength; ++i) 555*890232f2SAndroid Build Coastguard Worker { 556*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(inventoryArray[i], b.Inventory[i]); 557*890232f2SAndroid Build Coastguard Worker } 558*890232f2SAndroid Build Coastguard Worker 559*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.Test4Length, b.Test4.Count); 560*890232f2SAndroid Build Coastguard Worker for (var i = 0; i < a.Test4Length; ++i) 561*890232f2SAndroid Build Coastguard Worker { 562*890232f2SAndroid Build Coastguard Worker var t4A = a.Test4(i); 563*890232f2SAndroid Build Coastguard Worker var t4B = b.Test4[i]; 564*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(t4A.Value.A, t4B.A); 565*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(t4A.Value.B, t4B.B); 566*890232f2SAndroid Build Coastguard Worker } 567*890232f2SAndroid Build Coastguard Worker 568*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.TestarrayofstringLength, b.Testarrayofstring.Count); 569*890232f2SAndroid Build Coastguard Worker for (var i = 0; i < a.TestarrayofstringLength; ++i) 570*890232f2SAndroid Build Coastguard Worker { 571*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.Testarrayofstring(i), b.Testarrayofstring[i]); 572*890232f2SAndroid Build Coastguard Worker } 573*890232f2SAndroid Build Coastguard Worker 574*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.Testbool, b.Testbool); 575*890232f2SAndroid Build Coastguard Worker 576*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.TestarrayofboolsLength, b.Testarrayofbools.Count); 577*890232f2SAndroid Build Coastguard Worker for (var i = 0; i < a.TestarrayofboolsLength; ++i) 578*890232f2SAndroid Build Coastguard Worker { 579*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.Testarrayofbools(i), b.Testarrayofbools[i]); 580*890232f2SAndroid Build Coastguard Worker } 581*890232f2SAndroid Build Coastguard Worker 582*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.VectorOfLongsLength, b.VectorOfLongs.Count); 583*890232f2SAndroid Build Coastguard Worker for (var i = 0; i < a.VectorOfLongsLength; ++i) 584*890232f2SAndroid Build Coastguard Worker { 585*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.VectorOfLongs(i), b.VectorOfLongs[i]); 586*890232f2SAndroid Build Coastguard Worker } 587*890232f2SAndroid Build Coastguard Worker 588*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.VectorOfDoublesLength, b.VectorOfDoubles.Count); 589*890232f2SAndroid Build Coastguard Worker for (var i = 0; i < a.VectorOfDoublesLength; ++i) 590*890232f2SAndroid Build Coastguard Worker { 591*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.VectorOfDoubles(i), b.VectorOfDoubles[i]); 592*890232f2SAndroid Build Coastguard Worker } 593*890232f2SAndroid Build Coastguard Worker 594*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.VectorOfEnumsLength, b.VectorOfEnums.Count); 595*890232f2SAndroid Build Coastguard Worker for (var i = 0; i < a.VectorOfEnumsLength; ++i) 596*890232f2SAndroid Build Coastguard Worker { 597*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.VectorOfEnums(i), b.VectorOfEnums[i]); 598*890232f2SAndroid Build Coastguard Worker } 599*890232f2SAndroid Build Coastguard Worker } 600*890232f2SAndroid Build Coastguard Worker AreEqual(Monster a, Monster b)601*890232f2SAndroid Build Coastguard Worker private void AreEqual(Monster a, Monster b) 602*890232f2SAndroid Build Coastguard Worker { 603*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.Hp, b.Hp); 604*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.Mana, b.Mana); 605*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.Name, b.Name); 606*890232f2SAndroid Build Coastguard Worker 607*890232f2SAndroid Build Coastguard Worker var posA = a.Pos; 608*890232f2SAndroid Build Coastguard Worker var posB = b.Pos; 609*890232f2SAndroid Build Coastguard Worker if (posA != null) 610*890232f2SAndroid Build Coastguard Worker { 611*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(posA.Value.X, posB.Value.X); 612*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(posA.Value.Y, posB.Value.Y); 613*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(posA.Value.Z, posB.Value.Z); 614*890232f2SAndroid Build Coastguard Worker 615*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(posA.Value.Test1, posB.Value.Test1); 616*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(posA.Value.Test2, posB.Value.Test2); 617*890232f2SAndroid Build Coastguard Worker var tA = posA.Value.Test3; 618*890232f2SAndroid Build Coastguard Worker var tB = posB.Value.Test3; 619*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(tA.A, tB.A); 620*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(tA.B, tB.B); 621*890232f2SAndroid Build Coastguard Worker } 622*890232f2SAndroid Build Coastguard Worker 623*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.TestType, b.TestType); 624*890232f2SAndroid Build Coastguard Worker if (a.TestType == Any.Monster) 625*890232f2SAndroid Build Coastguard Worker { 626*890232f2SAndroid Build Coastguard Worker var monster2A = a.Test<Monster>().Value; 627*890232f2SAndroid Build Coastguard Worker var monster2B = b.Test<Monster>().Value; 628*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(monster2A.Name, monster2B.Name); 629*890232f2SAndroid Build Coastguard Worker } 630*890232f2SAndroid Build Coastguard Worker 631*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.InventoryLength, b.InventoryLength); 632*890232f2SAndroid Build Coastguard Worker for (var i = 0; i < a.InventoryLength; ++i) 633*890232f2SAndroid Build Coastguard Worker { 634*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.Inventory(i), b.Inventory(i)); 635*890232f2SAndroid Build Coastguard Worker } 636*890232f2SAndroid Build Coastguard Worker 637*890232f2SAndroid Build Coastguard Worker var inventoryArrayA = a.GetInventoryArray(); 638*890232f2SAndroid Build Coastguard Worker var inventoryArrayALength = inventoryArrayA == null ? 0 : inventoryArrayA.Length; 639*890232f2SAndroid Build Coastguard Worker var inventoryArrayB = b.GetInventoryArray(); 640*890232f2SAndroid Build Coastguard Worker var inventoryArrayBLength = inventoryArrayB == null ? 0 : inventoryArrayB.Length; 641*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(inventoryArrayALength, inventoryArrayBLength); 642*890232f2SAndroid Build Coastguard Worker for (var i = 0; i < inventoryArrayALength; ++i) 643*890232f2SAndroid Build Coastguard Worker { 644*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(inventoryArrayA[i], inventoryArrayB[i]); 645*890232f2SAndroid Build Coastguard Worker } 646*890232f2SAndroid Build Coastguard Worker 647*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.Test4Length, b.Test4Length); 648*890232f2SAndroid Build Coastguard Worker for (var i = 0; i < a.Test4Length; ++i) 649*890232f2SAndroid Build Coastguard Worker { 650*890232f2SAndroid Build Coastguard Worker var t4A = a.Test4(i); 651*890232f2SAndroid Build Coastguard Worker var t4B = b.Test4(i); 652*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(t4A.Value.A, t4B.Value.A); 653*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(t4A.Value.B, t4B.Value.B); 654*890232f2SAndroid Build Coastguard Worker } 655*890232f2SAndroid Build Coastguard Worker 656*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.TestarrayofstringLength, b.TestarrayofstringLength); 657*890232f2SAndroid Build Coastguard Worker for (var i = 0; i < a.TestarrayofstringLength; ++i) 658*890232f2SAndroid Build Coastguard Worker { 659*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.Testarrayofstring(i), b.Testarrayofstring(i)); 660*890232f2SAndroid Build Coastguard Worker } 661*890232f2SAndroid Build Coastguard Worker 662*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.Testbool, b.Testbool); 663*890232f2SAndroid Build Coastguard Worker 664*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.TestarrayofboolsLength, b.TestarrayofboolsLength); 665*890232f2SAndroid Build Coastguard Worker for (var i = 0; i < a.TestarrayofboolsLength; ++i) 666*890232f2SAndroid Build Coastguard Worker { 667*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.Testarrayofbools(i), b.Testarrayofbools(i)); 668*890232f2SAndroid Build Coastguard Worker } 669*890232f2SAndroid Build Coastguard Worker 670*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.VectorOfLongsLength, b.VectorOfLongsLength); 671*890232f2SAndroid Build Coastguard Worker for (var i = 0; i < a.VectorOfLongsLength; ++i) 672*890232f2SAndroid Build Coastguard Worker { 673*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.VectorOfLongs(i), b.VectorOfLongs(i)); 674*890232f2SAndroid Build Coastguard Worker } 675*890232f2SAndroid Build Coastguard Worker 676*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.VectorOfDoublesLength, b.VectorOfDoublesLength); 677*890232f2SAndroid Build Coastguard Worker for (var i = 0; i < a.VectorOfDoublesLength; ++i) 678*890232f2SAndroid Build Coastguard Worker { 679*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.VectorOfDoubles(i), b.VectorOfDoubles(i)); 680*890232f2SAndroid Build Coastguard Worker } 681*890232f2SAndroid Build Coastguard Worker 682*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.VectorOfEnumsLength, b.VectorOfEnumsLength); 683*890232f2SAndroid Build Coastguard Worker for (var i = 0; i < a.VectorOfEnumsLength; ++i) 684*890232f2SAndroid Build Coastguard Worker { 685*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.VectorOfEnums(i), b.VectorOfEnums(i)); 686*890232f2SAndroid Build Coastguard Worker } 687*890232f2SAndroid Build Coastguard Worker } 688*890232f2SAndroid Build Coastguard Worker TestObjectAPI(Monster a)689*890232f2SAndroid Build Coastguard Worker private void TestObjectAPI(Monster a) 690*890232f2SAndroid Build Coastguard Worker { 691*890232f2SAndroid Build Coastguard Worker var b = a.UnPack(); 692*890232f2SAndroid Build Coastguard Worker AreEqual(a, b); 693*890232f2SAndroid Build Coastguard Worker 694*890232f2SAndroid Build Coastguard Worker var fbb = new FlatBufferBuilder(1); 695*890232f2SAndroid Build Coastguard Worker fbb.Finish(Monster.Pack(fbb, b).Value); 696*890232f2SAndroid Build Coastguard Worker var c = Monster.GetRootAsMonster(fbb.DataBuffer); 697*890232f2SAndroid Build Coastguard Worker AreEqual(a, c); 698*890232f2SAndroid Build Coastguard Worker 699*890232f2SAndroid Build Coastguard Worker var jsonText = b.SerializeToJson(); 700*890232f2SAndroid Build Coastguard Worker var d = MonsterT.DeserializeFromJson(jsonText); 701*890232f2SAndroid Build Coastguard Worker AreEqual(a, d); 702*890232f2SAndroid Build Coastguard Worker 703*890232f2SAndroid Build Coastguard Worker var fbBuffer = b.SerializeToBinary(); 704*890232f2SAndroid Build Coastguard Worker Assert.IsTrue(Monster.MonsterBufferHasIdentifier(new ByteBuffer(fbBuffer))); 705*890232f2SAndroid Build Coastguard Worker var e = MonsterT.DeserializeFromBinary(fbBuffer); 706*890232f2SAndroid Build Coastguard Worker AreEqual(a, e); 707*890232f2SAndroid Build Coastguard Worker } 708*890232f2SAndroid Build Coastguard Worker AreEqual(ArrayTable a, ArrayTableT b)709*890232f2SAndroid Build Coastguard Worker private void AreEqual(ArrayTable a, ArrayTableT b) 710*890232f2SAndroid Build Coastguard Worker { 711*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.A.Value.A, b.A.A); 712*890232f2SAndroid Build Coastguard Worker 713*890232f2SAndroid Build Coastguard Worker for (int i = 0; i < 15; ++i) 714*890232f2SAndroid Build Coastguard Worker { 715*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.A.Value.B(i), b.A.B[i]); 716*890232f2SAndroid Build Coastguard Worker } 717*890232f2SAndroid Build Coastguard Worker 718*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.A.Value.C, b.A.C); 719*890232f2SAndroid Build Coastguard Worker 720*890232f2SAndroid Build Coastguard Worker for (int i = 0; i < 2; ++i) 721*890232f2SAndroid Build Coastguard Worker { 722*890232f2SAndroid Build Coastguard Worker var ad = a.A.Value.D(i); 723*890232f2SAndroid Build Coastguard Worker var bd = b.A.D[i]; 724*890232f2SAndroid Build Coastguard Worker 725*890232f2SAndroid Build Coastguard Worker for (int j = 0; j < 2; ++j) 726*890232f2SAndroid Build Coastguard Worker { 727*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(ad.A(j), bd.A[j]); 728*890232f2SAndroid Build Coastguard Worker } 729*890232f2SAndroid Build Coastguard Worker 730*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(ad.B, bd.B); 731*890232f2SAndroid Build Coastguard Worker 732*890232f2SAndroid Build Coastguard Worker for (int j = 0; j < 2; ++j) 733*890232f2SAndroid Build Coastguard Worker { 734*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(ad.C(j), bd.C[j]); 735*890232f2SAndroid Build Coastguard Worker } 736*890232f2SAndroid Build Coastguard Worker 737*890232f2SAndroid Build Coastguard Worker for (int j = 0; j < 2; ++j) 738*890232f2SAndroid Build Coastguard Worker { 739*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(ad.D(j), bd.D[j]); 740*890232f2SAndroid Build Coastguard Worker } 741*890232f2SAndroid Build Coastguard Worker } 742*890232f2SAndroid Build Coastguard Worker 743*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.A.Value.E, b.A.E); 744*890232f2SAndroid Build Coastguard Worker 745*890232f2SAndroid Build Coastguard Worker for (int i = 0; i < 2; ++i) 746*890232f2SAndroid Build Coastguard Worker { 747*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.A.Value.F(i), b.A.F[i]); 748*890232f2SAndroid Build Coastguard Worker } 749*890232f2SAndroid Build Coastguard Worker } 750*890232f2SAndroid Build Coastguard Worker AreEqual(ArrayTable a, ArrayTable b)751*890232f2SAndroid Build Coastguard Worker private void AreEqual(ArrayTable a, ArrayTable b) 752*890232f2SAndroid Build Coastguard Worker { 753*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.A.Value.A, b.A.Value.A); 754*890232f2SAndroid Build Coastguard Worker 755*890232f2SAndroid Build Coastguard Worker for (int i = 0; i < 15; ++i) 756*890232f2SAndroid Build Coastguard Worker { 757*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.A.Value.B(i), b.A.Value.B(i)); 758*890232f2SAndroid Build Coastguard Worker } 759*890232f2SAndroid Build Coastguard Worker 760*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.A.Value.C, b.A.Value.C); 761*890232f2SAndroid Build Coastguard Worker 762*890232f2SAndroid Build Coastguard Worker for (int i = 0; i < 2; ++i) 763*890232f2SAndroid Build Coastguard Worker { 764*890232f2SAndroid Build Coastguard Worker var ad = a.A.Value.D(i); 765*890232f2SAndroid Build Coastguard Worker var bd = b.A.Value.D(i); 766*890232f2SAndroid Build Coastguard Worker 767*890232f2SAndroid Build Coastguard Worker for (int j = 0; j < 2; ++j) 768*890232f2SAndroid Build Coastguard Worker { 769*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(ad.A(j), bd.A(j)); 770*890232f2SAndroid Build Coastguard Worker } 771*890232f2SAndroid Build Coastguard Worker 772*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(ad.B, bd.B); 773*890232f2SAndroid Build Coastguard Worker 774*890232f2SAndroid Build Coastguard Worker for (int j = 0; j < 2; ++j) 775*890232f2SAndroid Build Coastguard Worker { 776*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(ad.C(j), bd.C(j)); 777*890232f2SAndroid Build Coastguard Worker } 778*890232f2SAndroid Build Coastguard Worker 779*890232f2SAndroid Build Coastguard Worker for (int j = 0; j < 2; ++j) 780*890232f2SAndroid Build Coastguard Worker { 781*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(ad.D(j), bd.D(j)); 782*890232f2SAndroid Build Coastguard Worker } 783*890232f2SAndroid Build Coastguard Worker } 784*890232f2SAndroid Build Coastguard Worker 785*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.A.Value.E, b.A.Value.E); 786*890232f2SAndroid Build Coastguard Worker 787*890232f2SAndroid Build Coastguard Worker for (int i = 0; i < 2; ++i) 788*890232f2SAndroid Build Coastguard Worker { 789*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.A.Value.F(i), b.A.Value.F(i)); 790*890232f2SAndroid Build Coastguard Worker } 791*890232f2SAndroid Build Coastguard Worker } 792*890232f2SAndroid Build Coastguard Worker TestObjectAPI(ArrayTable a)793*890232f2SAndroid Build Coastguard Worker private void TestObjectAPI(ArrayTable a) 794*890232f2SAndroid Build Coastguard Worker { 795*890232f2SAndroid Build Coastguard Worker var b = a.UnPack(); 796*890232f2SAndroid Build Coastguard Worker AreEqual(a, b); 797*890232f2SAndroid Build Coastguard Worker 798*890232f2SAndroid Build Coastguard Worker var fbb = new FlatBufferBuilder(1); 799*890232f2SAndroid Build Coastguard Worker fbb.Finish(ArrayTable.Pack(fbb, b).Value); 800*890232f2SAndroid Build Coastguard Worker var c = ArrayTable.GetRootAsArrayTable(fbb.DataBuffer); 801*890232f2SAndroid Build Coastguard Worker AreEqual(a, c); 802*890232f2SAndroid Build Coastguard Worker 803*890232f2SAndroid Build Coastguard Worker var jsonText = b.SerializeToJson(); 804*890232f2SAndroid Build Coastguard Worker var d = ArrayTableT.DeserializeFromJson(jsonText); 805*890232f2SAndroid Build Coastguard Worker AreEqual(a, d); 806*890232f2SAndroid Build Coastguard Worker 807*890232f2SAndroid Build Coastguard Worker var fbBuffer = b.SerializeToBinary(); 808*890232f2SAndroid Build Coastguard Worker Assert.IsTrue(ArrayTable.ArrayTableBufferHasIdentifier(new ByteBuffer(fbBuffer))); 809*890232f2SAndroid Build Coastguard Worker var e = ArrayTableT.DeserializeFromBinary(fbBuffer); 810*890232f2SAndroid Build Coastguard Worker AreEqual(a, e); 811*890232f2SAndroid Build Coastguard Worker } 812*890232f2SAndroid Build Coastguard Worker AreEqual(Movie a, MovieT b)813*890232f2SAndroid Build Coastguard Worker private void AreEqual(Movie a, MovieT b) 814*890232f2SAndroid Build Coastguard Worker { 815*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.MainCharacterType, b.MainCharacter.Type); 816*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.MainCharacter<Rapunzel>().Value.HairLength, b.MainCharacter.AsRapunzel().HairLength); 817*890232f2SAndroid Build Coastguard Worker 818*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.CharactersLength, b.Characters.Count); 819*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.CharactersType(0), b.Characters[0].Type); 820*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.Characters<Attacker>(0).Value.SwordAttackDamage, b.Characters[0].AsMuLan().SwordAttackDamage); 821*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.CharactersType(1), b.Characters[1].Type); 822*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.Characters<BookReader>(1).Value.BooksRead, b.Characters[1].AsBelle().BooksRead); 823*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.CharactersType(2), b.Characters[2].Type); 824*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.CharactersAsString(2), b.Characters[2].AsOther()); 825*890232f2SAndroid Build Coastguard Worker } 826*890232f2SAndroid Build Coastguard Worker AreEqual(Movie a, Movie b)827*890232f2SAndroid Build Coastguard Worker private void AreEqual(Movie a, Movie b) 828*890232f2SAndroid Build Coastguard Worker { 829*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.MainCharacterType, b.MainCharacterType); 830*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.MainCharacter<Rapunzel>().Value.HairLength, b.MainCharacter<Rapunzel>().Value.HairLength); 831*890232f2SAndroid Build Coastguard Worker 832*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.CharactersLength, b.CharactersLength); 833*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.CharactersType(0), b.CharactersType(0)); 834*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.Characters<Attacker>(0).Value.SwordAttackDamage, b.Characters<Attacker>(0).Value.SwordAttackDamage); 835*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.CharactersType(1), b.CharactersType(1)); 836*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.Characters<BookReader>(1).Value.BooksRead, b.Characters<BookReader>(1).Value.BooksRead); 837*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.CharactersType(2), b.CharactersType(2)); 838*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(a.CharactersAsString(2), b.CharactersAsString(2)); 839*890232f2SAndroid Build Coastguard Worker } 840*890232f2SAndroid Build Coastguard Worker TestObjectAPI(Movie a)841*890232f2SAndroid Build Coastguard Worker private void TestObjectAPI(Movie a) 842*890232f2SAndroid Build Coastguard Worker { 843*890232f2SAndroid Build Coastguard Worker var b = a.UnPack(); 844*890232f2SAndroid Build Coastguard Worker AreEqual(a, b); 845*890232f2SAndroid Build Coastguard Worker 846*890232f2SAndroid Build Coastguard Worker var fbb = new FlatBufferBuilder(1); 847*890232f2SAndroid Build Coastguard Worker fbb.Finish(Movie.Pack(fbb, b).Value); 848*890232f2SAndroid Build Coastguard Worker var c = Movie.GetRootAsMovie(fbb.DataBuffer); 849*890232f2SAndroid Build Coastguard Worker AreEqual(a, c); 850*890232f2SAndroid Build Coastguard Worker 851*890232f2SAndroid Build Coastguard Worker var jsonText = b.SerializeToJson(); 852*890232f2SAndroid Build Coastguard Worker var d = MovieT.DeserializeFromJson(jsonText); 853*890232f2SAndroid Build Coastguard Worker AreEqual(a, d); 854*890232f2SAndroid Build Coastguard Worker 855*890232f2SAndroid Build Coastguard Worker var fbBuffer = b.SerializeToBinary(); 856*890232f2SAndroid Build Coastguard Worker Assert.IsTrue(Movie.MovieBufferHasIdentifier(new ByteBuffer(fbBuffer))); 857*890232f2SAndroid Build Coastguard Worker var e = MovieT.DeserializeFromBinary(fbBuffer); 858*890232f2SAndroid Build Coastguard Worker AreEqual(a, e); 859*890232f2SAndroid Build Coastguard Worker } 860*890232f2SAndroid Build Coastguard Worker 861*890232f2SAndroid Build Coastguard Worker // For use in TestParallelAccess test case. 862*890232f2SAndroid Build Coastguard Worker static private int _comparisons = 0; 863*890232f2SAndroid Build Coastguard Worker static private int _failures = 0; KeepComparing(Monster mon, int count, float floatValue, double doubleValue)864*890232f2SAndroid Build Coastguard Worker static private void KeepComparing(Monster mon, int count, float floatValue, double doubleValue) 865*890232f2SAndroid Build Coastguard Worker { 866*890232f2SAndroid Build Coastguard Worker int i = 0; 867*890232f2SAndroid Build Coastguard Worker while (++i <= count) 868*890232f2SAndroid Build Coastguard Worker { 869*890232f2SAndroid Build Coastguard Worker Interlocked.Add(ref _comparisons, 1); 870*890232f2SAndroid Build Coastguard Worker if(mon.Pos.Value.Test1 != doubleValue || mon.Pos.Value.Z != floatValue) { 871*890232f2SAndroid Build Coastguard Worker Interlocked.Add(ref _failures, 1); 872*890232f2SAndroid Build Coastguard Worker } 873*890232f2SAndroid Build Coastguard Worker } 874*890232f2SAndroid Build Coastguard Worker } 875*890232f2SAndroid Build Coastguard Worker 876*890232f2SAndroid Build Coastguard Worker [FlatBuffersTestMethod] TestParallelAccess()877*890232f2SAndroid Build Coastguard Worker public void TestParallelAccess() { 878*890232f2SAndroid Build Coastguard Worker // Tests that reading from a flatbuffer over multiple threads is thread-safe in regard to double and float 879*890232f2SAndroid Build Coastguard Worker // values, since they previously were non-thread safe 880*890232f2SAndroid Build Coastguard Worker const float floatValue = 3.141592F; 881*890232f2SAndroid Build Coastguard Worker const double doubleValue = 1.618033988; 882*890232f2SAndroid Build Coastguard Worker 883*890232f2SAndroid Build Coastguard Worker var fbb = new FlatBufferBuilder(1); 884*890232f2SAndroid Build Coastguard Worker var str = fbb.CreateString("ParallelTest"); 885*890232f2SAndroid Build Coastguard Worker Monster.StartMonster(fbb); 886*890232f2SAndroid Build Coastguard Worker Monster.AddPos(fbb, Vec3.CreateVec3(fbb, 1.0f, 2.0f, floatValue, doubleValue, 887*890232f2SAndroid Build Coastguard Worker Color.Green, (short)5, (sbyte)6)); 888*890232f2SAndroid Build Coastguard Worker 889*890232f2SAndroid Build Coastguard Worker Monster.AddName(fbb, str); 890*890232f2SAndroid Build Coastguard Worker Monster.FinishMonsterBuffer(fbb, Monster.EndMonster(fbb)); 891*890232f2SAndroid Build Coastguard Worker 892*890232f2SAndroid Build Coastguard Worker var mon = Monster.GetRootAsMonster(fbb.DataBuffer); 893*890232f2SAndroid Build Coastguard Worker 894*890232f2SAndroid Build Coastguard Worker var pos = mon.Pos.Value; 895*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(pos.Test1, doubleValue); 896*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(pos.Z, floatValue); 897*890232f2SAndroid Build Coastguard Worker 898*890232f2SAndroid Build Coastguard Worker const int thread_count = 10; 899*890232f2SAndroid Build Coastguard Worker const int reps = 1000000; 900*890232f2SAndroid Build Coastguard Worker 901*890232f2SAndroid Build Coastguard Worker // Need to use raw Threads since Tasks are not supported in .NET 3.5 902*890232f2SAndroid Build Coastguard Worker Thread[] threads = new Thread[thread_count]; 903*890232f2SAndroid Build Coastguard Worker for(int i = 0; i < thread_count; i++) { 904*890232f2SAndroid Build Coastguard Worker threads[i] = new Thread(() => KeepComparing(mon, reps, floatValue, doubleValue)); 905*890232f2SAndroid Build Coastguard Worker } 906*890232f2SAndroid Build Coastguard Worker for(int i = 0; i < thread_count; i++) { 907*890232f2SAndroid Build Coastguard Worker threads[i].Start(); 908*890232f2SAndroid Build Coastguard Worker } 909*890232f2SAndroid Build Coastguard Worker for(int i = 0; i < thread_count; i++) { 910*890232f2SAndroid Build Coastguard Worker threads[i].Join(); 911*890232f2SAndroid Build Coastguard Worker } 912*890232f2SAndroid Build Coastguard Worker 913*890232f2SAndroid Build Coastguard Worker // Make sure the threads actually did the comparisons. 914*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(thread_count * reps, _comparisons); 915*890232f2SAndroid Build Coastguard Worker 916*890232f2SAndroid Build Coastguard Worker // Make sure we never read the values incorrectly. 917*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(0, _failures); 918*890232f2SAndroid Build Coastguard Worker } 919*890232f2SAndroid Build Coastguard Worker 920*890232f2SAndroid Build Coastguard Worker [FlatBuffersTestMethod] TestScalarOptional_EmptyBuffer()921*890232f2SAndroid Build Coastguard Worker public void TestScalarOptional_EmptyBuffer() { 922*890232f2SAndroid Build Coastguard Worker var fbb = new FlatBufferBuilder(1); 923*890232f2SAndroid Build Coastguard Worker ScalarStuff.StartScalarStuff(fbb); 924*890232f2SAndroid Build Coastguard Worker var offset = ScalarStuff.EndScalarStuff(fbb); 925*890232f2SAndroid Build Coastguard Worker ScalarStuff.FinishScalarStuffBuffer(fbb, offset); 926*890232f2SAndroid Build Coastguard Worker 927*890232f2SAndroid Build Coastguard Worker ScalarStuff scalarStuff = ScalarStuff.GetRootAsScalarStuff(fbb.DataBuffer); 928*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((sbyte)0, scalarStuff.JustI8); 929*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(null, scalarStuff.MaybeI8); 930*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((sbyte)42, scalarStuff.DefaultI8); 931*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((byte)0, scalarStuff.JustU8); 932*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(null, scalarStuff.MaybeU8); 933*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((byte)42, scalarStuff.DefaultU8); 934*890232f2SAndroid Build Coastguard Worker 935*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((short)0, scalarStuff.JustI16); 936*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(null, scalarStuff.MaybeI16); 937*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((short)42, scalarStuff.DefaultI16); 938*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((ushort)0, scalarStuff.JustU16); 939*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(null, scalarStuff.MaybeU16); 940*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((ushort)42, scalarStuff.DefaultU16); 941*890232f2SAndroid Build Coastguard Worker 942*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((int)0, scalarStuff.JustI32); 943*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(null, scalarStuff.MaybeI32); 944*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((int)42, scalarStuff.DefaultI32); 945*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((uint)0, scalarStuff.JustU32); 946*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(null, scalarStuff.MaybeU32); 947*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((uint)42, scalarStuff.DefaultU32); 948*890232f2SAndroid Build Coastguard Worker 949*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((long)0, scalarStuff.JustI64); 950*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(null, scalarStuff.MaybeI64); 951*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((long)42, scalarStuff.DefaultI64); 952*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((ulong)0, scalarStuff.JustU64); 953*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(null, scalarStuff.MaybeU64); 954*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((ulong)42, scalarStuff.DefaultU64); 955*890232f2SAndroid Build Coastguard Worker 956*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((float)0.0F, scalarStuff.JustF32); 957*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(null, scalarStuff.MaybeF32); 958*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((float)42.0F, scalarStuff.DefaultF32); 959*890232f2SAndroid Build Coastguard Worker 960*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((double)0.0, scalarStuff.JustF64); 961*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(null, scalarStuff.MaybeF64); 962*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((double)42.0, scalarStuff.DefaultF64); 963*890232f2SAndroid Build Coastguard Worker 964*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(false, scalarStuff.JustBool); 965*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(null, scalarStuff.MaybeBool); 966*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(true, scalarStuff.DefaultBool); 967*890232f2SAndroid Build Coastguard Worker 968*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(OptionalByte.None, scalarStuff.JustEnum); 969*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(null, scalarStuff.MaybeEnum); 970*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(OptionalByte.One, scalarStuff.DefaultEnum); 971*890232f2SAndroid Build Coastguard Worker } 972*890232f2SAndroid Build Coastguard Worker 973*890232f2SAndroid Build Coastguard Worker [FlatBuffersTestMethod] TestScalarOptional_Construction()974*890232f2SAndroid Build Coastguard Worker public void TestScalarOptional_Construction() { 975*890232f2SAndroid Build Coastguard Worker var fbb = new FlatBufferBuilder(1); 976*890232f2SAndroid Build Coastguard Worker ScalarStuff.StartScalarStuff(fbb); 977*890232f2SAndroid Build Coastguard Worker ScalarStuff.AddJustI8(fbb, 5); 978*890232f2SAndroid Build Coastguard Worker ScalarStuff.AddMaybeI8(fbb, 5); 979*890232f2SAndroid Build Coastguard Worker ScalarStuff.AddDefaultI8(fbb, 5); 980*890232f2SAndroid Build Coastguard Worker ScalarStuff.AddJustU8(fbb, 6); 981*890232f2SAndroid Build Coastguard Worker ScalarStuff.AddMaybeU8(fbb, 6); 982*890232f2SAndroid Build Coastguard Worker ScalarStuff.AddDefaultU8(fbb, 6); 983*890232f2SAndroid Build Coastguard Worker 984*890232f2SAndroid Build Coastguard Worker ScalarStuff.AddJustI16(fbb, 7); 985*890232f2SAndroid Build Coastguard Worker ScalarStuff.AddMaybeI16(fbb, 7); 986*890232f2SAndroid Build Coastguard Worker ScalarStuff.AddDefaultI16(fbb, 7); 987*890232f2SAndroid Build Coastguard Worker ScalarStuff.AddJustU16(fbb, 8); 988*890232f2SAndroid Build Coastguard Worker ScalarStuff.AddMaybeU16(fbb, 8); 989*890232f2SAndroid Build Coastguard Worker ScalarStuff.AddDefaultU16(fbb, 8); 990*890232f2SAndroid Build Coastguard Worker 991*890232f2SAndroid Build Coastguard Worker ScalarStuff.AddJustI32(fbb, 9); 992*890232f2SAndroid Build Coastguard Worker ScalarStuff.AddMaybeI32(fbb, 9); 993*890232f2SAndroid Build Coastguard Worker ScalarStuff.AddDefaultI32(fbb, 9); 994*890232f2SAndroid Build Coastguard Worker ScalarStuff.AddJustU32(fbb, 10); 995*890232f2SAndroid Build Coastguard Worker ScalarStuff.AddMaybeU32(fbb, 10); 996*890232f2SAndroid Build Coastguard Worker ScalarStuff.AddDefaultU32(fbb, 10); 997*890232f2SAndroid Build Coastguard Worker 998*890232f2SAndroid Build Coastguard Worker ScalarStuff.AddJustI64(fbb, 11); 999*890232f2SAndroid Build Coastguard Worker ScalarStuff.AddMaybeI64(fbb, 11); 1000*890232f2SAndroid Build Coastguard Worker ScalarStuff.AddDefaultI64(fbb, 11); 1001*890232f2SAndroid Build Coastguard Worker ScalarStuff.AddJustU64(fbb, 12); 1002*890232f2SAndroid Build Coastguard Worker ScalarStuff.AddMaybeU64(fbb, 12); 1003*890232f2SAndroid Build Coastguard Worker ScalarStuff.AddDefaultU64(fbb, 12); 1004*890232f2SAndroid Build Coastguard Worker 1005*890232f2SAndroid Build Coastguard Worker ScalarStuff.AddJustF32(fbb, 13.0f); 1006*890232f2SAndroid Build Coastguard Worker ScalarStuff.AddMaybeF32(fbb, 13.0f); 1007*890232f2SAndroid Build Coastguard Worker ScalarStuff.AddDefaultF32(fbb, 13.0f); 1008*890232f2SAndroid Build Coastguard Worker ScalarStuff.AddJustF64(fbb, 14.0); 1009*890232f2SAndroid Build Coastguard Worker ScalarStuff.AddMaybeF64(fbb, 14.0); 1010*890232f2SAndroid Build Coastguard Worker ScalarStuff.AddDefaultF64(fbb, 14.0); 1011*890232f2SAndroid Build Coastguard Worker 1012*890232f2SAndroid Build Coastguard Worker ScalarStuff.AddJustBool(fbb, true); 1013*890232f2SAndroid Build Coastguard Worker ScalarStuff.AddMaybeBool(fbb, true); 1014*890232f2SAndroid Build Coastguard Worker ScalarStuff.AddDefaultBool(fbb, false); // note this is the opposite 1015*890232f2SAndroid Build Coastguard Worker 1016*890232f2SAndroid Build Coastguard Worker ScalarStuff.AddJustEnum(fbb, OptionalByte.Two); 1017*890232f2SAndroid Build Coastguard Worker ScalarStuff.AddMaybeEnum(fbb, OptionalByte.Two); 1018*890232f2SAndroid Build Coastguard Worker ScalarStuff.AddDefaultEnum(fbb, OptionalByte.Two); 1019*890232f2SAndroid Build Coastguard Worker 1020*890232f2SAndroid Build Coastguard Worker var offset = ScalarStuff.EndScalarStuff(fbb); 1021*890232f2SAndroid Build Coastguard Worker ScalarStuff.FinishScalarStuffBuffer(fbb, offset); 1022*890232f2SAndroid Build Coastguard Worker 1023*890232f2SAndroid Build Coastguard Worker ScalarStuff scalarStuff = ScalarStuff.GetRootAsScalarStuff(fbb.DataBuffer); 1024*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((sbyte)5, scalarStuff.JustI8); 1025*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((sbyte)5, scalarStuff.MaybeI8); 1026*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((sbyte)5, scalarStuff.DefaultI8); 1027*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((byte)6, scalarStuff.JustU8); 1028*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((byte)6, scalarStuff.MaybeU8); 1029*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((byte)6, scalarStuff.DefaultU8); 1030*890232f2SAndroid Build Coastguard Worker 1031*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((short)7, scalarStuff.JustI16); 1032*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((short)7, scalarStuff.MaybeI16); 1033*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((short)7, scalarStuff.DefaultI16); 1034*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((ushort)8, scalarStuff.JustU16); 1035*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((ushort)8, scalarStuff.MaybeU16); 1036*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((ushort)8, scalarStuff.DefaultU16); 1037*890232f2SAndroid Build Coastguard Worker 1038*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((int)9, scalarStuff.JustI32); 1039*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((int)9, scalarStuff.MaybeI32); 1040*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((int)9, scalarStuff.DefaultI32); 1041*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((uint)10, scalarStuff.JustU32); 1042*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((uint)10, scalarStuff.MaybeU32); 1043*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((uint)10, scalarStuff.DefaultU32); 1044*890232f2SAndroid Build Coastguard Worker 1045*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((long)11, scalarStuff.JustI64); 1046*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((long)11, scalarStuff.MaybeI64); 1047*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((long)11, scalarStuff.DefaultI64); 1048*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((ulong)12, scalarStuff.JustU64); 1049*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((ulong)12, scalarStuff.MaybeU64); 1050*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((ulong)12, scalarStuff.DefaultU64); 1051*890232f2SAndroid Build Coastguard Worker 1052*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((float)13.0F, scalarStuff.JustF32); 1053*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((float)13.0F, scalarStuff.MaybeF32); 1054*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((float)13.0F, scalarStuff.DefaultF32); 1055*890232f2SAndroid Build Coastguard Worker 1056*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((double)14.0, scalarStuff.JustF64); 1057*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((double)14.0, scalarStuff.MaybeF64); 1058*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((double)14.0, scalarStuff.DefaultF64); 1059*890232f2SAndroid Build Coastguard Worker 1060*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(true, scalarStuff.JustBool); 1061*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(true, scalarStuff.MaybeBool); 1062*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(false, scalarStuff.DefaultBool); 1063*890232f2SAndroid Build Coastguard Worker 1064*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(OptionalByte.Two, scalarStuff.JustEnum); 1065*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(OptionalByte.Two, scalarStuff.MaybeEnum); 1066*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(OptionalByte.Two, scalarStuff.DefaultEnum); 1067*890232f2SAndroid Build Coastguard Worker } 1068*890232f2SAndroid Build Coastguard Worker 1069*890232f2SAndroid Build Coastguard Worker [FlatBuffersTestMethod] TestScalarOptional_Construction_CreatorMethod()1070*890232f2SAndroid Build Coastguard Worker public void TestScalarOptional_Construction_CreatorMethod() { 1071*890232f2SAndroid Build Coastguard Worker var fbb = new FlatBufferBuilder(1); 1072*890232f2SAndroid Build Coastguard Worker 1073*890232f2SAndroid Build Coastguard Worker var offset = ScalarStuff.CreateScalarStuff(fbb,5,5,5,6,6,6,7,7,7, 1074*890232f2SAndroid Build Coastguard Worker 8,8,8,9,9,9,10,10,10,11,11,11,12,12,12,13.0f,13.0f,13.0f,14.0, 1075*890232f2SAndroid Build Coastguard Worker 14.0,14.0,true,true,false,OptionalByte.Two,OptionalByte.Two, 1076*890232f2SAndroid Build Coastguard Worker OptionalByte.Two); 1077*890232f2SAndroid Build Coastguard Worker ScalarStuff.FinishScalarStuffBuffer(fbb, offset); 1078*890232f2SAndroid Build Coastguard Worker 1079*890232f2SAndroid Build Coastguard Worker ScalarStuff scalarStuff = ScalarStuff.GetRootAsScalarStuff(fbb.DataBuffer); 1080*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((sbyte)5, scalarStuff.JustI8); 1081*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((sbyte)5, scalarStuff.MaybeI8); 1082*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((sbyte)5, scalarStuff.DefaultI8); 1083*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((byte)6, scalarStuff.JustU8); 1084*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((byte)6, scalarStuff.MaybeU8); 1085*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((byte)6, scalarStuff.DefaultU8); 1086*890232f2SAndroid Build Coastguard Worker 1087*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((short)7, scalarStuff.JustI16); 1088*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((short)7, scalarStuff.MaybeI16); 1089*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((short)7, scalarStuff.DefaultI16); 1090*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((ushort)8, scalarStuff.JustU16); 1091*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((ushort)8, scalarStuff.MaybeU16); 1092*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((ushort)8, scalarStuff.DefaultU16); 1093*890232f2SAndroid Build Coastguard Worker 1094*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((int)9, scalarStuff.JustI32); 1095*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((int)9, scalarStuff.MaybeI32); 1096*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((int)9, scalarStuff.DefaultI32); 1097*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((uint)10, scalarStuff.JustU32); 1098*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((uint)10, scalarStuff.MaybeU32); 1099*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((uint)10, scalarStuff.DefaultU32); 1100*890232f2SAndroid Build Coastguard Worker 1101*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((long)11, scalarStuff.JustI64); 1102*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((long)11, scalarStuff.MaybeI64); 1103*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((long)11, scalarStuff.DefaultI64); 1104*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((ulong)12, scalarStuff.JustU64); 1105*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((ulong)12, scalarStuff.MaybeU64); 1106*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((ulong)12, scalarStuff.DefaultU64); 1107*890232f2SAndroid Build Coastguard Worker 1108*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((float)13.0F, scalarStuff.JustF32); 1109*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((float)13.0F, scalarStuff.MaybeF32); 1110*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((float)13.0F, scalarStuff.DefaultF32); 1111*890232f2SAndroid Build Coastguard Worker 1112*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((double)14.0, scalarStuff.JustF64); 1113*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((double)14.0, scalarStuff.MaybeF64); 1114*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((double)14.0, scalarStuff.DefaultF64); 1115*890232f2SAndroid Build Coastguard Worker 1116*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(true, scalarStuff.JustBool); 1117*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(true, scalarStuff.MaybeBool); 1118*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(false, scalarStuff.DefaultBool); 1119*890232f2SAndroid Build Coastguard Worker 1120*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(OptionalByte.Two, scalarStuff.JustEnum); 1121*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(OptionalByte.Two, scalarStuff.MaybeEnum); 1122*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(OptionalByte.Two, scalarStuff.DefaultEnum); 1123*890232f2SAndroid Build Coastguard Worker } 1124*890232f2SAndroid Build Coastguard Worker 1125*890232f2SAndroid Build Coastguard Worker 1126*890232f2SAndroid Build Coastguard Worker [FlatBuffersTestMethod] TestKeywordEscaping()1127*890232f2SAndroid Build Coastguard Worker public void TestKeywordEscaping() { 1128*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((int)KeywordTest.@public.NONE, 0); 1129*890232f2SAndroid Build Coastguard Worker 1130*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((int)KeywordTest.ABC.@void, 0); 1131*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((int)KeywordTest.ABC.where, 1); 1132*890232f2SAndroid Build Coastguard Worker Assert.AreEqual((int)KeywordTest.ABC.@stackalloc, 2); 1133*890232f2SAndroid Build Coastguard Worker 1134*890232f2SAndroid Build Coastguard Worker var fbb = new FlatBufferBuilder(1); 1135*890232f2SAndroid Build Coastguard Worker var offset = KeywordsInTable.CreateKeywordsInTable( 1136*890232f2SAndroid Build Coastguard Worker fbb, KeywordTest.ABC.@stackalloc, KeywordTest.@public.NONE); 1137*890232f2SAndroid Build Coastguard Worker fbb.Finish(offset.Value); 1138*890232f2SAndroid Build Coastguard Worker 1139*890232f2SAndroid Build Coastguard Worker KeywordsInTable keywordsInTable = 1140*890232f2SAndroid Build Coastguard Worker KeywordsInTable.GetRootAsKeywordsInTable(fbb.DataBuffer); 1141*890232f2SAndroid Build Coastguard Worker 1142*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(keywordsInTable.Is, KeywordTest.ABC.@stackalloc); 1143*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(keywordsInTable.Private, KeywordTest.@public.NONE); 1144*890232f2SAndroid Build Coastguard Worker } 1145*890232f2SAndroid Build Coastguard Worker 1146*890232f2SAndroid Build Coastguard Worker 1147*890232f2SAndroid Build Coastguard Worker [FlatBuffersTestMethod] AddOptionalEnum_WhenPassNull_ShouldWorkProperly()1148*890232f2SAndroid Build Coastguard Worker public void AddOptionalEnum_WhenPassNull_ShouldWorkProperly() { 1149*890232f2SAndroid Build Coastguard Worker var fbb = new FlatBufferBuilder(1); 1150*890232f2SAndroid Build Coastguard Worker ScalarStuff.StartScalarStuff(fbb); 1151*890232f2SAndroid Build Coastguard Worker ScalarStuff.AddMaybeEnum(fbb, null); 1152*890232f2SAndroid Build Coastguard Worker var offset = ScalarStuff.EndScalarStuff(fbb); 1153*890232f2SAndroid Build Coastguard Worker ScalarStuff.FinishScalarStuffBuffer(fbb, offset); 1154*890232f2SAndroid Build Coastguard Worker 1155*890232f2SAndroid Build Coastguard Worker ScalarStuff scalarStuff = ScalarStuff.GetRootAsScalarStuff(fbb.DataBuffer); 1156*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(null, scalarStuff.MaybeEnum); 1157*890232f2SAndroid Build Coastguard Worker } 1158*890232f2SAndroid Build Coastguard Worker 1159*890232f2SAndroid Build Coastguard Worker 1160*890232f2SAndroid Build Coastguard Worker [FlatBuffersTestMethod] SortKey_WithDefaultedValue_IsFindable()1161*890232f2SAndroid Build Coastguard Worker public void SortKey_WithDefaultedValue_IsFindable() { 1162*890232f2SAndroid Build Coastguard Worker // This checks if using the `key` attribute that includes the 1163*890232f2SAndroid Build Coastguard Worker // default value (e.g., 0) is still searchable. This is a regression 1164*890232f2SAndroid Build Coastguard Worker // test for https://github.com/google/flatbuffers/issues/7380. 1165*890232f2SAndroid Build Coastguard Worker var fbb = new FlatBufferBuilder(1); 1166*890232f2SAndroid Build Coastguard Worker 1167*890232f2SAndroid Build Coastguard Worker // Create a vector of Stat objects, with Count being the key. 1168*890232f2SAndroid Build Coastguard Worker var stat_offsets = new Offset<Stat>[4]; 1169*890232f2SAndroid Build Coastguard Worker for(ushort i = 0; i < stat_offsets.Length; i++) { 1170*890232f2SAndroid Build Coastguard Worker Stat.StartStat(fbb); 1171*890232f2SAndroid Build Coastguard Worker Stat.AddCount(fbb, i); 1172*890232f2SAndroid Build Coastguard Worker stat_offsets[stat_offsets.Length - 1 - i] = Stat.EndStat(fbb); 1173*890232f2SAndroid Build Coastguard Worker } 1174*890232f2SAndroid Build Coastguard Worker 1175*890232f2SAndroid Build Coastguard Worker // Ensure the sort works. 1176*890232f2SAndroid Build Coastguard Worker var sort = Stat.CreateSortedVectorOfStat(fbb, stat_offsets); 1177*890232f2SAndroid Build Coastguard Worker 1178*890232f2SAndroid Build Coastguard Worker // Create the monster with the sorted vector of Stat objects. 1179*890232f2SAndroid Build Coastguard Worker var str = fbb.CreateString("MyMonster"); 1180*890232f2SAndroid Build Coastguard Worker Monster.StartMonster(fbb); 1181*890232f2SAndroid Build Coastguard Worker Monster.AddName(fbb, str); 1182*890232f2SAndroid Build Coastguard Worker Monster.AddScalarKeySortedTables(fbb, sort); 1183*890232f2SAndroid Build Coastguard Worker fbb.Finish(Monster.EndMonster(fbb).Value); 1184*890232f2SAndroid Build Coastguard Worker 1185*890232f2SAndroid Build Coastguard Worker // Get the monster. 1186*890232f2SAndroid Build Coastguard Worker var monster = Monster.GetRootAsMonster(fbb.DataBuffer); 1187*890232f2SAndroid Build Coastguard Worker 1188*890232f2SAndroid Build Coastguard Worker // Ensure each key is findable. 1189*890232f2SAndroid Build Coastguard Worker for(ushort i =0 ; i < stat_offsets.Length; i++) { 1190*890232f2SAndroid Build Coastguard Worker Assert.IsTrue(monster.ScalarKeySortedTablesByKey(i) != null); 1191*890232f2SAndroid Build Coastguard Worker Assert.AreEqual(monster.ScalarKeySortedTablesByKey(i).Value.Count, i); 1192*890232f2SAndroid Build Coastguard Worker } 1193*890232f2SAndroid Build Coastguard Worker } 1194*890232f2SAndroid Build Coastguard Worker } 1195*890232f2SAndroid Build Coastguard Worker } 1196