1*890232f2SAndroid Build Coastguard Worker# coding=utf-8 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 Workerimport os.path 17*890232f2SAndroid Build Coastguard Workerimport sys 18*890232f2SAndroid Build Coastguard Workerimport imp 19*890232f2SAndroid Build Coastguard WorkerPY_VERSION = sys.version_info[:2] 20*890232f2SAndroid Build Coastguard Worker 21*890232f2SAndroid Build Coastguard Workerimport ctypes 22*890232f2SAndroid Build Coastguard Workerfrom collections import defaultdict 23*890232f2SAndroid Build Coastguard Workerimport math 24*890232f2SAndroid Build Coastguard Workerimport random 25*890232f2SAndroid Build Coastguard Workerimport timeit 26*890232f2SAndroid Build Coastguard Workerimport unittest 27*890232f2SAndroid Build Coastguard Worker 28*890232f2SAndroid Build Coastguard Workerfrom flatbuffers import compat 29*890232f2SAndroid Build Coastguard Workerfrom flatbuffers import util 30*890232f2SAndroid Build Coastguard Workerfrom flatbuffers.compat import range_func as compat_range 31*890232f2SAndroid Build Coastguard Workerfrom flatbuffers.compat import NumpyRequiredForThisFeature 32*890232f2SAndroid Build Coastguard Worker 33*890232f2SAndroid Build Coastguard Workerimport flatbuffers 34*890232f2SAndroid Build Coastguard Workerfrom flatbuffers import number_types as N 35*890232f2SAndroid Build Coastguard Worker 36*890232f2SAndroid Build Coastguard Workerimport MyGame # refers to generated code 37*890232f2SAndroid Build Coastguard Workerimport MyGame.Example # refers to generated code 38*890232f2SAndroid Build Coastguard Workerimport MyGame.Example.Any # refers to generated code 39*890232f2SAndroid Build Coastguard Workerimport MyGame.Example.Color # refers to generated code 40*890232f2SAndroid Build Coastguard Workerimport MyGame.Example.Monster # refers to generated code 41*890232f2SAndroid Build Coastguard Workerimport MyGame.Example.Test # refers to generated code 42*890232f2SAndroid Build Coastguard Workerimport MyGame.Example.Stat # refers to generated code 43*890232f2SAndroid Build Coastguard Workerimport MyGame.Example.Vec3 # refers to generated code 44*890232f2SAndroid Build Coastguard Workerimport MyGame.MonsterExtra # refers to generated code 45*890232f2SAndroid Build Coastguard Workerimport MyGame.InParentNamespace # refers to generated code 46*890232f2SAndroid Build Coastguard Workerimport MyGame.Example.ArrayTable # refers to generated code 47*890232f2SAndroid Build Coastguard Workerimport MyGame.Example.ArrayStruct # refers to generated code 48*890232f2SAndroid Build Coastguard Workerimport MyGame.Example.NestedStruct # refers to generated code 49*890232f2SAndroid Build Coastguard Workerimport MyGame.Example.TestEnum # refers to generated code 50*890232f2SAndroid Build Coastguard Workerimport monster_test_generated # the one-file version 51*890232f2SAndroid Build Coastguard Workerimport optional_scalars 52*890232f2SAndroid Build Coastguard Workerimport optional_scalars.ScalarStuff 53*890232f2SAndroid Build Coastguard Worker 54*890232f2SAndroid Build Coastguard Worker 55*890232f2SAndroid Build Coastguard Workerdef create_namespace_shortcut(is_onefile): 56*890232f2SAndroid Build Coastguard Worker # Create shortcut from either the one-file format or the multi-file format 57*890232f2SAndroid Build Coastguard Worker global _ANY 58*890232f2SAndroid Build Coastguard Worker global _COLOR 59*890232f2SAndroid Build Coastguard Worker global _MONSTER 60*890232f2SAndroid Build Coastguard Worker global _TEST 61*890232f2SAndroid Build Coastguard Worker global _STAT 62*890232f2SAndroid Build Coastguard Worker global _VEC3 63*890232f2SAndroid Build Coastguard Worker global _IN_PARENT_NAMESPACE 64*890232f2SAndroid Build Coastguard Worker if is_onefile: 65*890232f2SAndroid Build Coastguard Worker print('Testing with the one-file generated code') 66*890232f2SAndroid Build Coastguard Worker _ANY = monster_test_generated 67*890232f2SAndroid Build Coastguard Worker _COLOR = monster_test_generated 68*890232f2SAndroid Build Coastguard Worker _MONSTER = monster_test_generated 69*890232f2SAndroid Build Coastguard Worker _TEST = monster_test_generated 70*890232f2SAndroid Build Coastguard Worker _STAT = monster_test_generated 71*890232f2SAndroid Build Coastguard Worker _VEC3 = monster_test_generated 72*890232f2SAndroid Build Coastguard Worker _IN_PARENT_NAMESPACE = monster_test_generated 73*890232f2SAndroid Build Coastguard Worker else: 74*890232f2SAndroid Build Coastguard Worker print('Testing with multi-file generated code') 75*890232f2SAndroid Build Coastguard Worker _ANY = MyGame.Example.Any 76*890232f2SAndroid Build Coastguard Worker _COLOR = MyGame.Example.Color 77*890232f2SAndroid Build Coastguard Worker _MONSTER = MyGame.Example.Monster 78*890232f2SAndroid Build Coastguard Worker _TEST = MyGame.Example.Test 79*890232f2SAndroid Build Coastguard Worker _STAT = MyGame.Example.Stat 80*890232f2SAndroid Build Coastguard Worker _VEC3 = MyGame.Example.Vec3 81*890232f2SAndroid Build Coastguard Worker _IN_PARENT_NAMESPACE = MyGame.InParentNamespace 82*890232f2SAndroid Build Coastguard Worker 83*890232f2SAndroid Build Coastguard Worker 84*890232f2SAndroid Build Coastguard Workerdef assertRaises(test_case, fn, exception_class): 85*890232f2SAndroid Build Coastguard Worker """ Backwards-compatible assertion for exceptions raised. """ 86*890232f2SAndroid Build Coastguard Worker 87*890232f2SAndroid Build Coastguard Worker exc = None 88*890232f2SAndroid Build Coastguard Worker try: 89*890232f2SAndroid Build Coastguard Worker fn() 90*890232f2SAndroid Build Coastguard Worker except Exception as e: 91*890232f2SAndroid Build Coastguard Worker exc = e 92*890232f2SAndroid Build Coastguard Worker test_case.assertTrue(exc is not None) 93*890232f2SAndroid Build Coastguard Worker test_case.assertTrue(isinstance(exc, exception_class)) 94*890232f2SAndroid Build Coastguard Worker 95*890232f2SAndroid Build Coastguard Worker 96*890232f2SAndroid Build Coastguard Workerclass TestWireFormat(unittest.TestCase): 97*890232f2SAndroid Build Coastguard Worker 98*890232f2SAndroid Build Coastguard Worker def test_wire_format(self): 99*890232f2SAndroid Build Coastguard Worker # Verify that using the generated Python code builds a buffer without 100*890232f2SAndroid Build Coastguard Worker # returning errors, and is interpreted correctly, for size prefixed 101*890232f2SAndroid Build Coastguard Worker # representation and regular: 102*890232f2SAndroid Build Coastguard Worker for sizePrefix in [True, False]: 103*890232f2SAndroid Build Coastguard Worker for file_identifier in [None, b'MONS']: 104*890232f2SAndroid Build Coastguard Worker gen_buf, gen_off = make_monster_from_generated_code( 105*890232f2SAndroid Build Coastguard Worker sizePrefix=sizePrefix, file_identifier=file_identifier) 106*890232f2SAndroid Build Coastguard Worker CheckReadBuffer( 107*890232f2SAndroid Build Coastguard Worker gen_buf, 108*890232f2SAndroid Build Coastguard Worker gen_off, 109*890232f2SAndroid Build Coastguard Worker sizePrefix=sizePrefix, 110*890232f2SAndroid Build Coastguard Worker file_identifier=file_identifier) 111*890232f2SAndroid Build Coastguard Worker 112*890232f2SAndroid Build Coastguard Worker # Verify that the canonical flatbuffer file is readable by the 113*890232f2SAndroid Build Coastguard Worker # generated Python code. Note that context managers are not part of 114*890232f2SAndroid Build Coastguard Worker # Python 2.5, so we use the simpler open/close methods here: 115*890232f2SAndroid Build Coastguard Worker f = open('monsterdata_test.mon', 'rb') 116*890232f2SAndroid Build Coastguard Worker canonicalWireData = f.read() 117*890232f2SAndroid Build Coastguard Worker f.close() 118*890232f2SAndroid Build Coastguard Worker CheckReadBuffer(bytearray(canonicalWireData), 0, file_identifier=b'MONS') 119*890232f2SAndroid Build Coastguard Worker 120*890232f2SAndroid Build Coastguard Worker # Write the generated buffer out to a file: 121*890232f2SAndroid Build Coastguard Worker f = open('monsterdata_python_wire.mon', 'wb') 122*890232f2SAndroid Build Coastguard Worker f.write(gen_buf[gen_off:]) 123*890232f2SAndroid Build Coastguard Worker f.close() 124*890232f2SAndroid Build Coastguard Worker 125*890232f2SAndroid Build Coastguard Worker 126*890232f2SAndroid Build Coastguard Workerclass TestObjectBasedAPI(unittest.TestCase): 127*890232f2SAndroid Build Coastguard Worker """ Tests the generated object based API.""" 128*890232f2SAndroid Build Coastguard Worker 129*890232f2SAndroid Build Coastguard Worker def test_consistenty_with_repeated_pack_and_unpack(self): 130*890232f2SAndroid Build Coastguard Worker """ Checks the serialization and deserialization between a buffer and 131*890232f2SAndroid Build Coastguard Worker 132*890232f2SAndroid Build Coastguard Worker its python object. It tests in the same way as the C++ object API test, 133*890232f2SAndroid Build Coastguard Worker ObjectFlatBuffersTest in test.cpp. 134*890232f2SAndroid Build Coastguard Worker """ 135*890232f2SAndroid Build Coastguard Worker 136*890232f2SAndroid Build Coastguard Worker buf, off = make_monster_from_generated_code() 137*890232f2SAndroid Build Coastguard Worker 138*890232f2SAndroid Build Coastguard Worker # Turns a buffer into Python object (T class). 139*890232f2SAndroid Build Coastguard Worker monster1 = _MONSTER.Monster.GetRootAs(buf, off) 140*890232f2SAndroid Build Coastguard Worker monsterT1 = _MONSTER.MonsterT.InitFromObj(monster1) 141*890232f2SAndroid Build Coastguard Worker 142*890232f2SAndroid Build Coastguard Worker for sizePrefix in [True, False]: 143*890232f2SAndroid Build Coastguard Worker # Re-serialize the data into a buffer. 144*890232f2SAndroid Build Coastguard Worker b1 = flatbuffers.Builder(0) 145*890232f2SAndroid Build Coastguard Worker if sizePrefix: 146*890232f2SAndroid Build Coastguard Worker b1.FinishSizePrefixed(monsterT1.Pack(b1)) 147*890232f2SAndroid Build Coastguard Worker else: 148*890232f2SAndroid Build Coastguard Worker b1.Finish(monsterT1.Pack(b1)) 149*890232f2SAndroid Build Coastguard Worker CheckReadBuffer(b1.Bytes, b1.Head(), sizePrefix) 150*890232f2SAndroid Build Coastguard Worker 151*890232f2SAndroid Build Coastguard Worker # Deserializes the buffer into Python object again. 152*890232f2SAndroid Build Coastguard Worker monster2 = _MONSTER.Monster.GetRootAs(b1.Bytes, b1.Head()) 153*890232f2SAndroid Build Coastguard Worker # Re-serializes the data into a buffer for one more time. 154*890232f2SAndroid Build Coastguard Worker monsterT2 = _MONSTER.MonsterT.InitFromObj(monster2) 155*890232f2SAndroid Build Coastguard Worker for sizePrefix in [True, False]: 156*890232f2SAndroid Build Coastguard Worker # Re-serializes the data into a buffer 157*890232f2SAndroid Build Coastguard Worker b2 = flatbuffers.Builder(0) 158*890232f2SAndroid Build Coastguard Worker if sizePrefix: 159*890232f2SAndroid Build Coastguard Worker b2.FinishSizePrefixed(monsterT2.Pack(b2)) 160*890232f2SAndroid Build Coastguard Worker else: 161*890232f2SAndroid Build Coastguard Worker b2.Finish(monsterT2.Pack(b2)) 162*890232f2SAndroid Build Coastguard Worker CheckReadBuffer(b2.Bytes, b2.Head(), sizePrefix) 163*890232f2SAndroid Build Coastguard Worker 164*890232f2SAndroid Build Coastguard Worker def test_default_values_with_pack_and_unpack(self): 165*890232f2SAndroid Build Coastguard Worker """ Serializes and deserializes between a buffer with default values (no 166*890232f2SAndroid Build Coastguard Worker 167*890232f2SAndroid Build Coastguard Worker specific values are filled when the buffer is created) and its python 168*890232f2SAndroid Build Coastguard Worker object. 169*890232f2SAndroid Build Coastguard Worker """ 170*890232f2SAndroid Build Coastguard Worker # Creates a flatbuffer with default values. 171*890232f2SAndroid Build Coastguard Worker b1 = flatbuffers.Builder(0) 172*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterStart(b1) 173*890232f2SAndroid Build Coastguard Worker gen_mon = _MONSTER.MonsterEnd(b1) 174*890232f2SAndroid Build Coastguard Worker b1.Finish(gen_mon) 175*890232f2SAndroid Build Coastguard Worker 176*890232f2SAndroid Build Coastguard Worker # Converts the flatbuffer into the object class. 177*890232f2SAndroid Build Coastguard Worker monster1 = _MONSTER.Monster.GetRootAs(b1.Bytes, b1.Head()) 178*890232f2SAndroid Build Coastguard Worker monsterT1 = _MONSTER.MonsterT.InitFromObj(monster1) 179*890232f2SAndroid Build Coastguard Worker 180*890232f2SAndroid Build Coastguard Worker # Packs the object class into another flatbuffer. 181*890232f2SAndroid Build Coastguard Worker b2 = flatbuffers.Builder(0) 182*890232f2SAndroid Build Coastguard Worker b2.Finish(monsterT1.Pack(b2)) 183*890232f2SAndroid Build Coastguard Worker monster2 = _MONSTER.Monster.GetRootAs(b2.Bytes, b2.Head()) 184*890232f2SAndroid Build Coastguard Worker # Checks the default values. 185*890232f2SAndroid Build Coastguard Worker self.assertTrue(monster2.Pos() is None) 186*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.Mana(), 150) 187*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.Hp(), 100) 188*890232f2SAndroid Build Coastguard Worker self.assertTrue(monster2.Name() is None) 189*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.Inventory(0), 0) 190*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.InventoryAsNumpy(), 0) 191*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.InventoryLength(), 0) 192*890232f2SAndroid Build Coastguard Worker self.assertTrue(monster2.InventoryIsNone()) 193*890232f2SAndroid Build Coastguard Worker self.assertTrue(monster2.Color() is 8) 194*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.TestType(), 0) 195*890232f2SAndroid Build Coastguard Worker self.assertTrue(monster2.Test() is None) 196*890232f2SAndroid Build Coastguard Worker self.assertTrue(monster2.Test4(0) is None) 197*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.Test4Length(), 0) 198*890232f2SAndroid Build Coastguard Worker self.assertTrue(monster2.Test4IsNone()) 199*890232f2SAndroid Build Coastguard Worker self.assertTrue(monster2.Testarrayofstring(0) is '') 200*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.TestarrayofstringLength(), 0) 201*890232f2SAndroid Build Coastguard Worker self.assertTrue(monster2.TestarrayofstringIsNone()) 202*890232f2SAndroid Build Coastguard Worker self.assertTrue(monster2.Testarrayoftables(0) is None) 203*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.TestarrayoftablesLength(), 0) 204*890232f2SAndroid Build Coastguard Worker self.assertTrue(monster2.TestarrayoftablesIsNone()) 205*890232f2SAndroid Build Coastguard Worker self.assertTrue(monster2.Enemy() is None) 206*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.Testnestedflatbuffer(0), 0) 207*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.TestnestedflatbufferAsNumpy(), 0) 208*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.TestnestedflatbufferLength(), 0) 209*890232f2SAndroid Build Coastguard Worker self.assertTrue(monster2.TestnestedflatbufferIsNone()) 210*890232f2SAndroid Build Coastguard Worker self.assertTrue(monster2.Testempty() is None) 211*890232f2SAndroid Build Coastguard Worker self.assertTrue(monster2.Testbool() is False) 212*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.Testhashs32Fnv1(), 0) 213*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.Testhashu32Fnv1(), 0) 214*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.Testhashs64Fnv1(), 0) 215*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.Testhashu64Fnv1(), 0) 216*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.Testhashs32Fnv1a(), 0) 217*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.Testhashu32Fnv1a(), 0) 218*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.Testhashs64Fnv1a(), 0) 219*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.Testhashu64Fnv1a(), 0) 220*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.Testarrayofbools(0), 0) 221*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.TestarrayofboolsAsNumpy(), 0) 222*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.TestarrayofboolsLength(), 0) 223*890232f2SAndroid Build Coastguard Worker self.assertTrue(monster2.TestarrayofboolsIsNone()) 224*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.Testf(), 3.14159) 225*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.Testf2(), 3.0) 226*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.Testf3(), 0.0) 227*890232f2SAndroid Build Coastguard Worker self.assertTrue(monster2.Testarrayofstring2(0) is '') 228*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.Testarrayofstring2Length(), 0) 229*890232f2SAndroid Build Coastguard Worker self.assertTrue(monster2.Testarrayofstring2IsNone()) 230*890232f2SAndroid Build Coastguard Worker self.assertTrue(monster2.Testarrayofsortedstruct(0) is None) 231*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.TestarrayofsortedstructLength(), 0) 232*890232f2SAndroid Build Coastguard Worker self.assertTrue(monster2.TestarrayofsortedstructIsNone()) 233*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.Flex(0), 0) 234*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.FlexAsNumpy(), 0) 235*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.FlexLength(), 0) 236*890232f2SAndroid Build Coastguard Worker self.assertTrue(monster2.FlexIsNone()) 237*890232f2SAndroid Build Coastguard Worker self.assertTrue(monster2.Test5(0) is None) 238*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.Test5Length(), 0) 239*890232f2SAndroid Build Coastguard Worker self.assertTrue(monster2.Test5IsNone()) 240*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.VectorOfLongs(0), 0) 241*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.VectorOfLongsAsNumpy(), 0) 242*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.VectorOfLongsLength(), 0) 243*890232f2SAndroid Build Coastguard Worker self.assertTrue(monster2.VectorOfLongsIsNone()) 244*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.VectorOfDoubles(0), 0) 245*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.VectorOfDoublesAsNumpy(), 0) 246*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.VectorOfDoublesLength(), 0) 247*890232f2SAndroid Build Coastguard Worker self.assertTrue(monster2.VectorOfDoublesIsNone()) 248*890232f2SAndroid Build Coastguard Worker self.assertTrue(monster2.ParentNamespaceTest() is None) 249*890232f2SAndroid Build Coastguard Worker self.assertTrue(monster2.VectorOfReferrables(0) is None) 250*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.VectorOfReferrablesLength(), 0) 251*890232f2SAndroid Build Coastguard Worker self.assertTrue(monster2.VectorOfReferrablesIsNone()) 252*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.SingleWeakReference(), 0) 253*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.VectorOfWeakReferences(0), 0) 254*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.VectorOfWeakReferencesAsNumpy(), 0) 255*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.VectorOfWeakReferencesLength(), 0) 256*890232f2SAndroid Build Coastguard Worker self.assertTrue(monster2.VectorOfWeakReferencesIsNone()) 257*890232f2SAndroid Build Coastguard Worker self.assertTrue(monster2.VectorOfStrongReferrables(0) is None) 258*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.VectorOfStrongReferrablesLength(), 0) 259*890232f2SAndroid Build Coastguard Worker self.assertTrue(monster2.VectorOfStrongReferrablesIsNone()) 260*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.CoOwningReference(), 0) 261*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.VectorOfCoOwningReferences(0), 0) 262*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.VectorOfCoOwningReferencesAsNumpy(), 0) 263*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.VectorOfCoOwningReferencesLength(), 0) 264*890232f2SAndroid Build Coastguard Worker self.assertTrue(monster2.VectorOfCoOwningReferencesIsNone()) 265*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.NonOwningReference(), 0) 266*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.VectorOfNonOwningReferences(0), 0) 267*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.VectorOfNonOwningReferencesAsNumpy(), 0) 268*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.VectorOfNonOwningReferencesLength(), 0) 269*890232f2SAndroid Build Coastguard Worker self.assertTrue(monster2.VectorOfNonOwningReferencesIsNone()) 270*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.AnyUniqueType(), 0) 271*890232f2SAndroid Build Coastguard Worker self.assertTrue(monster2.AnyUnique() is None) 272*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.AnyAmbiguousType(), 0) 273*890232f2SAndroid Build Coastguard Worker self.assertTrue(monster2.AnyAmbiguous() is None) 274*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.VectorOfEnums(0), 0) 275*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.VectorOfEnumsAsNumpy(), 0) 276*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster2.VectorOfEnumsLength(), 0) 277*890232f2SAndroid Build Coastguard Worker self.assertTrue(monster2.VectorOfEnumsIsNone()) 278*890232f2SAndroid Build Coastguard Worker 279*890232f2SAndroid Build Coastguard Worker def test_optional_scalars_with_pack_and_unpack(self): 280*890232f2SAndroid Build Coastguard Worker """ Serializes and deserializes between a buffer with optional values (no 281*890232f2SAndroid Build Coastguard Worker specific values are filled when the buffer is created) and its python 282*890232f2SAndroid Build Coastguard Worker object. 283*890232f2SAndroid Build Coastguard Worker """ 284*890232f2SAndroid Build Coastguard Worker # Creates a flatbuffer with optional values. 285*890232f2SAndroid Build Coastguard Worker b1 = flatbuffers.Builder(0) 286*890232f2SAndroid Build Coastguard Worker optional_scalars.ScalarStuff.ScalarStuffStart(b1) 287*890232f2SAndroid Build Coastguard Worker gen_opt = optional_scalars.ScalarStuff.ScalarStuffEnd(b1) 288*890232f2SAndroid Build Coastguard Worker b1.Finish(gen_opt) 289*890232f2SAndroid Build Coastguard Worker 290*890232f2SAndroid Build Coastguard Worker # Converts the flatbuffer into the object class. 291*890232f2SAndroid Build Coastguard Worker opts1 = optional_scalars.ScalarStuff.ScalarStuff.GetRootAs(b1.Bytes, b1.Head()) 292*890232f2SAndroid Build Coastguard Worker optsT1 = optional_scalars.ScalarStuff.ScalarStuffT.InitFromObj(opts1) 293*890232f2SAndroid Build Coastguard Worker 294*890232f2SAndroid Build Coastguard Worker # Packs the object class into another flatbuffer. 295*890232f2SAndroid Build Coastguard Worker b2 = flatbuffers.Builder(0) 296*890232f2SAndroid Build Coastguard Worker b2.Finish(optsT1.Pack(b2)) 297*890232f2SAndroid Build Coastguard Worker opts2 = optional_scalars.ScalarStuff.ScalarStuff.GetRootAs(b2.Bytes, b2.Head()) 298*890232f2SAndroid Build Coastguard Worker optsT2 = optional_scalars.ScalarStuff.ScalarStuffT.InitFromObj(opts2) 299*890232f2SAndroid Build Coastguard Worker # Checks the default values. 300*890232f2SAndroid Build Coastguard Worker self.assertTrue(opts2.JustI8() == 0) 301*890232f2SAndroid Build Coastguard Worker self.assertTrue(opts2.MaybeF32() is None) 302*890232f2SAndroid Build Coastguard Worker self.assertTrue(opts2.DefaultBool() is True) 303*890232f2SAndroid Build Coastguard Worker self.assertTrue(optsT2.justU16 == 0) 304*890232f2SAndroid Build Coastguard Worker self.assertTrue(optsT2.maybeEnum is None) 305*890232f2SAndroid Build Coastguard Worker self.assertTrue(optsT2.defaultU64 == 42) 306*890232f2SAndroid Build Coastguard Worker 307*890232f2SAndroid Build Coastguard Worker 308*890232f2SAndroid Build Coastguard Worker 309*890232f2SAndroid Build Coastguard Workerclass TestAllMutableCodePathsOfExampleSchema(unittest.TestCase): 310*890232f2SAndroid Build Coastguard Worker """ Tests the object API generated for monster_test.fbs for mutation 311*890232f2SAndroid Build Coastguard Worker 312*890232f2SAndroid Build Coastguard Worker purposes. In each test, the default values will be changed through the 313*890232f2SAndroid Build Coastguard Worker object API. We'll then pack the object class into the buf class and read 314*890232f2SAndroid Build Coastguard Worker the updated values out from it to validate if the values are mutated as 315*890232f2SAndroid Build Coastguard Worker expected. 316*890232f2SAndroid Build Coastguard Worker """ 317*890232f2SAndroid Build Coastguard Worker 318*890232f2SAndroid Build Coastguard Worker def setUp(self, *args, **kwargs): 319*890232f2SAndroid Build Coastguard Worker super(TestAllMutableCodePathsOfExampleSchema, self).setUp(*args, **kwargs) 320*890232f2SAndroid Build Coastguard Worker # Creates an empty monster flatbuffer, and loads it into the object 321*890232f2SAndroid Build Coastguard Worker # class for future tests. 322*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 323*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterStart(b) 324*890232f2SAndroid Build Coastguard Worker self.monsterT = self._create_and_load_object_class(b) 325*890232f2SAndroid Build Coastguard Worker 326*890232f2SAndroid Build Coastguard Worker def _pack_and_load_buf_class(self, monsterT): 327*890232f2SAndroid Build Coastguard Worker """ Packs the object class into a flatbuffer and loads it into a buf 328*890232f2SAndroid Build Coastguard Worker 329*890232f2SAndroid Build Coastguard Worker class. 330*890232f2SAndroid Build Coastguard Worker """ 331*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 332*890232f2SAndroid Build Coastguard Worker b.Finish(monsterT.Pack(b)) 333*890232f2SAndroid Build Coastguard Worker monster = _MONSTER.Monster.GetRootAs(b.Bytes, b.Head()) 334*890232f2SAndroid Build Coastguard Worker return monster 335*890232f2SAndroid Build Coastguard Worker 336*890232f2SAndroid Build Coastguard Worker def _create_and_load_object_class(self, b): 337*890232f2SAndroid Build Coastguard Worker """ Finishs the creation of a monster flatbuffer and loads it into an 338*890232f2SAndroid Build Coastguard Worker 339*890232f2SAndroid Build Coastguard Worker object class. 340*890232f2SAndroid Build Coastguard Worker """ 341*890232f2SAndroid Build Coastguard Worker gen_mon = _MONSTER.MonsterEnd(b) 342*890232f2SAndroid Build Coastguard Worker b.Finish(gen_mon) 343*890232f2SAndroid Build Coastguard Worker monster = _MONSTER.Monster.GetRootAs(b.Bytes, b.Head()) 344*890232f2SAndroid Build Coastguard Worker monsterT = _MONSTER.MonsterT() 345*890232f2SAndroid Build Coastguard Worker monsterT.InitFromObj(monster) 346*890232f2SAndroid Build Coastguard Worker return monsterT 347*890232f2SAndroid Build Coastguard Worker 348*890232f2SAndroid Build Coastguard Worker def test_mutate_pos(self): 349*890232f2SAndroid Build Coastguard Worker posT = _VEC3.Vec3T() 350*890232f2SAndroid Build Coastguard Worker posT.x = 4.0 351*890232f2SAndroid Build Coastguard Worker posT.y = 5.0 352*890232f2SAndroid Build Coastguard Worker posT.z = 6.0 353*890232f2SAndroid Build Coastguard Worker posT.test1 = 6.0 354*890232f2SAndroid Build Coastguard Worker posT.test2 = 7 355*890232f2SAndroid Build Coastguard Worker test3T = _TEST.TestT() 356*890232f2SAndroid Build Coastguard Worker test3T.a = 8 357*890232f2SAndroid Build Coastguard Worker test3T.b = 9 358*890232f2SAndroid Build Coastguard Worker posT.test3 = test3T 359*890232f2SAndroid Build Coastguard Worker self.monsterT.pos = posT 360*890232f2SAndroid Build Coastguard Worker 361*890232f2SAndroid Build Coastguard Worker # Packs the updated values. 362*890232f2SAndroid Build Coastguard Worker monster = self._pack_and_load_buf_class(self.monsterT) 363*890232f2SAndroid Build Coastguard Worker 364*890232f2SAndroid Build Coastguard Worker # Checks if values are loaded correctly into the object class. 365*890232f2SAndroid Build Coastguard Worker pos = monster.Pos() 366*890232f2SAndroid Build Coastguard Worker 367*890232f2SAndroid Build Coastguard Worker # Verifies the properties of the Vec3. 368*890232f2SAndroid Build Coastguard Worker self.assertEqual(pos.X(), 4.0) 369*890232f2SAndroid Build Coastguard Worker self.assertEqual(pos.Y(), 5.0) 370*890232f2SAndroid Build Coastguard Worker self.assertEqual(pos.Z(), 6.0) 371*890232f2SAndroid Build Coastguard Worker self.assertEqual(pos.Test1(), 6.0) 372*890232f2SAndroid Build Coastguard Worker self.assertEqual(pos.Test2(), 7) 373*890232f2SAndroid Build Coastguard Worker t3 = _TEST.Test() 374*890232f2SAndroid Build Coastguard Worker t3 = pos.Test3(t3) 375*890232f2SAndroid Build Coastguard Worker self.assertEqual(t3.A(), 8) 376*890232f2SAndroid Build Coastguard Worker self.assertEqual(t3.B(), 9) 377*890232f2SAndroid Build Coastguard Worker 378*890232f2SAndroid Build Coastguard Worker def test_mutate_mana(self): 379*890232f2SAndroid Build Coastguard Worker self.monsterT.mana = 200 380*890232f2SAndroid Build Coastguard Worker monster = self._pack_and_load_buf_class(self.monsterT) 381*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster.Mana(), 200) 382*890232f2SAndroid Build Coastguard Worker 383*890232f2SAndroid Build Coastguard Worker def test_mutate_hp(self): 384*890232f2SAndroid Build Coastguard Worker self.monsterT.hp = 200 385*890232f2SAndroid Build Coastguard Worker monster = self._pack_and_load_buf_class(self.monsterT) 386*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster.Hp(), 200) 387*890232f2SAndroid Build Coastguard Worker 388*890232f2SAndroid Build Coastguard Worker def test_mutate_name(self): 389*890232f2SAndroid Build Coastguard Worker self.monsterT.name = 'MyMonster' 390*890232f2SAndroid Build Coastguard Worker monster = self._pack_and_load_buf_class(self.monsterT) 391*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster.Name(), b'MyMonster') 392*890232f2SAndroid Build Coastguard Worker 393*890232f2SAndroid Build Coastguard Worker def test_mutate_inventory(self): 394*890232f2SAndroid Build Coastguard Worker self.monsterT.inventory = [1, 7, 8] 395*890232f2SAndroid Build Coastguard Worker monster = self._pack_and_load_buf_class(self.monsterT) 396*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster.Inventory(0), 1) 397*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster.Inventory(1), 7) 398*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster.Inventory(2), 8) 399*890232f2SAndroid Build Coastguard Worker 400*890232f2SAndroid Build Coastguard Worker def test_empty_inventory(self): 401*890232f2SAndroid Build Coastguard Worker self.monsterT.inventory = [] 402*890232f2SAndroid Build Coastguard Worker monster = self._pack_and_load_buf_class(self.monsterT) 403*890232f2SAndroid Build Coastguard Worker self.assertFalse(monster.InventoryIsNone()) 404*890232f2SAndroid Build Coastguard Worker 405*890232f2SAndroid Build Coastguard Worker def test_mutate_color(self): 406*890232f2SAndroid Build Coastguard Worker self.monsterT.color = _COLOR.Color.Red 407*890232f2SAndroid Build Coastguard Worker monster = self._pack_and_load_buf_class(self.monsterT) 408*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster.Color(), _COLOR.Color.Red) 409*890232f2SAndroid Build Coastguard Worker 410*890232f2SAndroid Build Coastguard Worker def test_mutate_testtype(self): 411*890232f2SAndroid Build Coastguard Worker self.monsterT.testType = _ANY.Any.Monster 412*890232f2SAndroid Build Coastguard Worker monster = self._pack_and_load_buf_class(self.monsterT) 413*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster.TestType(), _ANY.Any.Monster) 414*890232f2SAndroid Build Coastguard Worker 415*890232f2SAndroid Build Coastguard Worker def test_mutate_test(self): 416*890232f2SAndroid Build Coastguard Worker testT = _MONSTER.MonsterT() 417*890232f2SAndroid Build Coastguard Worker testT.hp = 200 418*890232f2SAndroid Build Coastguard Worker self.monsterT.test = testT 419*890232f2SAndroid Build Coastguard Worker monster = self._pack_and_load_buf_class(self.monsterT) 420*890232f2SAndroid Build Coastguard Worker # Initializes a Table from a union field Test(...). 421*890232f2SAndroid Build Coastguard Worker table = monster.Test() 422*890232f2SAndroid Build Coastguard Worker 423*890232f2SAndroid Build Coastguard Worker # Initializes a Monster from the Table from the union. 424*890232f2SAndroid Build Coastguard Worker test_monster = _MONSTER.Monster() 425*890232f2SAndroid Build Coastguard Worker test_monster.Init(table.Bytes, table.Pos) 426*890232f2SAndroid Build Coastguard Worker self.assertEqual(test_monster.Hp(), 200) 427*890232f2SAndroid Build Coastguard Worker 428*890232f2SAndroid Build Coastguard Worker def test_mutate_test4(self): 429*890232f2SAndroid Build Coastguard Worker test0T = _TEST.TestT() 430*890232f2SAndroid Build Coastguard Worker test0T.a = 10 431*890232f2SAndroid Build Coastguard Worker test0T.b = 20 432*890232f2SAndroid Build Coastguard Worker test1T = _TEST.TestT() 433*890232f2SAndroid Build Coastguard Worker test1T.a = 30 434*890232f2SAndroid Build Coastguard Worker test1T.b = 40 435*890232f2SAndroid Build Coastguard Worker self.monsterT.test4 = [test0T, test1T] 436*890232f2SAndroid Build Coastguard Worker 437*890232f2SAndroid Build Coastguard Worker monster = self._pack_and_load_buf_class(self.monsterT) 438*890232f2SAndroid Build Coastguard Worker test0 = monster.Test4(0) 439*890232f2SAndroid Build Coastguard Worker self.assertEqual(test0.A(), 10) 440*890232f2SAndroid Build Coastguard Worker self.assertEqual(test0.B(), 20) 441*890232f2SAndroid Build Coastguard Worker test1 = monster.Test4(1) 442*890232f2SAndroid Build Coastguard Worker self.assertEqual(test1.A(), 30) 443*890232f2SAndroid Build Coastguard Worker self.assertEqual(test1.B(), 40) 444*890232f2SAndroid Build Coastguard Worker 445*890232f2SAndroid Build Coastguard Worker def test_empty_test4(self): 446*890232f2SAndroid Build Coastguard Worker self.monsterT.test4 = [] 447*890232f2SAndroid Build Coastguard Worker monster = self._pack_and_load_buf_class(self.monsterT) 448*890232f2SAndroid Build Coastguard Worker self.assertFalse(monster.Test4IsNone()) 449*890232f2SAndroid Build Coastguard Worker 450*890232f2SAndroid Build Coastguard Worker def test_mutate_testarrayofstring(self): 451*890232f2SAndroid Build Coastguard Worker self.monsterT.testarrayofstring = [] 452*890232f2SAndroid Build Coastguard Worker self.monsterT.testarrayofstring.append('test1') 453*890232f2SAndroid Build Coastguard Worker self.monsterT.testarrayofstring.append('test2') 454*890232f2SAndroid Build Coastguard Worker monster = self._pack_and_load_buf_class(self.monsterT) 455*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster.Testarrayofstring(0), b'test1') 456*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster.Testarrayofstring(1), b'test2') 457*890232f2SAndroid Build Coastguard Worker 458*890232f2SAndroid Build Coastguard Worker def test_empty_testarrayofstring(self): 459*890232f2SAndroid Build Coastguard Worker self.monsterT.testarrayofstring = [] 460*890232f2SAndroid Build Coastguard Worker monster = self._pack_and_load_buf_class(self.monsterT) 461*890232f2SAndroid Build Coastguard Worker self.assertFalse(monster.TestarrayofstringIsNone()) 462*890232f2SAndroid Build Coastguard Worker 463*890232f2SAndroid Build Coastguard Worker def test_mutate_testarrayoftables(self): 464*890232f2SAndroid Build Coastguard Worker monsterT0 = _MONSTER.MonsterT() 465*890232f2SAndroid Build Coastguard Worker monsterT0.hp = 200 466*890232f2SAndroid Build Coastguard Worker monsterT1 = _MONSTER.MonsterT() 467*890232f2SAndroid Build Coastguard Worker monsterT1.hp = 400 468*890232f2SAndroid Build Coastguard Worker self.monsterT.testarrayoftables = [] 469*890232f2SAndroid Build Coastguard Worker self.monsterT.testarrayoftables.append(monsterT0) 470*890232f2SAndroid Build Coastguard Worker self.monsterT.testarrayoftables.append(monsterT1) 471*890232f2SAndroid Build Coastguard Worker monster = self._pack_and_load_buf_class(self.monsterT) 472*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster.Testarrayoftables(0).Hp(), 200) 473*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster.Testarrayoftables(1).Hp(), 400) 474*890232f2SAndroid Build Coastguard Worker 475*890232f2SAndroid Build Coastguard Worker def test_empty_testarrayoftables(self): 476*890232f2SAndroid Build Coastguard Worker self.monsterT.testarrayoftables = [] 477*890232f2SAndroid Build Coastguard Worker monster = self._pack_and_load_buf_class(self.monsterT) 478*890232f2SAndroid Build Coastguard Worker self.assertFalse(monster.TestarrayoftablesIsNone()) 479*890232f2SAndroid Build Coastguard Worker 480*890232f2SAndroid Build Coastguard Worker def test_mutate_enemy(self): 481*890232f2SAndroid Build Coastguard Worker monsterT = _MONSTER.MonsterT() 482*890232f2SAndroid Build Coastguard Worker monsterT.hp = 200 483*890232f2SAndroid Build Coastguard Worker self.monsterT.enemy = monsterT 484*890232f2SAndroid Build Coastguard Worker monster = self._pack_and_load_buf_class(self.monsterT) 485*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster.Enemy().Hp(), 200) 486*890232f2SAndroid Build Coastguard Worker 487*890232f2SAndroid Build Coastguard Worker def test_mutate_testnestedflatbuffer(self): 488*890232f2SAndroid Build Coastguard Worker self.monsterT.testnestedflatbuffer = [8, 2, 4] 489*890232f2SAndroid Build Coastguard Worker monster = self._pack_and_load_buf_class(self.monsterT) 490*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster.Testnestedflatbuffer(0), 8) 491*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster.Testnestedflatbuffer(1), 2) 492*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster.Testnestedflatbuffer(2), 4) 493*890232f2SAndroid Build Coastguard Worker 494*890232f2SAndroid Build Coastguard Worker def test_empty_testnestedflatbuffer(self): 495*890232f2SAndroid Build Coastguard Worker self.monsterT.testnestedflatbuffer = [] 496*890232f2SAndroid Build Coastguard Worker monster = self._pack_and_load_buf_class(self.monsterT) 497*890232f2SAndroid Build Coastguard Worker self.assertFalse(monster.TestnestedflatbufferIsNone()) 498*890232f2SAndroid Build Coastguard Worker 499*890232f2SAndroid Build Coastguard Worker def test_mutate_testbool(self): 500*890232f2SAndroid Build Coastguard Worker self.monsterT.testbool = True 501*890232f2SAndroid Build Coastguard Worker monster = self._pack_and_load_buf_class(self.monsterT) 502*890232f2SAndroid Build Coastguard Worker self.assertTrue(monster.Testbool()) 503*890232f2SAndroid Build Coastguard Worker 504*890232f2SAndroid Build Coastguard Worker def test_mutate_testhashes(self): 505*890232f2SAndroid Build Coastguard Worker self.monsterT.testhashs32Fnv1 = 1 506*890232f2SAndroid Build Coastguard Worker self.monsterT.testhashu32Fnv1 = 2 507*890232f2SAndroid Build Coastguard Worker self.monsterT.testhashs64Fnv1 = 3 508*890232f2SAndroid Build Coastguard Worker self.monsterT.testhashu64Fnv1 = 4 509*890232f2SAndroid Build Coastguard Worker self.monsterT.testhashs32Fnv1a = 5 510*890232f2SAndroid Build Coastguard Worker self.monsterT.testhashu32Fnv1a = 6 511*890232f2SAndroid Build Coastguard Worker self.monsterT.testhashs64Fnv1a = 7 512*890232f2SAndroid Build Coastguard Worker self.monsterT.testhashu64Fnv1a = 8 513*890232f2SAndroid Build Coastguard Worker monster = self._pack_and_load_buf_class(self.monsterT) 514*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster.Testhashs32Fnv1(), 1) 515*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster.Testhashu32Fnv1(), 2) 516*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster.Testhashs64Fnv1(), 3) 517*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster.Testhashu64Fnv1(), 4) 518*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster.Testhashs32Fnv1a(), 5) 519*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster.Testhashu32Fnv1a(), 6) 520*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster.Testhashs64Fnv1a(), 7) 521*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster.Testhashu64Fnv1a(), 8) 522*890232f2SAndroid Build Coastguard Worker 523*890232f2SAndroid Build Coastguard Worker def test_mutate_testarrayofbools(self): 524*890232f2SAndroid Build Coastguard Worker self.monsterT.testarrayofbools = [] 525*890232f2SAndroid Build Coastguard Worker self.monsterT.testarrayofbools.append(True) 526*890232f2SAndroid Build Coastguard Worker self.monsterT.testarrayofbools.append(True) 527*890232f2SAndroid Build Coastguard Worker self.monsterT.testarrayofbools.append(False) 528*890232f2SAndroid Build Coastguard Worker monster = self._pack_and_load_buf_class(self.monsterT) 529*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster.Testarrayofbools(0), True) 530*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster.Testarrayofbools(1), True) 531*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster.Testarrayofbools(2), False) 532*890232f2SAndroid Build Coastguard Worker 533*890232f2SAndroid Build Coastguard Worker def test_empty_testarrayofbools(self): 534*890232f2SAndroid Build Coastguard Worker self.monsterT.testarrayofbools = [] 535*890232f2SAndroid Build Coastguard Worker monster = self._pack_and_load_buf_class(self.monsterT) 536*890232f2SAndroid Build Coastguard Worker self.assertFalse(monster.TestarrayofboolsIsNone()) 537*890232f2SAndroid Build Coastguard Worker 538*890232f2SAndroid Build Coastguard Worker def test_mutate_testf(self): 539*890232f2SAndroid Build Coastguard Worker self.monsterT.testf = 2.0 540*890232f2SAndroid Build Coastguard Worker monster = self._pack_and_load_buf_class(self.monsterT) 541*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster.Testf(), 2.0) 542*890232f2SAndroid Build Coastguard Worker 543*890232f2SAndroid Build Coastguard Worker def test_mutate_vectoroflongs(self): 544*890232f2SAndroid Build Coastguard Worker self.monsterT.vectorOfLongs = [] 545*890232f2SAndroid Build Coastguard Worker self.monsterT.vectorOfLongs.append(1) 546*890232f2SAndroid Build Coastguard Worker self.monsterT.vectorOfLongs.append(100) 547*890232f2SAndroid Build Coastguard Worker self.monsterT.vectorOfLongs.append(10000) 548*890232f2SAndroid Build Coastguard Worker self.monsterT.vectorOfLongs.append(1000000) 549*890232f2SAndroid Build Coastguard Worker self.monsterT.vectorOfLongs.append(100000000) 550*890232f2SAndroid Build Coastguard Worker monster = self._pack_and_load_buf_class(self.monsterT) 551*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster.VectorOfLongs(0), 1) 552*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster.VectorOfLongs(1), 100) 553*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster.VectorOfLongs(2), 10000) 554*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster.VectorOfLongs(3), 1000000) 555*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster.VectorOfLongs(4), 100000000) 556*890232f2SAndroid Build Coastguard Worker 557*890232f2SAndroid Build Coastguard Worker def test_empty_vectoroflongs(self): 558*890232f2SAndroid Build Coastguard Worker self.monsterT.vectorOfLongs = [] 559*890232f2SAndroid Build Coastguard Worker monster = self._pack_and_load_buf_class(self.monsterT) 560*890232f2SAndroid Build Coastguard Worker self.assertFalse(monster.VectorOfLongsIsNone()) 561*890232f2SAndroid Build Coastguard Worker 562*890232f2SAndroid Build Coastguard Worker def test_mutate_vectorofdoubles(self): 563*890232f2SAndroid Build Coastguard Worker self.monsterT.vectorOfDoubles = [] 564*890232f2SAndroid Build Coastguard Worker self.monsterT.vectorOfDoubles.append(-1.7976931348623157e+308) 565*890232f2SAndroid Build Coastguard Worker self.monsterT.vectorOfDoubles.append(0) 566*890232f2SAndroid Build Coastguard Worker self.monsterT.vectorOfDoubles.append(1.7976931348623157e+308) 567*890232f2SAndroid Build Coastguard Worker monster = self._pack_and_load_buf_class(self.monsterT) 568*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster.VectorOfDoubles(0), -1.7976931348623157e+308) 569*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster.VectorOfDoubles(1), 0) 570*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster.VectorOfDoubles(2), 1.7976931348623157e+308) 571*890232f2SAndroid Build Coastguard Worker 572*890232f2SAndroid Build Coastguard Worker def test_empty_vectorofdoubles(self): 573*890232f2SAndroid Build Coastguard Worker self.monsterT.vectorOfDoubles = [] 574*890232f2SAndroid Build Coastguard Worker monster = self._pack_and_load_buf_class(self.monsterT) 575*890232f2SAndroid Build Coastguard Worker self.assertFalse(monster.VectorOfDoublesIsNone()) 576*890232f2SAndroid Build Coastguard Worker 577*890232f2SAndroid Build Coastguard Worker def test_mutate_parentnamespacetest(self): 578*890232f2SAndroid Build Coastguard Worker self.monsterT.parentNamespaceTest = _IN_PARENT_NAMESPACE.InParentNamespaceT( 579*890232f2SAndroid Build Coastguard Worker ) 580*890232f2SAndroid Build Coastguard Worker monster = self._pack_and_load_buf_class(self.monsterT) 581*890232f2SAndroid Build Coastguard Worker self.assertTrue( 582*890232f2SAndroid Build Coastguard Worker isinstance(monster.ParentNamespaceTest(), 583*890232f2SAndroid Build Coastguard Worker _IN_PARENT_NAMESPACE.InParentNamespace)) 584*890232f2SAndroid Build Coastguard Worker 585*890232f2SAndroid Build Coastguard Worker def test_mutate_vectorofEnums(self): 586*890232f2SAndroid Build Coastguard Worker self.monsterT.vectorOfEnums = [] 587*890232f2SAndroid Build Coastguard Worker self.monsterT.vectorOfEnums.append(_COLOR.Color.Red) 588*890232f2SAndroid Build Coastguard Worker self.monsterT.vectorOfEnums.append(_COLOR.Color.Blue) 589*890232f2SAndroid Build Coastguard Worker self.monsterT.vectorOfEnums.append(_COLOR.Color.Red) 590*890232f2SAndroid Build Coastguard Worker monster = self._pack_and_load_buf_class(self.monsterT) 591*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster.VectorOfEnums(0), _COLOR.Color.Red) 592*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster.VectorOfEnums(1), _COLOR.Color.Blue) 593*890232f2SAndroid Build Coastguard Worker self.assertEqual(monster.VectorOfEnums(2), _COLOR.Color.Red) 594*890232f2SAndroid Build Coastguard Worker 595*890232f2SAndroid Build Coastguard Worker def test_empty_vectorofEnums(self): 596*890232f2SAndroid Build Coastguard Worker self.monsterT.vectorOfEnums = [] 597*890232f2SAndroid Build Coastguard Worker monster = self._pack_and_load_buf_class(self.monsterT) 598*890232f2SAndroid Build Coastguard Worker self.assertFalse(monster.VectorOfEnumsIsNone()) 599*890232f2SAndroid Build Coastguard Worker 600*890232f2SAndroid Build Coastguard Worker 601*890232f2SAndroid Build Coastguard Workerdef CheckReadBuffer(buf, offset, sizePrefix=False, file_identifier=None): 602*890232f2SAndroid Build Coastguard Worker """ CheckReadBuffer checks that the given buffer is evaluated correctly 603*890232f2SAndroid Build Coastguard Worker 604*890232f2SAndroid Build Coastguard Worker as the example Monster. 605*890232f2SAndroid Build Coastguard Worker """ 606*890232f2SAndroid Build Coastguard Worker 607*890232f2SAndroid Build Coastguard Worker def asserter(stmt): 608*890232f2SAndroid Build Coastguard Worker """ An assertion helper that is separated from TestCase classes. """ 609*890232f2SAndroid Build Coastguard Worker if not stmt: 610*890232f2SAndroid Build Coastguard Worker raise AssertionError('CheckReadBuffer case failed') 611*890232f2SAndroid Build Coastguard Worker 612*890232f2SAndroid Build Coastguard Worker if file_identifier: 613*890232f2SAndroid Build Coastguard Worker # test prior to removal of size_prefix 614*890232f2SAndroid Build Coastguard Worker asserter( 615*890232f2SAndroid Build Coastguard Worker util.GetBufferIdentifier(buf, offset, size_prefixed=sizePrefix) == 616*890232f2SAndroid Build Coastguard Worker file_identifier) 617*890232f2SAndroid Build Coastguard Worker asserter( 618*890232f2SAndroid Build Coastguard Worker util.BufferHasIdentifier( 619*890232f2SAndroid Build Coastguard Worker buf, 620*890232f2SAndroid Build Coastguard Worker offset, 621*890232f2SAndroid Build Coastguard Worker file_identifier=file_identifier, 622*890232f2SAndroid Build Coastguard Worker size_prefixed=sizePrefix)) 623*890232f2SAndroid Build Coastguard Worker asserter( 624*890232f2SAndroid Build Coastguard Worker _MONSTER.Monster.MonsterBufferHasIdentifier( 625*890232f2SAndroid Build Coastguard Worker buf, offset, size_prefixed=sizePrefix)) 626*890232f2SAndroid Build Coastguard Worker if sizePrefix: 627*890232f2SAndroid Build Coastguard Worker size = util.GetSizePrefix(buf, offset) 628*890232f2SAndroid Build Coastguard Worker asserter(size == len(buf[offset:]) - 4) 629*890232f2SAndroid Build Coastguard Worker buf, offset = util.RemoveSizePrefix(buf, offset) 630*890232f2SAndroid Build Coastguard Worker if file_identifier: 631*890232f2SAndroid Build Coastguard Worker asserter(_MONSTER.Monster.MonsterBufferHasIdentifier(buf, offset)) 632*890232f2SAndroid Build Coastguard Worker else: 633*890232f2SAndroid Build Coastguard Worker asserter(not _MONSTER.Monster.MonsterBufferHasIdentifier(buf, offset)) 634*890232f2SAndroid Build Coastguard Worker monster = _MONSTER.Monster.GetRootAs(buf, offset) 635*890232f2SAndroid Build Coastguard Worker 636*890232f2SAndroid Build Coastguard Worker asserter(monster.Hp() == 80) 637*890232f2SAndroid Build Coastguard Worker asserter(monster.Mana() == 150) 638*890232f2SAndroid Build Coastguard Worker asserter(monster.Name() == b'MyMonster') 639*890232f2SAndroid Build Coastguard Worker 640*890232f2SAndroid Build Coastguard Worker # initialize a Vec3 from Pos() 641*890232f2SAndroid Build Coastguard Worker vec = monster.Pos() 642*890232f2SAndroid Build Coastguard Worker asserter(vec is not None) 643*890232f2SAndroid Build Coastguard Worker 644*890232f2SAndroid Build Coastguard Worker # verify the properties of the Vec3 645*890232f2SAndroid Build Coastguard Worker asserter(vec.X() == 1.0) 646*890232f2SAndroid Build Coastguard Worker asserter(vec.Y() == 2.0) 647*890232f2SAndroid Build Coastguard Worker asserter(vec.Z() == 3.0) 648*890232f2SAndroid Build Coastguard Worker asserter(vec.Test1() == 3.0) 649*890232f2SAndroid Build Coastguard Worker asserter(vec.Test2() == 2) 650*890232f2SAndroid Build Coastguard Worker 651*890232f2SAndroid Build Coastguard Worker # initialize a Test from Test3(...) 652*890232f2SAndroid Build Coastguard Worker t = _TEST.Test() 653*890232f2SAndroid Build Coastguard Worker t = vec.Test3(t) 654*890232f2SAndroid Build Coastguard Worker asserter(t is not None) 655*890232f2SAndroid Build Coastguard Worker 656*890232f2SAndroid Build Coastguard Worker # verify the properties of the Test 657*890232f2SAndroid Build Coastguard Worker asserter(t.A() == 5) 658*890232f2SAndroid Build Coastguard Worker asserter(t.B() == 6) 659*890232f2SAndroid Build Coastguard Worker 660*890232f2SAndroid Build Coastguard Worker # verify that the enum code matches the enum declaration: 661*890232f2SAndroid Build Coastguard Worker union_type = _ANY.Any 662*890232f2SAndroid Build Coastguard Worker asserter(monster.TestType() == union_type.Monster) 663*890232f2SAndroid Build Coastguard Worker 664*890232f2SAndroid Build Coastguard Worker # initialize a Table from a union field Test(...) 665*890232f2SAndroid Build Coastguard Worker table2 = monster.Test() 666*890232f2SAndroid Build Coastguard Worker asserter(type(table2) is flatbuffers.table.Table) 667*890232f2SAndroid Build Coastguard Worker 668*890232f2SAndroid Build Coastguard Worker # initialize a Monster from the Table from the union 669*890232f2SAndroid Build Coastguard Worker monster2 = _MONSTER.Monster() 670*890232f2SAndroid Build Coastguard Worker monster2.Init(table2.Bytes, table2.Pos) 671*890232f2SAndroid Build Coastguard Worker 672*890232f2SAndroid Build Coastguard Worker asserter(monster2.Name() == b'Fred') 673*890232f2SAndroid Build Coastguard Worker 674*890232f2SAndroid Build Coastguard Worker # iterate through the first monster's inventory: 675*890232f2SAndroid Build Coastguard Worker asserter(monster.InventoryLength() == 5) 676*890232f2SAndroid Build Coastguard Worker asserter(not monster.InventoryIsNone()) 677*890232f2SAndroid Build Coastguard Worker 678*890232f2SAndroid Build Coastguard Worker invsum = 0 679*890232f2SAndroid Build Coastguard Worker for i in compat_range(monster.InventoryLength()): 680*890232f2SAndroid Build Coastguard Worker v = monster.Inventory(i) 681*890232f2SAndroid Build Coastguard Worker invsum += int(v) 682*890232f2SAndroid Build Coastguard Worker asserter(invsum == 10) 683*890232f2SAndroid Build Coastguard Worker 684*890232f2SAndroid Build Coastguard Worker for i in range(5): 685*890232f2SAndroid Build Coastguard Worker asserter(monster.VectorOfLongs(i) == 10**(i * 2)) 686*890232f2SAndroid Build Coastguard Worker 687*890232f2SAndroid Build Coastguard Worker asserter(not monster.VectorOfDoublesIsNone()) 688*890232f2SAndroid Build Coastguard Worker asserter(([-1.7976931348623157e+308, 0, 1.7976931348623157e+308] == [ 689*890232f2SAndroid Build Coastguard Worker monster.VectorOfDoubles(i) for i in range(monster.VectorOfDoublesLength()) 690*890232f2SAndroid Build Coastguard Worker ])) 691*890232f2SAndroid Build Coastguard Worker 692*890232f2SAndroid Build Coastguard Worker try: 693*890232f2SAndroid Build Coastguard Worker imp.find_module('numpy') 694*890232f2SAndroid Build Coastguard Worker # if numpy exists, then we should be able to get the 695*890232f2SAndroid Build Coastguard Worker # vector as a numpy array 696*890232f2SAndroid Build Coastguard Worker import numpy as np 697*890232f2SAndroid Build Coastguard Worker 698*890232f2SAndroid Build Coastguard Worker asserter(monster.InventoryAsNumpy().sum() == 10) 699*890232f2SAndroid Build Coastguard Worker asserter(monster.InventoryAsNumpy().dtype == np.dtype('uint8')) 700*890232f2SAndroid Build Coastguard Worker 701*890232f2SAndroid Build Coastguard Worker VectorOfLongs = monster.VectorOfLongsAsNumpy() 702*890232f2SAndroid Build Coastguard Worker asserter(VectorOfLongs.dtype == np.dtype('int64')) 703*890232f2SAndroid Build Coastguard Worker for i in range(5): 704*890232f2SAndroid Build Coastguard Worker asserter(VectorOfLongs[i] == 10**(i * 2)) 705*890232f2SAndroid Build Coastguard Worker 706*890232f2SAndroid Build Coastguard Worker VectorOfDoubles = monster.VectorOfDoublesAsNumpy() 707*890232f2SAndroid Build Coastguard Worker asserter(VectorOfDoubles.dtype == np.dtype('float64')) 708*890232f2SAndroid Build Coastguard Worker asserter(VectorOfDoubles[0] == np.finfo('float64').min) 709*890232f2SAndroid Build Coastguard Worker asserter(VectorOfDoubles[1] == 0.0) 710*890232f2SAndroid Build Coastguard Worker asserter(VectorOfDoubles[2] == np.finfo('float64').max) 711*890232f2SAndroid Build Coastguard Worker 712*890232f2SAndroid Build Coastguard Worker except ImportError: 713*890232f2SAndroid Build Coastguard Worker # If numpy does not exist, trying to get vector as numpy 714*890232f2SAndroid Build Coastguard Worker # array should raise NumpyRequiredForThisFeature. The way 715*890232f2SAndroid Build Coastguard Worker # assertRaises has been implemented prevents us from 716*890232f2SAndroid Build Coastguard Worker # asserting this error is raised outside of a test case. 717*890232f2SAndroid Build Coastguard Worker pass 718*890232f2SAndroid Build Coastguard Worker 719*890232f2SAndroid Build Coastguard Worker asserter(monster.Test4Length() == 2) 720*890232f2SAndroid Build Coastguard Worker asserter(not monster.Test4IsNone()) 721*890232f2SAndroid Build Coastguard Worker 722*890232f2SAndroid Build Coastguard Worker # create a 'Test' object and populate it: 723*890232f2SAndroid Build Coastguard Worker test0 = monster.Test4(0) 724*890232f2SAndroid Build Coastguard Worker asserter(type(test0) is _TEST.Test) 725*890232f2SAndroid Build Coastguard Worker 726*890232f2SAndroid Build Coastguard Worker test1 = monster.Test4(1) 727*890232f2SAndroid Build Coastguard Worker asserter(type(test1) is _TEST.Test) 728*890232f2SAndroid Build Coastguard Worker 729*890232f2SAndroid Build Coastguard Worker # the position of test0 and test1 are swapped in monsterdata_java_wire 730*890232f2SAndroid Build Coastguard Worker # and monsterdata_test_wire, so ignore ordering 731*890232f2SAndroid Build Coastguard Worker v0 = test0.A() 732*890232f2SAndroid Build Coastguard Worker v1 = test0.B() 733*890232f2SAndroid Build Coastguard Worker v2 = test1.A() 734*890232f2SAndroid Build Coastguard Worker v3 = test1.B() 735*890232f2SAndroid Build Coastguard Worker sumtest12 = int(v0) + int(v1) + int(v2) + int(v3) 736*890232f2SAndroid Build Coastguard Worker 737*890232f2SAndroid Build Coastguard Worker asserter(sumtest12 == 100) 738*890232f2SAndroid Build Coastguard Worker 739*890232f2SAndroid Build Coastguard Worker asserter(not monster.TestarrayofstringIsNone()) 740*890232f2SAndroid Build Coastguard Worker asserter(monster.TestarrayofstringLength() == 2) 741*890232f2SAndroid Build Coastguard Worker asserter(monster.Testarrayofstring(0) == b'test1') 742*890232f2SAndroid Build Coastguard Worker asserter(monster.Testarrayofstring(1) == b'test2') 743*890232f2SAndroid Build Coastguard Worker 744*890232f2SAndroid Build Coastguard Worker asserter(monster.TestarrayoftablesIsNone()) 745*890232f2SAndroid Build Coastguard Worker asserter(monster.TestarrayoftablesLength() == 0) 746*890232f2SAndroid Build Coastguard Worker asserter(monster.TestnestedflatbufferIsNone()) 747*890232f2SAndroid Build Coastguard Worker asserter(monster.TestnestedflatbufferLength() == 0) 748*890232f2SAndroid Build Coastguard Worker asserter(monster.Testempty() is None) 749*890232f2SAndroid Build Coastguard Worker 750*890232f2SAndroid Build Coastguard Worker 751*890232f2SAndroid Build Coastguard Workerclass TestFuzz(unittest.TestCase): 752*890232f2SAndroid Build Coastguard Worker """ Low level stress/fuzz test: serialize/deserialize a variety of 753*890232f2SAndroid Build Coastguard Worker 754*890232f2SAndroid Build Coastguard Worker different kinds of data in different combinations 755*890232f2SAndroid Build Coastguard Worker """ 756*890232f2SAndroid Build Coastguard Worker 757*890232f2SAndroid Build Coastguard Worker binary_type = compat.binary_types[0] # this will always exist 758*890232f2SAndroid Build Coastguard Worker ofInt32Bytes = binary_type([0x83, 0x33, 0x33, 0x33]) 759*890232f2SAndroid Build Coastguard Worker ofInt64Bytes = binary_type([0x84, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44]) 760*890232f2SAndroid Build Coastguard Worker overflowingInt32Val = flatbuffers.encode.Get(flatbuffers.packer.int32, 761*890232f2SAndroid Build Coastguard Worker ofInt32Bytes, 0) 762*890232f2SAndroid Build Coastguard Worker overflowingInt64Val = flatbuffers.encode.Get(flatbuffers.packer.int64, 763*890232f2SAndroid Build Coastguard Worker ofInt64Bytes, 0) 764*890232f2SAndroid Build Coastguard Worker 765*890232f2SAndroid Build Coastguard Worker # Values we're testing against: chosen to ensure no bits get chopped 766*890232f2SAndroid Build Coastguard Worker # off anywhere, and also be different from eachother. 767*890232f2SAndroid Build Coastguard Worker boolVal = True 768*890232f2SAndroid Build Coastguard Worker int8Val = N.Int8Flags.py_type(-127) # 0x81 769*890232f2SAndroid Build Coastguard Worker uint8Val = N.Uint8Flags.py_type(0xFF) 770*890232f2SAndroid Build Coastguard Worker int16Val = N.Int16Flags.py_type(-32222) # 0x8222 771*890232f2SAndroid Build Coastguard Worker uint16Val = N.Uint16Flags.py_type(0xFEEE) 772*890232f2SAndroid Build Coastguard Worker int32Val = N.Int32Flags.py_type(overflowingInt32Val) 773*890232f2SAndroid Build Coastguard Worker uint32Val = N.Uint32Flags.py_type(0xFDDDDDDD) 774*890232f2SAndroid Build Coastguard Worker int64Val = N.Int64Flags.py_type(overflowingInt64Val) 775*890232f2SAndroid Build Coastguard Worker uint64Val = N.Uint64Flags.py_type(0xFCCCCCCCCCCCCCCC) 776*890232f2SAndroid Build Coastguard Worker # Python uses doubles, so force it here 777*890232f2SAndroid Build Coastguard Worker float32Val = N.Float32Flags.py_type(ctypes.c_float(3.14159).value) 778*890232f2SAndroid Build Coastguard Worker float64Val = N.Float64Flags.py_type(3.14159265359) 779*890232f2SAndroid Build Coastguard Worker 780*890232f2SAndroid Build Coastguard Worker def test_fuzz(self): 781*890232f2SAndroid Build Coastguard Worker return self.check_once(11, 100) 782*890232f2SAndroid Build Coastguard Worker 783*890232f2SAndroid Build Coastguard Worker def check_once(self, fuzzFields, fuzzObjects): 784*890232f2SAndroid Build Coastguard Worker testValuesMax = 11 # hardcoded to the number of scalar types 785*890232f2SAndroid Build Coastguard Worker 786*890232f2SAndroid Build Coastguard Worker builder = flatbuffers.Builder(0) 787*890232f2SAndroid Build Coastguard Worker l = LCG() 788*890232f2SAndroid Build Coastguard Worker 789*890232f2SAndroid Build Coastguard Worker objects = [0 for _ in compat_range(fuzzObjects)] 790*890232f2SAndroid Build Coastguard Worker 791*890232f2SAndroid Build Coastguard Worker # Generate fuzzObjects random objects each consisting of 792*890232f2SAndroid Build Coastguard Worker # fuzzFields fields, each of a random type. 793*890232f2SAndroid Build Coastguard Worker for i in compat_range(fuzzObjects): 794*890232f2SAndroid Build Coastguard Worker builder.StartObject(fuzzFields) 795*890232f2SAndroid Build Coastguard Worker 796*890232f2SAndroid Build Coastguard Worker for j in compat_range(fuzzFields): 797*890232f2SAndroid Build Coastguard Worker choice = int(l.Next()) % testValuesMax 798*890232f2SAndroid Build Coastguard Worker if choice == 0: 799*890232f2SAndroid Build Coastguard Worker builder.PrependBoolSlot(int(j), self.boolVal, False) 800*890232f2SAndroid Build Coastguard Worker elif choice == 1: 801*890232f2SAndroid Build Coastguard Worker builder.PrependInt8Slot(int(j), self.int8Val, 0) 802*890232f2SAndroid Build Coastguard Worker elif choice == 2: 803*890232f2SAndroid Build Coastguard Worker builder.PrependUint8Slot(int(j), self.uint8Val, 0) 804*890232f2SAndroid Build Coastguard Worker elif choice == 3: 805*890232f2SAndroid Build Coastguard Worker builder.PrependInt16Slot(int(j), self.int16Val, 0) 806*890232f2SAndroid Build Coastguard Worker elif choice == 4: 807*890232f2SAndroid Build Coastguard Worker builder.PrependUint16Slot(int(j), self.uint16Val, 0) 808*890232f2SAndroid Build Coastguard Worker elif choice == 5: 809*890232f2SAndroid Build Coastguard Worker builder.PrependInt32Slot(int(j), self.int32Val, 0) 810*890232f2SAndroid Build Coastguard Worker elif choice == 6: 811*890232f2SAndroid Build Coastguard Worker builder.PrependUint32Slot(int(j), self.uint32Val, 0) 812*890232f2SAndroid Build Coastguard Worker elif choice == 7: 813*890232f2SAndroid Build Coastguard Worker builder.PrependInt64Slot(int(j), self.int64Val, 0) 814*890232f2SAndroid Build Coastguard Worker elif choice == 8: 815*890232f2SAndroid Build Coastguard Worker builder.PrependUint64Slot(int(j), self.uint64Val, 0) 816*890232f2SAndroid Build Coastguard Worker elif choice == 9: 817*890232f2SAndroid Build Coastguard Worker builder.PrependFloat32Slot(int(j), self.float32Val, 0) 818*890232f2SAndroid Build Coastguard Worker elif choice == 10: 819*890232f2SAndroid Build Coastguard Worker builder.PrependFloat64Slot(int(j), self.float64Val, 0) 820*890232f2SAndroid Build Coastguard Worker else: 821*890232f2SAndroid Build Coastguard Worker raise RuntimeError('unreachable') 822*890232f2SAndroid Build Coastguard Worker 823*890232f2SAndroid Build Coastguard Worker off = builder.EndObject() 824*890232f2SAndroid Build Coastguard Worker 825*890232f2SAndroid Build Coastguard Worker # store the offset from the end of the builder buffer, 826*890232f2SAndroid Build Coastguard Worker # since it will keep growing: 827*890232f2SAndroid Build Coastguard Worker objects[i] = off 828*890232f2SAndroid Build Coastguard Worker 829*890232f2SAndroid Build Coastguard Worker # Do some bookkeeping to generate stats on fuzzes: 830*890232f2SAndroid Build Coastguard Worker stats = defaultdict(int) 831*890232f2SAndroid Build Coastguard Worker 832*890232f2SAndroid Build Coastguard Worker def check(table, desc, want, got): 833*890232f2SAndroid Build Coastguard Worker stats[desc] += 1 834*890232f2SAndroid Build Coastguard Worker self.assertEqual(want, got, '%s != %s, %s' % (want, got, desc)) 835*890232f2SAndroid Build Coastguard Worker 836*890232f2SAndroid Build Coastguard Worker l = LCG() # Reset. 837*890232f2SAndroid Build Coastguard Worker 838*890232f2SAndroid Build Coastguard Worker # Test that all objects we generated are readable and return the 839*890232f2SAndroid Build Coastguard Worker # expected values. We generate random objects in the same order 840*890232f2SAndroid Build Coastguard Worker # so this is deterministic. 841*890232f2SAndroid Build Coastguard Worker for i in compat_range(fuzzObjects): 842*890232f2SAndroid Build Coastguard Worker 843*890232f2SAndroid Build Coastguard Worker table = flatbuffers.table.Table(builder.Bytes, 844*890232f2SAndroid Build Coastguard Worker len(builder.Bytes) - objects[i]) 845*890232f2SAndroid Build Coastguard Worker 846*890232f2SAndroid Build Coastguard Worker for j in compat_range(fuzzFields): 847*890232f2SAndroid Build Coastguard Worker field_count = flatbuffers.builder.VtableMetadataFields + j 848*890232f2SAndroid Build Coastguard Worker f = N.VOffsetTFlags.py_type(field_count * N.VOffsetTFlags.bytewidth) 849*890232f2SAndroid Build Coastguard Worker choice = int(l.Next()) % testValuesMax 850*890232f2SAndroid Build Coastguard Worker 851*890232f2SAndroid Build Coastguard Worker if choice == 0: 852*890232f2SAndroid Build Coastguard Worker check(table, 'bool', self.boolVal, 853*890232f2SAndroid Build Coastguard Worker table.GetSlot(f, False, N.BoolFlags)) 854*890232f2SAndroid Build Coastguard Worker elif choice == 1: 855*890232f2SAndroid Build Coastguard Worker check(table, 'int8', self.int8Val, table.GetSlot(f, 0, N.Int8Flags)) 856*890232f2SAndroid Build Coastguard Worker elif choice == 2: 857*890232f2SAndroid Build Coastguard Worker check(table, 'uint8', self.uint8Val, 858*890232f2SAndroid Build Coastguard Worker table.GetSlot(f, 0, N.Uint8Flags)) 859*890232f2SAndroid Build Coastguard Worker elif choice == 3: 860*890232f2SAndroid Build Coastguard Worker check(table, 'int16', self.int16Val, 861*890232f2SAndroid Build Coastguard Worker table.GetSlot(f, 0, N.Int16Flags)) 862*890232f2SAndroid Build Coastguard Worker elif choice == 4: 863*890232f2SAndroid Build Coastguard Worker check(table, 'uint16', self.uint16Val, 864*890232f2SAndroid Build Coastguard Worker table.GetSlot(f, 0, N.Uint16Flags)) 865*890232f2SAndroid Build Coastguard Worker elif choice == 5: 866*890232f2SAndroid Build Coastguard Worker check(table, 'int32', self.int32Val, 867*890232f2SAndroid Build Coastguard Worker table.GetSlot(f, 0, N.Int32Flags)) 868*890232f2SAndroid Build Coastguard Worker elif choice == 6: 869*890232f2SAndroid Build Coastguard Worker check(table, 'uint32', self.uint32Val, 870*890232f2SAndroid Build Coastguard Worker table.GetSlot(f, 0, N.Uint32Flags)) 871*890232f2SAndroid Build Coastguard Worker elif choice == 7: 872*890232f2SAndroid Build Coastguard Worker check(table, 'int64', self.int64Val, 873*890232f2SAndroid Build Coastguard Worker table.GetSlot(f, 0, N.Int64Flags)) 874*890232f2SAndroid Build Coastguard Worker elif choice == 8: 875*890232f2SAndroid Build Coastguard Worker check(table, 'uint64', self.uint64Val, 876*890232f2SAndroid Build Coastguard Worker table.GetSlot(f, 0, N.Uint64Flags)) 877*890232f2SAndroid Build Coastguard Worker elif choice == 9: 878*890232f2SAndroid Build Coastguard Worker check(table, 'float32', self.float32Val, 879*890232f2SAndroid Build Coastguard Worker table.GetSlot(f, 0, N.Float32Flags)) 880*890232f2SAndroid Build Coastguard Worker elif choice == 10: 881*890232f2SAndroid Build Coastguard Worker check(table, 'float64', self.float64Val, 882*890232f2SAndroid Build Coastguard Worker table.GetSlot(f, 0, N.Float64Flags)) 883*890232f2SAndroid Build Coastguard Worker else: 884*890232f2SAndroid Build Coastguard Worker raise RuntimeError('unreachable') 885*890232f2SAndroid Build Coastguard Worker 886*890232f2SAndroid Build Coastguard Worker # If enough checks were made, verify that all scalar types were used: 887*890232f2SAndroid Build Coastguard Worker self.assertEqual(testValuesMax, len(stats), 888*890232f2SAndroid Build Coastguard Worker 'fuzzing failed to test all scalar types: %s' % stats) 889*890232f2SAndroid Build Coastguard Worker 890*890232f2SAndroid Build Coastguard Worker 891*890232f2SAndroid Build Coastguard Workerclass TestByteLayout(unittest.TestCase): 892*890232f2SAndroid Build Coastguard Worker """ TestByteLayout checks the bytes of a Builder in various scenarios. """ 893*890232f2SAndroid Build Coastguard Worker 894*890232f2SAndroid Build Coastguard Worker def assertBuilderEquals(self, builder, want_chars_or_ints): 895*890232f2SAndroid Build Coastguard Worker 896*890232f2SAndroid Build Coastguard Worker def integerize(x): 897*890232f2SAndroid Build Coastguard Worker if isinstance(x, compat.string_types): 898*890232f2SAndroid Build Coastguard Worker return ord(x) 899*890232f2SAndroid Build Coastguard Worker return x 900*890232f2SAndroid Build Coastguard Worker 901*890232f2SAndroid Build Coastguard Worker want_ints = list(map(integerize, want_chars_or_ints)) 902*890232f2SAndroid Build Coastguard Worker want = bytearray(want_ints) 903*890232f2SAndroid Build Coastguard Worker got = builder.Bytes[builder.Head():] # use the buffer directly 904*890232f2SAndroid Build Coastguard Worker self.assertEqual(want, got) 905*890232f2SAndroid Build Coastguard Worker 906*890232f2SAndroid Build Coastguard Worker def test_numbers(self): 907*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 908*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals(b, []) 909*890232f2SAndroid Build Coastguard Worker b.PrependBool(True) 910*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals(b, [1]) 911*890232f2SAndroid Build Coastguard Worker b.PrependInt8(-127) 912*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals(b, [129, 1]) 913*890232f2SAndroid Build Coastguard Worker b.PrependUint8(255) 914*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals(b, [255, 129, 1]) 915*890232f2SAndroid Build Coastguard Worker b.PrependInt16(-32222) 916*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals(b, [0x22, 0x82, 0, 255, 129, 1]) # first pad 917*890232f2SAndroid Build Coastguard Worker b.PrependUint16(0xFEEE) 918*890232f2SAndroid Build Coastguard Worker # no pad this time: 919*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals(b, [0xEE, 0xFE, 0x22, 0x82, 0, 255, 129, 1]) 920*890232f2SAndroid Build Coastguard Worker b.PrependInt32(-53687092) 921*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals( 922*890232f2SAndroid Build Coastguard Worker b, [204, 204, 204, 252, 0xEE, 0xFE, 0x22, 0x82, 0, 255, 129, 1]) 923*890232f2SAndroid Build Coastguard Worker b.PrependUint32(0x98765432) 924*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals(b, [ 925*890232f2SAndroid Build Coastguard Worker 0x32, 0x54, 0x76, 0x98, 204, 204, 204, 252, 0xEE, 0xFE, 0x22, 0x82, 0, 926*890232f2SAndroid Build Coastguard Worker 255, 129, 1 927*890232f2SAndroid Build Coastguard Worker ]) 928*890232f2SAndroid Build Coastguard Worker 929*890232f2SAndroid Build Coastguard Worker def test_numbers64(self): 930*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 931*890232f2SAndroid Build Coastguard Worker b.PrependUint64(0x1122334455667788) 932*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals(b, 933*890232f2SAndroid Build Coastguard Worker [0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11]) 934*890232f2SAndroid Build Coastguard Worker 935*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 936*890232f2SAndroid Build Coastguard Worker b.PrependInt64(0x1122334455667788) 937*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals(b, 938*890232f2SAndroid Build Coastguard Worker [0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11]) 939*890232f2SAndroid Build Coastguard Worker 940*890232f2SAndroid Build Coastguard Worker def test_1xbyte_vector(self): 941*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 942*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals(b, []) 943*890232f2SAndroid Build Coastguard Worker b.StartVector(flatbuffers.number_types.Uint8Flags.bytewidth, 1, 1) 944*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals(b, [0, 0, 0]) # align to 4bytes 945*890232f2SAndroid Build Coastguard Worker b.PrependByte(1) 946*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals(b, [1, 0, 0, 0]) 947*890232f2SAndroid Build Coastguard Worker b.EndVector() 948*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals(b, [1, 0, 0, 0, 1, 0, 0, 0]) # padding 949*890232f2SAndroid Build Coastguard Worker 950*890232f2SAndroid Build Coastguard Worker def test_2xbyte_vector(self): 951*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 952*890232f2SAndroid Build Coastguard Worker b.StartVector(flatbuffers.number_types.Uint8Flags.bytewidth, 2, 1) 953*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals(b, [0, 0]) # align to 4bytes 954*890232f2SAndroid Build Coastguard Worker b.PrependByte(1) 955*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals(b, [1, 0, 0]) 956*890232f2SAndroid Build Coastguard Worker b.PrependByte(2) 957*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals(b, [2, 1, 0, 0]) 958*890232f2SAndroid Build Coastguard Worker b.EndVector() 959*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals(b, [2, 0, 0, 0, 2, 1, 0, 0]) # padding 960*890232f2SAndroid Build Coastguard Worker 961*890232f2SAndroid Build Coastguard Worker def test_1xuint16_vector(self): 962*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 963*890232f2SAndroid Build Coastguard Worker b.StartVector(flatbuffers.number_types.Uint16Flags.bytewidth, 1, 1) 964*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals(b, [0, 0]) # align to 4bytes 965*890232f2SAndroid Build Coastguard Worker b.PrependUint16(1) 966*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals(b, [1, 0, 0, 0]) 967*890232f2SAndroid Build Coastguard Worker b.EndVector() 968*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals(b, [1, 0, 0, 0, 1, 0, 0, 0]) # padding 969*890232f2SAndroid Build Coastguard Worker 970*890232f2SAndroid Build Coastguard Worker def test_2xuint16_vector(self): 971*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 972*890232f2SAndroid Build Coastguard Worker b.StartVector(flatbuffers.number_types.Uint16Flags.bytewidth, 2, 1) 973*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals(b, []) # align to 4bytes 974*890232f2SAndroid Build Coastguard Worker b.PrependUint16(0xABCD) 975*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals(b, [0xCD, 0xAB]) 976*890232f2SAndroid Build Coastguard Worker b.PrependUint16(0xDCBA) 977*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals(b, [0xBA, 0xDC, 0xCD, 0xAB]) 978*890232f2SAndroid Build Coastguard Worker b.EndVector() 979*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals(b, [2, 0, 0, 0, 0xBA, 0xDC, 0xCD, 0xAB]) 980*890232f2SAndroid Build Coastguard Worker 981*890232f2SAndroid Build Coastguard Worker def test_create_ascii_string(self): 982*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 983*890232f2SAndroid Build Coastguard Worker b.CreateString(u'foo', encoding='ascii') 984*890232f2SAndroid Build Coastguard Worker 985*890232f2SAndroid Build Coastguard Worker # 0-terminated, no pad: 986*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals(b, [3, 0, 0, 0, 'f', 'o', 'o', 0]) 987*890232f2SAndroid Build Coastguard Worker b.CreateString(u'moop', encoding='ascii') 988*890232f2SAndroid Build Coastguard Worker # 0-terminated, 3-byte pad: 989*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals(b, [ 990*890232f2SAndroid Build Coastguard Worker 4, 0, 0, 0, 'm', 'o', 'o', 'p', 0, 0, 0, 0, 3, 0, 0, 0, 'f', 'o', 'o', 0 991*890232f2SAndroid Build Coastguard Worker ]) 992*890232f2SAndroid Build Coastguard Worker 993*890232f2SAndroid Build Coastguard Worker def test_create_utf8_string(self): 994*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 995*890232f2SAndroid Build Coastguard Worker b.CreateString(u'Цлїςσδε') 996*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals(b, '\x0e\x00\x00\x00\xd0\xa6\xd0\xbb\xd1\x97' \ 997*890232f2SAndroid Build Coastguard Worker '\xcf\x82\xcf\x83\xce\xb4\xce\xb5\x00\x00') 998*890232f2SAndroid Build Coastguard Worker 999*890232f2SAndroid Build Coastguard Worker b.CreateString(u'フムアムカモケモ') 1000*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals(b, '\x18\x00\x00\x00\xef\xbe\x8c\xef\xbe\x91' \ 1001*890232f2SAndroid Build Coastguard Worker '\xef\xbd\xb1\xef\xbe\x91\xef\xbd\xb6\xef\xbe\x93\xef\xbd\xb9\xef' \ 1002*890232f2SAndroid Build Coastguard Worker '\xbe\x93\x00\x00\x00\x00\x0e\x00\x00\x00\xd0\xa6\xd0\xbb\xd1\x97' \ 1003*890232f2SAndroid Build Coastguard Worker '\xcf\x82\xcf\x83\xce\xb4\xce\xb5\x00\x00') 1004*890232f2SAndroid Build Coastguard Worker 1005*890232f2SAndroid Build Coastguard Worker def test_create_arbitrary_string(self): 1006*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1007*890232f2SAndroid Build Coastguard Worker s = '\x01\x02\x03' 1008*890232f2SAndroid Build Coastguard Worker b.CreateString(s) # Default encoding is utf-8. 1009*890232f2SAndroid Build Coastguard Worker # 0-terminated, no pad: 1010*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals(b, [3, 0, 0, 0, 1, 2, 3, 0]) 1011*890232f2SAndroid Build Coastguard Worker s2 = '\x04\x05\x06\x07' 1012*890232f2SAndroid Build Coastguard Worker b.CreateString(s2) # Default encoding is utf-8. 1013*890232f2SAndroid Build Coastguard Worker # 0-terminated, 3-byte pad: 1014*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals( 1015*890232f2SAndroid Build Coastguard Worker b, [4, 0, 0, 0, 4, 5, 6, 7, 0, 0, 0, 0, 3, 0, 0, 0, 1, 2, 3, 0]) 1016*890232f2SAndroid Build Coastguard Worker 1017*890232f2SAndroid Build Coastguard Worker def test_create_byte_vector(self): 1018*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1019*890232f2SAndroid Build Coastguard Worker b.CreateByteVector(b'') 1020*890232f2SAndroid Build Coastguard Worker # 0-byte pad: 1021*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals(b, [0, 0, 0, 0]) 1022*890232f2SAndroid Build Coastguard Worker 1023*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1024*890232f2SAndroid Build Coastguard Worker b.CreateByteVector(b'\x01\x02\x03') 1025*890232f2SAndroid Build Coastguard Worker # 1-byte pad: 1026*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals(b, [3, 0, 0, 0, 1, 2, 3, 0]) 1027*890232f2SAndroid Build Coastguard Worker 1028*890232f2SAndroid Build Coastguard Worker def test_create_numpy_vector_int8(self): 1029*890232f2SAndroid Build Coastguard Worker try: 1030*890232f2SAndroid Build Coastguard Worker imp.find_module('numpy') 1031*890232f2SAndroid Build Coastguard Worker # if numpy exists, then we should be able to get the 1032*890232f2SAndroid Build Coastguard Worker # vector as a numpy array 1033*890232f2SAndroid Build Coastguard Worker import numpy as np 1034*890232f2SAndroid Build Coastguard Worker 1035*890232f2SAndroid Build Coastguard Worker # Systems endian: 1036*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1037*890232f2SAndroid Build Coastguard Worker x = np.array([1, 2, -3], dtype=np.int8) 1038*890232f2SAndroid Build Coastguard Worker b.CreateNumpyVector(x) 1039*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals( 1040*890232f2SAndroid Build Coastguard Worker b, 1041*890232f2SAndroid Build Coastguard Worker [ 1042*890232f2SAndroid Build Coastguard Worker 3, 1043*890232f2SAndroid Build Coastguard Worker 0, 1044*890232f2SAndroid Build Coastguard Worker 0, 1045*890232f2SAndroid Build Coastguard Worker 0, # vector length 1046*890232f2SAndroid Build Coastguard Worker 1, 1047*890232f2SAndroid Build Coastguard Worker 2, 1048*890232f2SAndroid Build Coastguard Worker 256 - 3, 1049*890232f2SAndroid Build Coastguard Worker 0 # vector value + padding 1050*890232f2SAndroid Build Coastguard Worker ]) 1051*890232f2SAndroid Build Coastguard Worker 1052*890232f2SAndroid Build Coastguard Worker # Reverse endian: 1053*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1054*890232f2SAndroid Build Coastguard Worker x_other_endian = x.byteswap().newbyteorder() 1055*890232f2SAndroid Build Coastguard Worker b.CreateNumpyVector(x_other_endian) 1056*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals( 1057*890232f2SAndroid Build Coastguard Worker b, 1058*890232f2SAndroid Build Coastguard Worker [ 1059*890232f2SAndroid Build Coastguard Worker 3, 1060*890232f2SAndroid Build Coastguard Worker 0, 1061*890232f2SAndroid Build Coastguard Worker 0, 1062*890232f2SAndroid Build Coastguard Worker 0, # vector length 1063*890232f2SAndroid Build Coastguard Worker 1, 1064*890232f2SAndroid Build Coastguard Worker 2, 1065*890232f2SAndroid Build Coastguard Worker 256 - 3, 1066*890232f2SAndroid Build Coastguard Worker 0 # vector value + padding 1067*890232f2SAndroid Build Coastguard Worker ]) 1068*890232f2SAndroid Build Coastguard Worker except ImportError: 1069*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1070*890232f2SAndroid Build Coastguard Worker x = 0 1071*890232f2SAndroid Build Coastguard Worker assertRaises(self, lambda: b.CreateNumpyVector(x), 1072*890232f2SAndroid Build Coastguard Worker NumpyRequiredForThisFeature) 1073*890232f2SAndroid Build Coastguard Worker 1074*890232f2SAndroid Build Coastguard Worker def test_create_numpy_vector_uint16(self): 1075*890232f2SAndroid Build Coastguard Worker try: 1076*890232f2SAndroid Build Coastguard Worker imp.find_module('numpy') 1077*890232f2SAndroid Build Coastguard Worker # if numpy exists, then we should be able to get the 1078*890232f2SAndroid Build Coastguard Worker # vector as a numpy array 1079*890232f2SAndroid Build Coastguard Worker import numpy as np 1080*890232f2SAndroid Build Coastguard Worker 1081*890232f2SAndroid Build Coastguard Worker # Systems endian: 1082*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1083*890232f2SAndroid Build Coastguard Worker x = np.array([1, 2, 312], dtype=np.uint16) 1084*890232f2SAndroid Build Coastguard Worker b.CreateNumpyVector(x) 1085*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals( 1086*890232f2SAndroid Build Coastguard Worker b, 1087*890232f2SAndroid Build Coastguard Worker [ 1088*890232f2SAndroid Build Coastguard Worker 3, 1089*890232f2SAndroid Build Coastguard Worker 0, 1090*890232f2SAndroid Build Coastguard Worker 0, 1091*890232f2SAndroid Build Coastguard Worker 0, # vector length 1092*890232f2SAndroid Build Coastguard Worker 1, 1093*890232f2SAndroid Build Coastguard Worker 0, # 1 1094*890232f2SAndroid Build Coastguard Worker 2, 1095*890232f2SAndroid Build Coastguard Worker 0, # 2 1096*890232f2SAndroid Build Coastguard Worker 312 - 256, 1097*890232f2SAndroid Build Coastguard Worker 1, # 312 1098*890232f2SAndroid Build Coastguard Worker 0, 1099*890232f2SAndroid Build Coastguard Worker 0 # padding 1100*890232f2SAndroid Build Coastguard Worker ]) 1101*890232f2SAndroid Build Coastguard Worker 1102*890232f2SAndroid Build Coastguard Worker # Reverse endian: 1103*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1104*890232f2SAndroid Build Coastguard Worker x_other_endian = x.byteswap().newbyteorder() 1105*890232f2SAndroid Build Coastguard Worker b.CreateNumpyVector(x_other_endian) 1106*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals( 1107*890232f2SAndroid Build Coastguard Worker b, 1108*890232f2SAndroid Build Coastguard Worker [ 1109*890232f2SAndroid Build Coastguard Worker 3, 1110*890232f2SAndroid Build Coastguard Worker 0, 1111*890232f2SAndroid Build Coastguard Worker 0, 1112*890232f2SAndroid Build Coastguard Worker 0, # vector length 1113*890232f2SAndroid Build Coastguard Worker 1, 1114*890232f2SAndroid Build Coastguard Worker 0, # 1 1115*890232f2SAndroid Build Coastguard Worker 2, 1116*890232f2SAndroid Build Coastguard Worker 0, # 2 1117*890232f2SAndroid Build Coastguard Worker 312 - 256, 1118*890232f2SAndroid Build Coastguard Worker 1, # 312 1119*890232f2SAndroid Build Coastguard Worker 0, 1120*890232f2SAndroid Build Coastguard Worker 0 # padding 1121*890232f2SAndroid Build Coastguard Worker ]) 1122*890232f2SAndroid Build Coastguard Worker except ImportError: 1123*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1124*890232f2SAndroid Build Coastguard Worker x = 0 1125*890232f2SAndroid Build Coastguard Worker assertRaises(self, lambda: b.CreateNumpyVector(x), 1126*890232f2SAndroid Build Coastguard Worker NumpyRequiredForThisFeature) 1127*890232f2SAndroid Build Coastguard Worker 1128*890232f2SAndroid Build Coastguard Worker def test_create_numpy_vector_int64(self): 1129*890232f2SAndroid Build Coastguard Worker try: 1130*890232f2SAndroid Build Coastguard Worker imp.find_module('numpy') 1131*890232f2SAndroid Build Coastguard Worker # if numpy exists, then we should be able to get the 1132*890232f2SAndroid Build Coastguard Worker # vector as a numpy array 1133*890232f2SAndroid Build Coastguard Worker import numpy as np 1134*890232f2SAndroid Build Coastguard Worker 1135*890232f2SAndroid Build Coastguard Worker # Systems endian: 1136*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1137*890232f2SAndroid Build Coastguard Worker x = np.array([1, 2, -12], dtype=np.int64) 1138*890232f2SAndroid Build Coastguard Worker b.CreateNumpyVector(x) 1139*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals( 1140*890232f2SAndroid Build Coastguard Worker b, 1141*890232f2SAndroid Build Coastguard Worker [ 1142*890232f2SAndroid Build Coastguard Worker 3, 1143*890232f2SAndroid Build Coastguard Worker 0, 1144*890232f2SAndroid Build Coastguard Worker 0, 1145*890232f2SAndroid Build Coastguard Worker 0, # vector length 1146*890232f2SAndroid Build Coastguard Worker 1, 1147*890232f2SAndroid Build Coastguard Worker 0, 1148*890232f2SAndroid Build Coastguard Worker 0, 1149*890232f2SAndroid Build Coastguard Worker 0, 1150*890232f2SAndroid Build Coastguard Worker 0, 1151*890232f2SAndroid Build Coastguard Worker 0, 1152*890232f2SAndroid Build Coastguard Worker 0, 1153*890232f2SAndroid Build Coastguard Worker 0, # 1 1154*890232f2SAndroid Build Coastguard Worker 2, 1155*890232f2SAndroid Build Coastguard Worker 0, 1156*890232f2SAndroid Build Coastguard Worker 0, 1157*890232f2SAndroid Build Coastguard Worker 0, 1158*890232f2SAndroid Build Coastguard Worker 0, 1159*890232f2SAndroid Build Coastguard Worker 0, 1160*890232f2SAndroid Build Coastguard Worker 0, 1161*890232f2SAndroid Build Coastguard Worker 0, # 2 1162*890232f2SAndroid Build Coastguard Worker 256 - 12, 1163*890232f2SAndroid Build Coastguard Worker 255, 1164*890232f2SAndroid Build Coastguard Worker 255, 1165*890232f2SAndroid Build Coastguard Worker 255, 1166*890232f2SAndroid Build Coastguard Worker 255, 1167*890232f2SAndroid Build Coastguard Worker 255, 1168*890232f2SAndroid Build Coastguard Worker 255, 1169*890232f2SAndroid Build Coastguard Worker 255 # -12 1170*890232f2SAndroid Build Coastguard Worker ]) 1171*890232f2SAndroid Build Coastguard Worker 1172*890232f2SAndroid Build Coastguard Worker # Reverse endian: 1173*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1174*890232f2SAndroid Build Coastguard Worker x_other_endian = x.byteswap().newbyteorder() 1175*890232f2SAndroid Build Coastguard Worker b.CreateNumpyVector(x_other_endian) 1176*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals( 1177*890232f2SAndroid Build Coastguard Worker b, 1178*890232f2SAndroid Build Coastguard Worker [ 1179*890232f2SAndroid Build Coastguard Worker 3, 1180*890232f2SAndroid Build Coastguard Worker 0, 1181*890232f2SAndroid Build Coastguard Worker 0, 1182*890232f2SAndroid Build Coastguard Worker 0, # vector length 1183*890232f2SAndroid Build Coastguard Worker 1, 1184*890232f2SAndroid Build Coastguard Worker 0, 1185*890232f2SAndroid Build Coastguard Worker 0, 1186*890232f2SAndroid Build Coastguard Worker 0, 1187*890232f2SAndroid Build Coastguard Worker 0, 1188*890232f2SAndroid Build Coastguard Worker 0, 1189*890232f2SAndroid Build Coastguard Worker 0, 1190*890232f2SAndroid Build Coastguard Worker 0, # 1 1191*890232f2SAndroid Build Coastguard Worker 2, 1192*890232f2SAndroid Build Coastguard Worker 0, 1193*890232f2SAndroid Build Coastguard Worker 0, 1194*890232f2SAndroid Build Coastguard Worker 0, 1195*890232f2SAndroid Build Coastguard Worker 0, 1196*890232f2SAndroid Build Coastguard Worker 0, 1197*890232f2SAndroid Build Coastguard Worker 0, 1198*890232f2SAndroid Build Coastguard Worker 0, # 2 1199*890232f2SAndroid Build Coastguard Worker 256 - 12, 1200*890232f2SAndroid Build Coastguard Worker 255, 1201*890232f2SAndroid Build Coastguard Worker 255, 1202*890232f2SAndroid Build Coastguard Worker 255, 1203*890232f2SAndroid Build Coastguard Worker 255, 1204*890232f2SAndroid Build Coastguard Worker 255, 1205*890232f2SAndroid Build Coastguard Worker 255, 1206*890232f2SAndroid Build Coastguard Worker 255 # -12 1207*890232f2SAndroid Build Coastguard Worker ]) 1208*890232f2SAndroid Build Coastguard Worker 1209*890232f2SAndroid Build Coastguard Worker except ImportError: 1210*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1211*890232f2SAndroid Build Coastguard Worker x = 0 1212*890232f2SAndroid Build Coastguard Worker assertRaises(self, lambda: b.CreateNumpyVector(x), 1213*890232f2SAndroid Build Coastguard Worker NumpyRequiredForThisFeature) 1214*890232f2SAndroid Build Coastguard Worker 1215*890232f2SAndroid Build Coastguard Worker def test_create_numpy_vector_float32(self): 1216*890232f2SAndroid Build Coastguard Worker try: 1217*890232f2SAndroid Build Coastguard Worker imp.find_module('numpy') 1218*890232f2SAndroid Build Coastguard Worker # if numpy exists, then we should be able to get the 1219*890232f2SAndroid Build Coastguard Worker # vector as a numpy array 1220*890232f2SAndroid Build Coastguard Worker import numpy as np 1221*890232f2SAndroid Build Coastguard Worker 1222*890232f2SAndroid Build Coastguard Worker # Systems endian: 1223*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1224*890232f2SAndroid Build Coastguard Worker x = np.array([1, 2, -12], dtype=np.float32) 1225*890232f2SAndroid Build Coastguard Worker b.CreateNumpyVector(x) 1226*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals( 1227*890232f2SAndroid Build Coastguard Worker b, 1228*890232f2SAndroid Build Coastguard Worker [ 1229*890232f2SAndroid Build Coastguard Worker 3, 1230*890232f2SAndroid Build Coastguard Worker 0, 1231*890232f2SAndroid Build Coastguard Worker 0, 1232*890232f2SAndroid Build Coastguard Worker 0, # vector length 1233*890232f2SAndroid Build Coastguard Worker 0, 1234*890232f2SAndroid Build Coastguard Worker 0, 1235*890232f2SAndroid Build Coastguard Worker 128, 1236*890232f2SAndroid Build Coastguard Worker 63, # 1 1237*890232f2SAndroid Build Coastguard Worker 0, 1238*890232f2SAndroid Build Coastguard Worker 0, 1239*890232f2SAndroid Build Coastguard Worker 0, 1240*890232f2SAndroid Build Coastguard Worker 64, # 2 1241*890232f2SAndroid Build Coastguard Worker 0, 1242*890232f2SAndroid Build Coastguard Worker 0, 1243*890232f2SAndroid Build Coastguard Worker 64, 1244*890232f2SAndroid Build Coastguard Worker 193 # -12 1245*890232f2SAndroid Build Coastguard Worker ]) 1246*890232f2SAndroid Build Coastguard Worker 1247*890232f2SAndroid Build Coastguard Worker # Reverse endian: 1248*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1249*890232f2SAndroid Build Coastguard Worker x_other_endian = x.byteswap().newbyteorder() 1250*890232f2SAndroid Build Coastguard Worker b.CreateNumpyVector(x_other_endian) 1251*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals( 1252*890232f2SAndroid Build Coastguard Worker b, 1253*890232f2SAndroid Build Coastguard Worker [ 1254*890232f2SAndroid Build Coastguard Worker 3, 1255*890232f2SAndroid Build Coastguard Worker 0, 1256*890232f2SAndroid Build Coastguard Worker 0, 1257*890232f2SAndroid Build Coastguard Worker 0, # vector length 1258*890232f2SAndroid Build Coastguard Worker 0, 1259*890232f2SAndroid Build Coastguard Worker 0, 1260*890232f2SAndroid Build Coastguard Worker 128, 1261*890232f2SAndroid Build Coastguard Worker 63, # 1 1262*890232f2SAndroid Build Coastguard Worker 0, 1263*890232f2SAndroid Build Coastguard Worker 0, 1264*890232f2SAndroid Build Coastguard Worker 0, 1265*890232f2SAndroid Build Coastguard Worker 64, # 2 1266*890232f2SAndroid Build Coastguard Worker 0, 1267*890232f2SAndroid Build Coastguard Worker 0, 1268*890232f2SAndroid Build Coastguard Worker 64, 1269*890232f2SAndroid Build Coastguard Worker 193 # -12 1270*890232f2SAndroid Build Coastguard Worker ]) 1271*890232f2SAndroid Build Coastguard Worker 1272*890232f2SAndroid Build Coastguard Worker except ImportError: 1273*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1274*890232f2SAndroid Build Coastguard Worker x = 0 1275*890232f2SAndroid Build Coastguard Worker assertRaises(self, lambda: b.CreateNumpyVector(x), 1276*890232f2SAndroid Build Coastguard Worker NumpyRequiredForThisFeature) 1277*890232f2SAndroid Build Coastguard Worker 1278*890232f2SAndroid Build Coastguard Worker def test_create_numpy_vector_float64(self): 1279*890232f2SAndroid Build Coastguard Worker try: 1280*890232f2SAndroid Build Coastguard Worker imp.find_module('numpy') 1281*890232f2SAndroid Build Coastguard Worker # if numpy exists, then we should be able to get the 1282*890232f2SAndroid Build Coastguard Worker # vector as a numpy array 1283*890232f2SAndroid Build Coastguard Worker import numpy as np 1284*890232f2SAndroid Build Coastguard Worker 1285*890232f2SAndroid Build Coastguard Worker # Systems endian: 1286*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1287*890232f2SAndroid Build Coastguard Worker x = np.array([1, 2, -12], dtype=np.float64) 1288*890232f2SAndroid Build Coastguard Worker b.CreateNumpyVector(x) 1289*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals( 1290*890232f2SAndroid Build Coastguard Worker b, 1291*890232f2SAndroid Build Coastguard Worker [ 1292*890232f2SAndroid Build Coastguard Worker 3, 1293*890232f2SAndroid Build Coastguard Worker 0, 1294*890232f2SAndroid Build Coastguard Worker 0, 1295*890232f2SAndroid Build Coastguard Worker 0, # vector length 1296*890232f2SAndroid Build Coastguard Worker 0, 1297*890232f2SAndroid Build Coastguard Worker 0, 1298*890232f2SAndroid Build Coastguard Worker 0, 1299*890232f2SAndroid Build Coastguard Worker 0, 1300*890232f2SAndroid Build Coastguard Worker 0, 1301*890232f2SAndroid Build Coastguard Worker 0, 1302*890232f2SAndroid Build Coastguard Worker 240, 1303*890232f2SAndroid Build Coastguard Worker 63, # 1 1304*890232f2SAndroid Build Coastguard Worker 0, 1305*890232f2SAndroid Build Coastguard Worker 0, 1306*890232f2SAndroid Build Coastguard Worker 0, 1307*890232f2SAndroid Build Coastguard Worker 0, 1308*890232f2SAndroid Build Coastguard Worker 0, 1309*890232f2SAndroid Build Coastguard Worker 0, 1310*890232f2SAndroid Build Coastguard Worker 0, 1311*890232f2SAndroid Build Coastguard Worker 64, # 2 1312*890232f2SAndroid Build Coastguard Worker 0, 1313*890232f2SAndroid Build Coastguard Worker 0, 1314*890232f2SAndroid Build Coastguard Worker 0, 1315*890232f2SAndroid Build Coastguard Worker 0, 1316*890232f2SAndroid Build Coastguard Worker 0, 1317*890232f2SAndroid Build Coastguard Worker 0, 1318*890232f2SAndroid Build Coastguard Worker 40, 1319*890232f2SAndroid Build Coastguard Worker 192 # -12 1320*890232f2SAndroid Build Coastguard Worker ]) 1321*890232f2SAndroid Build Coastguard Worker 1322*890232f2SAndroid Build Coastguard Worker # Reverse endian: 1323*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1324*890232f2SAndroid Build Coastguard Worker x_other_endian = x.byteswap().newbyteorder() 1325*890232f2SAndroid Build Coastguard Worker b.CreateNumpyVector(x_other_endian) 1326*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals( 1327*890232f2SAndroid Build Coastguard Worker b, 1328*890232f2SAndroid Build Coastguard Worker [ 1329*890232f2SAndroid Build Coastguard Worker 3, 1330*890232f2SAndroid Build Coastguard Worker 0, 1331*890232f2SAndroid Build Coastguard Worker 0, 1332*890232f2SAndroid Build Coastguard Worker 0, # vector length 1333*890232f2SAndroid Build Coastguard Worker 0, 1334*890232f2SAndroid Build Coastguard Worker 0, 1335*890232f2SAndroid Build Coastguard Worker 0, 1336*890232f2SAndroid Build Coastguard Worker 0, 1337*890232f2SAndroid Build Coastguard Worker 0, 1338*890232f2SAndroid Build Coastguard Worker 0, 1339*890232f2SAndroid Build Coastguard Worker 240, 1340*890232f2SAndroid Build Coastguard Worker 63, # 1 1341*890232f2SAndroid Build Coastguard Worker 0, 1342*890232f2SAndroid Build Coastguard Worker 0, 1343*890232f2SAndroid Build Coastguard Worker 0, 1344*890232f2SAndroid Build Coastguard Worker 0, 1345*890232f2SAndroid Build Coastguard Worker 0, 1346*890232f2SAndroid Build Coastguard Worker 0, 1347*890232f2SAndroid Build Coastguard Worker 0, 1348*890232f2SAndroid Build Coastguard Worker 64, # 2 1349*890232f2SAndroid Build Coastguard Worker 0, 1350*890232f2SAndroid Build Coastguard Worker 0, 1351*890232f2SAndroid Build Coastguard Worker 0, 1352*890232f2SAndroid Build Coastguard Worker 0, 1353*890232f2SAndroid Build Coastguard Worker 0, 1354*890232f2SAndroid Build Coastguard Worker 0, 1355*890232f2SAndroid Build Coastguard Worker 40, 1356*890232f2SAndroid Build Coastguard Worker 192 # -12 1357*890232f2SAndroid Build Coastguard Worker ]) 1358*890232f2SAndroid Build Coastguard Worker 1359*890232f2SAndroid Build Coastguard Worker except ImportError: 1360*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1361*890232f2SAndroid Build Coastguard Worker x = 0 1362*890232f2SAndroid Build Coastguard Worker assertRaises(self, lambda: b.CreateNumpyVector(x), 1363*890232f2SAndroid Build Coastguard Worker NumpyRequiredForThisFeature) 1364*890232f2SAndroid Build Coastguard Worker 1365*890232f2SAndroid Build Coastguard Worker def test_create_numpy_vector_bool(self): 1366*890232f2SAndroid Build Coastguard Worker try: 1367*890232f2SAndroid Build Coastguard Worker imp.find_module('numpy') 1368*890232f2SAndroid Build Coastguard Worker # if numpy exists, then we should be able to get the 1369*890232f2SAndroid Build Coastguard Worker # vector as a numpy array 1370*890232f2SAndroid Build Coastguard Worker import numpy as np 1371*890232f2SAndroid Build Coastguard Worker 1372*890232f2SAndroid Build Coastguard Worker # Systems endian: 1373*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1374*890232f2SAndroid Build Coastguard Worker x = np.array([True, False, True], dtype=np.bool) 1375*890232f2SAndroid Build Coastguard Worker b.CreateNumpyVector(x) 1376*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals( 1377*890232f2SAndroid Build Coastguard Worker b, 1378*890232f2SAndroid Build Coastguard Worker [ 1379*890232f2SAndroid Build Coastguard Worker 3, 1380*890232f2SAndroid Build Coastguard Worker 0, 1381*890232f2SAndroid Build Coastguard Worker 0, 1382*890232f2SAndroid Build Coastguard Worker 0, # vector length 1383*890232f2SAndroid Build Coastguard Worker 1, 1384*890232f2SAndroid Build Coastguard Worker 0, 1385*890232f2SAndroid Build Coastguard Worker 1, 1386*890232f2SAndroid Build Coastguard Worker 0 # vector values + padding 1387*890232f2SAndroid Build Coastguard Worker ]) 1388*890232f2SAndroid Build Coastguard Worker 1389*890232f2SAndroid Build Coastguard Worker # Reverse endian: 1390*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1391*890232f2SAndroid Build Coastguard Worker x_other_endian = x.byteswap().newbyteorder() 1392*890232f2SAndroid Build Coastguard Worker b.CreateNumpyVector(x_other_endian) 1393*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals( 1394*890232f2SAndroid Build Coastguard Worker b, 1395*890232f2SAndroid Build Coastguard Worker [ 1396*890232f2SAndroid Build Coastguard Worker 3, 1397*890232f2SAndroid Build Coastguard Worker 0, 1398*890232f2SAndroid Build Coastguard Worker 0, 1399*890232f2SAndroid Build Coastguard Worker 0, # vector length 1400*890232f2SAndroid Build Coastguard Worker 1, 1401*890232f2SAndroid Build Coastguard Worker 0, 1402*890232f2SAndroid Build Coastguard Worker 1, 1403*890232f2SAndroid Build Coastguard Worker 0 # vector values + padding 1404*890232f2SAndroid Build Coastguard Worker ]) 1405*890232f2SAndroid Build Coastguard Worker 1406*890232f2SAndroid Build Coastguard Worker except ImportError: 1407*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1408*890232f2SAndroid Build Coastguard Worker x = 0 1409*890232f2SAndroid Build Coastguard Worker assertRaises(self, lambda: b.CreateNumpyVector(x), 1410*890232f2SAndroid Build Coastguard Worker NumpyRequiredForThisFeature) 1411*890232f2SAndroid Build Coastguard Worker 1412*890232f2SAndroid Build Coastguard Worker def test_create_numpy_vector_reject_strings(self): 1413*890232f2SAndroid Build Coastguard Worker try: 1414*890232f2SAndroid Build Coastguard Worker imp.find_module('numpy') 1415*890232f2SAndroid Build Coastguard Worker # if numpy exists, then we should be able to get the 1416*890232f2SAndroid Build Coastguard Worker # vector as a numpy array 1417*890232f2SAndroid Build Coastguard Worker import numpy as np 1418*890232f2SAndroid Build Coastguard Worker 1419*890232f2SAndroid Build Coastguard Worker # Create String array 1420*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1421*890232f2SAndroid Build Coastguard Worker x = np.array(['hello', 'fb', 'testing']) 1422*890232f2SAndroid Build Coastguard Worker assertRaises(self, lambda: b.CreateNumpyVector(x), TypeError) 1423*890232f2SAndroid Build Coastguard Worker 1424*890232f2SAndroid Build Coastguard Worker except ImportError: 1425*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1426*890232f2SAndroid Build Coastguard Worker x = 0 1427*890232f2SAndroid Build Coastguard Worker assertRaises(self, lambda: b.CreateNumpyVector(x), 1428*890232f2SAndroid Build Coastguard Worker NumpyRequiredForThisFeature) 1429*890232f2SAndroid Build Coastguard Worker 1430*890232f2SAndroid Build Coastguard Worker def test_create_numpy_vector_reject_object(self): 1431*890232f2SAndroid Build Coastguard Worker try: 1432*890232f2SAndroid Build Coastguard Worker imp.find_module('numpy') 1433*890232f2SAndroid Build Coastguard Worker # if numpy exists, then we should be able to get the 1434*890232f2SAndroid Build Coastguard Worker # vector as a numpy array 1435*890232f2SAndroid Build Coastguard Worker import numpy as np 1436*890232f2SAndroid Build Coastguard Worker 1437*890232f2SAndroid Build Coastguard Worker # Create String array 1438*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1439*890232f2SAndroid Build Coastguard Worker x = np.array([{'m': 0}, {'as': -2.1, 'c': 'c'}]) 1440*890232f2SAndroid Build Coastguard Worker assertRaises(self, lambda: b.CreateNumpyVector(x), TypeError) 1441*890232f2SAndroid Build Coastguard Worker 1442*890232f2SAndroid Build Coastguard Worker except ImportError: 1443*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1444*890232f2SAndroid Build Coastguard Worker x = 0 1445*890232f2SAndroid Build Coastguard Worker assertRaises(self, lambda: b.CreateNumpyVector(x), 1446*890232f2SAndroid Build Coastguard Worker NumpyRequiredForThisFeature) 1447*890232f2SAndroid Build Coastguard Worker 1448*890232f2SAndroid Build Coastguard Worker def test_empty_vtable(self): 1449*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1450*890232f2SAndroid Build Coastguard Worker b.StartObject(0) 1451*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals(b, []) 1452*890232f2SAndroid Build Coastguard Worker b.EndObject() 1453*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals(b, [4, 0, 4, 0, 4, 0, 0, 0]) 1454*890232f2SAndroid Build Coastguard Worker 1455*890232f2SAndroid Build Coastguard Worker def test_vtable_with_one_true_bool(self): 1456*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1457*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals(b, []) 1458*890232f2SAndroid Build Coastguard Worker b.StartObject(1) 1459*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals(b, []) 1460*890232f2SAndroid Build Coastguard Worker b.PrependBoolSlot(0, True, False) 1461*890232f2SAndroid Build Coastguard Worker b.EndObject() 1462*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals( 1463*890232f2SAndroid Build Coastguard Worker b, 1464*890232f2SAndroid Build Coastguard Worker [ 1465*890232f2SAndroid Build Coastguard Worker 6, 1466*890232f2SAndroid Build Coastguard Worker 0, # vtable bytes 1467*890232f2SAndroid Build Coastguard Worker 8, 1468*890232f2SAndroid Build Coastguard Worker 0, # length of object including vtable offset 1469*890232f2SAndroid Build Coastguard Worker 7, 1470*890232f2SAndroid Build Coastguard Worker 0, # start of bool value 1471*890232f2SAndroid Build Coastguard Worker 6, 1472*890232f2SAndroid Build Coastguard Worker 0, 1473*890232f2SAndroid Build Coastguard Worker 0, 1474*890232f2SAndroid Build Coastguard Worker 0, # offset for start of vtable (int32) 1475*890232f2SAndroid Build Coastguard Worker 0, 1476*890232f2SAndroid Build Coastguard Worker 0, 1477*890232f2SAndroid Build Coastguard Worker 0, # padded to 4 bytes 1478*890232f2SAndroid Build Coastguard Worker 1, # bool value 1479*890232f2SAndroid Build Coastguard Worker ]) 1480*890232f2SAndroid Build Coastguard Worker 1481*890232f2SAndroid Build Coastguard Worker def test_vtable_with_one_default_bool(self): 1482*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1483*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals(b, []) 1484*890232f2SAndroid Build Coastguard Worker b.StartObject(1) 1485*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals(b, []) 1486*890232f2SAndroid Build Coastguard Worker b.PrependBoolSlot(0, False, False) 1487*890232f2SAndroid Build Coastguard Worker b.EndObject() 1488*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals( 1489*890232f2SAndroid Build Coastguard Worker b, 1490*890232f2SAndroid Build Coastguard Worker [ 1491*890232f2SAndroid Build Coastguard Worker 4, 1492*890232f2SAndroid Build Coastguard Worker 0, # vtable bytes 1493*890232f2SAndroid Build Coastguard Worker 4, 1494*890232f2SAndroid Build Coastguard Worker 0, # end of object from here 1495*890232f2SAndroid Build Coastguard Worker # entry 1 is zero and not stored 1496*890232f2SAndroid Build Coastguard Worker 4, 1497*890232f2SAndroid Build Coastguard Worker 0, 1498*890232f2SAndroid Build Coastguard Worker 0, 1499*890232f2SAndroid Build Coastguard Worker 0, # offset for start of vtable (int32) 1500*890232f2SAndroid Build Coastguard Worker ]) 1501*890232f2SAndroid Build Coastguard Worker 1502*890232f2SAndroid Build Coastguard Worker def test_vtable_with_one_int16(self): 1503*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1504*890232f2SAndroid Build Coastguard Worker b.StartObject(1) 1505*890232f2SAndroid Build Coastguard Worker b.PrependInt16Slot(0, 0x789A, 0) 1506*890232f2SAndroid Build Coastguard Worker b.EndObject() 1507*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals( 1508*890232f2SAndroid Build Coastguard Worker b, 1509*890232f2SAndroid Build Coastguard Worker [ 1510*890232f2SAndroid Build Coastguard Worker 6, 1511*890232f2SAndroid Build Coastguard Worker 0, # vtable bytes 1512*890232f2SAndroid Build Coastguard Worker 8, 1513*890232f2SAndroid Build Coastguard Worker 0, # end of object from here 1514*890232f2SAndroid Build Coastguard Worker 6, 1515*890232f2SAndroid Build Coastguard Worker 0, # offset to value 1516*890232f2SAndroid Build Coastguard Worker 6, 1517*890232f2SAndroid Build Coastguard Worker 0, 1518*890232f2SAndroid Build Coastguard Worker 0, 1519*890232f2SAndroid Build Coastguard Worker 0, # offset for start of vtable (int32) 1520*890232f2SAndroid Build Coastguard Worker 0, 1521*890232f2SAndroid Build Coastguard Worker 0, # padding to 4 bytes 1522*890232f2SAndroid Build Coastguard Worker 0x9A, 1523*890232f2SAndroid Build Coastguard Worker 0x78, 1524*890232f2SAndroid Build Coastguard Worker ]) 1525*890232f2SAndroid Build Coastguard Worker 1526*890232f2SAndroid Build Coastguard Worker def test_vtable_with_two_int16(self): 1527*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1528*890232f2SAndroid Build Coastguard Worker b.StartObject(2) 1529*890232f2SAndroid Build Coastguard Worker b.PrependInt16Slot(0, 0x3456, 0) 1530*890232f2SAndroid Build Coastguard Worker b.PrependInt16Slot(1, 0x789A, 0) 1531*890232f2SAndroid Build Coastguard Worker b.EndObject() 1532*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals( 1533*890232f2SAndroid Build Coastguard Worker b, 1534*890232f2SAndroid Build Coastguard Worker [ 1535*890232f2SAndroid Build Coastguard Worker 8, 1536*890232f2SAndroid Build Coastguard Worker 0, # vtable bytes 1537*890232f2SAndroid Build Coastguard Worker 8, 1538*890232f2SAndroid Build Coastguard Worker 0, # end of object from here 1539*890232f2SAndroid Build Coastguard Worker 6, 1540*890232f2SAndroid Build Coastguard Worker 0, # offset to value 0 1541*890232f2SAndroid Build Coastguard Worker 4, 1542*890232f2SAndroid Build Coastguard Worker 0, # offset to value 1 1543*890232f2SAndroid Build Coastguard Worker 8, 1544*890232f2SAndroid Build Coastguard Worker 0, 1545*890232f2SAndroid Build Coastguard Worker 0, 1546*890232f2SAndroid Build Coastguard Worker 0, # offset for start of vtable (int32) 1547*890232f2SAndroid Build Coastguard Worker 0x9A, 1548*890232f2SAndroid Build Coastguard Worker 0x78, # value 1 1549*890232f2SAndroid Build Coastguard Worker 0x56, 1550*890232f2SAndroid Build Coastguard Worker 0x34, # value 0 1551*890232f2SAndroid Build Coastguard Worker ]) 1552*890232f2SAndroid Build Coastguard Worker 1553*890232f2SAndroid Build Coastguard Worker def test_vtable_with_int16_and_bool(self): 1554*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1555*890232f2SAndroid Build Coastguard Worker b.StartObject(2) 1556*890232f2SAndroid Build Coastguard Worker b.PrependInt16Slot(0, 0x3456, 0) 1557*890232f2SAndroid Build Coastguard Worker b.PrependBoolSlot(1, True, False) 1558*890232f2SAndroid Build Coastguard Worker b.EndObject() 1559*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals( 1560*890232f2SAndroid Build Coastguard Worker b, 1561*890232f2SAndroid Build Coastguard Worker [ 1562*890232f2SAndroid Build Coastguard Worker 8, 1563*890232f2SAndroid Build Coastguard Worker 0, # vtable bytes 1564*890232f2SAndroid Build Coastguard Worker 8, 1565*890232f2SAndroid Build Coastguard Worker 0, # end of object from here 1566*890232f2SAndroid Build Coastguard Worker 6, 1567*890232f2SAndroid Build Coastguard Worker 0, # offset to value 0 1568*890232f2SAndroid Build Coastguard Worker 5, 1569*890232f2SAndroid Build Coastguard Worker 0, # offset to value 1 1570*890232f2SAndroid Build Coastguard Worker 8, 1571*890232f2SAndroid Build Coastguard Worker 0, 1572*890232f2SAndroid Build Coastguard Worker 0, 1573*890232f2SAndroid Build Coastguard Worker 0, # offset for start of vtable (int32) 1574*890232f2SAndroid Build Coastguard Worker 0, # padding 1575*890232f2SAndroid Build Coastguard Worker 1, # value 1 1576*890232f2SAndroid Build Coastguard Worker 0x56, 1577*890232f2SAndroid Build Coastguard Worker 0x34, # value 0 1578*890232f2SAndroid Build Coastguard Worker ]) 1579*890232f2SAndroid Build Coastguard Worker 1580*890232f2SAndroid Build Coastguard Worker def test_vtable_with_empty_vector(self): 1581*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1582*890232f2SAndroid Build Coastguard Worker b.StartVector(flatbuffers.number_types.Uint8Flags.bytewidth, 0, 1) 1583*890232f2SAndroid Build Coastguard Worker vecend = b.EndVector() 1584*890232f2SAndroid Build Coastguard Worker b.StartObject(1) 1585*890232f2SAndroid Build Coastguard Worker b.PrependUOffsetTRelativeSlot(0, vecend, 0) 1586*890232f2SAndroid Build Coastguard Worker b.EndObject() 1587*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals( 1588*890232f2SAndroid Build Coastguard Worker b, 1589*890232f2SAndroid Build Coastguard Worker [ 1590*890232f2SAndroid Build Coastguard Worker 6, 1591*890232f2SAndroid Build Coastguard Worker 0, # vtable bytes 1592*890232f2SAndroid Build Coastguard Worker 8, 1593*890232f2SAndroid Build Coastguard Worker 0, 1594*890232f2SAndroid Build Coastguard Worker 4, 1595*890232f2SAndroid Build Coastguard Worker 0, # offset to vector offset 1596*890232f2SAndroid Build Coastguard Worker 6, 1597*890232f2SAndroid Build Coastguard Worker 0, 1598*890232f2SAndroid Build Coastguard Worker 0, 1599*890232f2SAndroid Build Coastguard Worker 0, # offset for start of vtable (int32) 1600*890232f2SAndroid Build Coastguard Worker 4, 1601*890232f2SAndroid Build Coastguard Worker 0, 1602*890232f2SAndroid Build Coastguard Worker 0, 1603*890232f2SAndroid Build Coastguard Worker 0, 1604*890232f2SAndroid Build Coastguard Worker 0, 1605*890232f2SAndroid Build Coastguard Worker 0, 1606*890232f2SAndroid Build Coastguard Worker 0, 1607*890232f2SAndroid Build Coastguard Worker 0, # length of vector (not in struct) 1608*890232f2SAndroid Build Coastguard Worker ]) 1609*890232f2SAndroid Build Coastguard Worker 1610*890232f2SAndroid Build Coastguard Worker def test_vtable_with_empty_vector_of_byte_and_some_scalars(self): 1611*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1612*890232f2SAndroid Build Coastguard Worker b.StartVector(flatbuffers.number_types.Uint8Flags.bytewidth, 0, 1) 1613*890232f2SAndroid Build Coastguard Worker vecend = b.EndVector() 1614*890232f2SAndroid Build Coastguard Worker b.StartObject(2) 1615*890232f2SAndroid Build Coastguard Worker b.PrependInt16Slot(0, 55, 0) 1616*890232f2SAndroid Build Coastguard Worker b.PrependUOffsetTRelativeSlot(1, vecend, 0) 1617*890232f2SAndroid Build Coastguard Worker b.EndObject() 1618*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals( 1619*890232f2SAndroid Build Coastguard Worker b, 1620*890232f2SAndroid Build Coastguard Worker [ 1621*890232f2SAndroid Build Coastguard Worker 8, 1622*890232f2SAndroid Build Coastguard Worker 0, # vtable bytes 1623*890232f2SAndroid Build Coastguard Worker 12, 1624*890232f2SAndroid Build Coastguard Worker 0, 1625*890232f2SAndroid Build Coastguard Worker 10, 1626*890232f2SAndroid Build Coastguard Worker 0, # offset to value 0 1627*890232f2SAndroid Build Coastguard Worker 4, 1628*890232f2SAndroid Build Coastguard Worker 0, # offset to vector offset 1629*890232f2SAndroid Build Coastguard Worker 8, 1630*890232f2SAndroid Build Coastguard Worker 0, 1631*890232f2SAndroid Build Coastguard Worker 0, 1632*890232f2SAndroid Build Coastguard Worker 0, # vtable loc 1633*890232f2SAndroid Build Coastguard Worker 8, 1634*890232f2SAndroid Build Coastguard Worker 0, 1635*890232f2SAndroid Build Coastguard Worker 0, 1636*890232f2SAndroid Build Coastguard Worker 0, # value 1 1637*890232f2SAndroid Build Coastguard Worker 0, 1638*890232f2SAndroid Build Coastguard Worker 0, 1639*890232f2SAndroid Build Coastguard Worker 55, 1640*890232f2SAndroid Build Coastguard Worker 0, # value 0 1641*890232f2SAndroid Build Coastguard Worker 0, 1642*890232f2SAndroid Build Coastguard Worker 0, 1643*890232f2SAndroid Build Coastguard Worker 0, 1644*890232f2SAndroid Build Coastguard Worker 0, # length of vector (not in struct) 1645*890232f2SAndroid Build Coastguard Worker ]) 1646*890232f2SAndroid Build Coastguard Worker 1647*890232f2SAndroid Build Coastguard Worker def test_vtable_with_1_int16_and_2vector_of_int16(self): 1648*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1649*890232f2SAndroid Build Coastguard Worker b.StartVector(flatbuffers.number_types.Int16Flags.bytewidth, 2, 1) 1650*890232f2SAndroid Build Coastguard Worker b.PrependInt16(0x1234) 1651*890232f2SAndroid Build Coastguard Worker b.PrependInt16(0x5678) 1652*890232f2SAndroid Build Coastguard Worker vecend = b.EndVector() 1653*890232f2SAndroid Build Coastguard Worker b.StartObject(2) 1654*890232f2SAndroid Build Coastguard Worker b.PrependUOffsetTRelativeSlot(1, vecend, 0) 1655*890232f2SAndroid Build Coastguard Worker b.PrependInt16Slot(0, 55, 0) 1656*890232f2SAndroid Build Coastguard Worker b.EndObject() 1657*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals( 1658*890232f2SAndroid Build Coastguard Worker b, 1659*890232f2SAndroid Build Coastguard Worker [ 1660*890232f2SAndroid Build Coastguard Worker 8, 1661*890232f2SAndroid Build Coastguard Worker 0, # vtable bytes 1662*890232f2SAndroid Build Coastguard Worker 12, 1663*890232f2SAndroid Build Coastguard Worker 0, # length of object 1664*890232f2SAndroid Build Coastguard Worker 6, 1665*890232f2SAndroid Build Coastguard Worker 0, # start of value 0 from end of vtable 1666*890232f2SAndroid Build Coastguard Worker 8, 1667*890232f2SAndroid Build Coastguard Worker 0, # start of value 1 from end of buffer 1668*890232f2SAndroid Build Coastguard Worker 8, 1669*890232f2SAndroid Build Coastguard Worker 0, 1670*890232f2SAndroid Build Coastguard Worker 0, 1671*890232f2SAndroid Build Coastguard Worker 0, # offset for start of vtable (int32) 1672*890232f2SAndroid Build Coastguard Worker 0, 1673*890232f2SAndroid Build Coastguard Worker 0, # padding 1674*890232f2SAndroid Build Coastguard Worker 55, 1675*890232f2SAndroid Build Coastguard Worker 0, # value 0 1676*890232f2SAndroid Build Coastguard Worker 4, 1677*890232f2SAndroid Build Coastguard Worker 0, 1678*890232f2SAndroid Build Coastguard Worker 0, 1679*890232f2SAndroid Build Coastguard Worker 0, # vector position from here 1680*890232f2SAndroid Build Coastguard Worker 2, 1681*890232f2SAndroid Build Coastguard Worker 0, 1682*890232f2SAndroid Build Coastguard Worker 0, 1683*890232f2SAndroid Build Coastguard Worker 0, # length of vector (uint32) 1684*890232f2SAndroid Build Coastguard Worker 0x78, 1685*890232f2SAndroid Build Coastguard Worker 0x56, # vector value 1 1686*890232f2SAndroid Build Coastguard Worker 0x34, 1687*890232f2SAndroid Build Coastguard Worker 0x12, # vector value 0 1688*890232f2SAndroid Build Coastguard Worker ]) 1689*890232f2SAndroid Build Coastguard Worker 1690*890232f2SAndroid Build Coastguard Worker def test_vtable_with_1_struct_of_1_int8__1_int16__1_int32(self): 1691*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1692*890232f2SAndroid Build Coastguard Worker b.StartObject(1) 1693*890232f2SAndroid Build Coastguard Worker b.Prep(4 + 4 + 4, 0) 1694*890232f2SAndroid Build Coastguard Worker b.PrependInt8(55) 1695*890232f2SAndroid Build Coastguard Worker b.Pad(3) 1696*890232f2SAndroid Build Coastguard Worker b.PrependInt16(0x1234) 1697*890232f2SAndroid Build Coastguard Worker b.Pad(2) 1698*890232f2SAndroid Build Coastguard Worker b.PrependInt32(0x12345678) 1699*890232f2SAndroid Build Coastguard Worker structStart = b.Offset() 1700*890232f2SAndroid Build Coastguard Worker b.PrependStructSlot(0, structStart, 0) 1701*890232f2SAndroid Build Coastguard Worker b.EndObject() 1702*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals( 1703*890232f2SAndroid Build Coastguard Worker b, 1704*890232f2SAndroid Build Coastguard Worker [ 1705*890232f2SAndroid Build Coastguard Worker 6, 1706*890232f2SAndroid Build Coastguard Worker 0, # vtable bytes 1707*890232f2SAndroid Build Coastguard Worker 16, 1708*890232f2SAndroid Build Coastguard Worker 0, # end of object from here 1709*890232f2SAndroid Build Coastguard Worker 4, 1710*890232f2SAndroid Build Coastguard Worker 0, # start of struct from here 1711*890232f2SAndroid Build Coastguard Worker 6, 1712*890232f2SAndroid Build Coastguard Worker 0, 1713*890232f2SAndroid Build Coastguard Worker 0, 1714*890232f2SAndroid Build Coastguard Worker 0, # offset for start of vtable (int32) 1715*890232f2SAndroid Build Coastguard Worker 0x78, 1716*890232f2SAndroid Build Coastguard Worker 0x56, 1717*890232f2SAndroid Build Coastguard Worker 0x34, 1718*890232f2SAndroid Build Coastguard Worker 0x12, # value 2 1719*890232f2SAndroid Build Coastguard Worker 0, 1720*890232f2SAndroid Build Coastguard Worker 0, # padding 1721*890232f2SAndroid Build Coastguard Worker 0x34, 1722*890232f2SAndroid Build Coastguard Worker 0x12, # value 1 1723*890232f2SAndroid Build Coastguard Worker 0, 1724*890232f2SAndroid Build Coastguard Worker 0, 1725*890232f2SAndroid Build Coastguard Worker 0, # padding 1726*890232f2SAndroid Build Coastguard Worker 55, # value 0 1727*890232f2SAndroid Build Coastguard Worker ]) 1728*890232f2SAndroid Build Coastguard Worker 1729*890232f2SAndroid Build Coastguard Worker def test_vtable_with_1_vector_of_2_struct_of_2_int8(self): 1730*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1731*890232f2SAndroid Build Coastguard Worker b.StartVector(flatbuffers.number_types.Int8Flags.bytewidth * 2, 2, 1) 1732*890232f2SAndroid Build Coastguard Worker b.PrependInt8(33) 1733*890232f2SAndroid Build Coastguard Worker b.PrependInt8(44) 1734*890232f2SAndroid Build Coastguard Worker b.PrependInt8(55) 1735*890232f2SAndroid Build Coastguard Worker b.PrependInt8(66) 1736*890232f2SAndroid Build Coastguard Worker vecend = b.EndVector() 1737*890232f2SAndroid Build Coastguard Worker b.StartObject(1) 1738*890232f2SAndroid Build Coastguard Worker b.PrependUOffsetTRelativeSlot(0, vecend, 0) 1739*890232f2SAndroid Build Coastguard Worker b.EndObject() 1740*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals( 1741*890232f2SAndroid Build Coastguard Worker b, 1742*890232f2SAndroid Build Coastguard Worker [ 1743*890232f2SAndroid Build Coastguard Worker 6, 1744*890232f2SAndroid Build Coastguard Worker 0, # vtable bytes 1745*890232f2SAndroid Build Coastguard Worker 8, 1746*890232f2SAndroid Build Coastguard Worker 0, 1747*890232f2SAndroid Build Coastguard Worker 4, 1748*890232f2SAndroid Build Coastguard Worker 0, # offset of vector offset 1749*890232f2SAndroid Build Coastguard Worker 6, 1750*890232f2SAndroid Build Coastguard Worker 0, 1751*890232f2SAndroid Build Coastguard Worker 0, 1752*890232f2SAndroid Build Coastguard Worker 0, # offset for start of vtable (int32) 1753*890232f2SAndroid Build Coastguard Worker 4, 1754*890232f2SAndroid Build Coastguard Worker 0, 1755*890232f2SAndroid Build Coastguard Worker 0, 1756*890232f2SAndroid Build Coastguard Worker 0, # vector start offset 1757*890232f2SAndroid Build Coastguard Worker 2, 1758*890232f2SAndroid Build Coastguard Worker 0, 1759*890232f2SAndroid Build Coastguard Worker 0, 1760*890232f2SAndroid Build Coastguard Worker 0, # vector length 1761*890232f2SAndroid Build Coastguard Worker 66, # vector value 1,1 1762*890232f2SAndroid Build Coastguard Worker 55, # vector value 1,0 1763*890232f2SAndroid Build Coastguard Worker 44, # vector value 0,1 1764*890232f2SAndroid Build Coastguard Worker 33, # vector value 0,0 1765*890232f2SAndroid Build Coastguard Worker ]) 1766*890232f2SAndroid Build Coastguard Worker 1767*890232f2SAndroid Build Coastguard Worker def test_table_with_some_elements(self): 1768*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1769*890232f2SAndroid Build Coastguard Worker b.StartObject(2) 1770*890232f2SAndroid Build Coastguard Worker b.PrependInt8Slot(0, 33, 0) 1771*890232f2SAndroid Build Coastguard Worker b.PrependInt16Slot(1, 66, 0) 1772*890232f2SAndroid Build Coastguard Worker off = b.EndObject() 1773*890232f2SAndroid Build Coastguard Worker b.Finish(off) 1774*890232f2SAndroid Build Coastguard Worker 1775*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals( 1776*890232f2SAndroid Build Coastguard Worker b, 1777*890232f2SAndroid Build Coastguard Worker [ 1778*890232f2SAndroid Build Coastguard Worker 12, 1779*890232f2SAndroid Build Coastguard Worker 0, 1780*890232f2SAndroid Build Coastguard Worker 0, 1781*890232f2SAndroid Build Coastguard Worker 0, # root of table: points to vtable offset 1782*890232f2SAndroid Build Coastguard Worker 8, 1783*890232f2SAndroid Build Coastguard Worker 0, # vtable bytes 1784*890232f2SAndroid Build Coastguard Worker 8, 1785*890232f2SAndroid Build Coastguard Worker 0, # end of object from here 1786*890232f2SAndroid Build Coastguard Worker 7, 1787*890232f2SAndroid Build Coastguard Worker 0, # start of value 0 1788*890232f2SAndroid Build Coastguard Worker 4, 1789*890232f2SAndroid Build Coastguard Worker 0, # start of value 1 1790*890232f2SAndroid Build Coastguard Worker 8, 1791*890232f2SAndroid Build Coastguard Worker 0, 1792*890232f2SAndroid Build Coastguard Worker 0, 1793*890232f2SAndroid Build Coastguard Worker 0, # offset for start of vtable (int32) 1794*890232f2SAndroid Build Coastguard Worker 66, 1795*890232f2SAndroid Build Coastguard Worker 0, # value 1 1796*890232f2SAndroid Build Coastguard Worker 0, # padding 1797*890232f2SAndroid Build Coastguard Worker 33, # value 0 1798*890232f2SAndroid Build Coastguard Worker ]) 1799*890232f2SAndroid Build Coastguard Worker 1800*890232f2SAndroid Build Coastguard Worker def test__one_unfinished_table_and_one_finished_table(self): 1801*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1802*890232f2SAndroid Build Coastguard Worker b.StartObject(2) 1803*890232f2SAndroid Build Coastguard Worker b.PrependInt8Slot(0, 33, 0) 1804*890232f2SAndroid Build Coastguard Worker b.PrependInt8Slot(1, 44, 0) 1805*890232f2SAndroid Build Coastguard Worker off = b.EndObject() 1806*890232f2SAndroid Build Coastguard Worker b.Finish(off) 1807*890232f2SAndroid Build Coastguard Worker 1808*890232f2SAndroid Build Coastguard Worker b.StartObject(3) 1809*890232f2SAndroid Build Coastguard Worker b.PrependInt8Slot(0, 55, 0) 1810*890232f2SAndroid Build Coastguard Worker b.PrependInt8Slot(1, 66, 0) 1811*890232f2SAndroid Build Coastguard Worker b.PrependInt8Slot(2, 77, 0) 1812*890232f2SAndroid Build Coastguard Worker off = b.EndObject() 1813*890232f2SAndroid Build Coastguard Worker b.Finish(off) 1814*890232f2SAndroid Build Coastguard Worker 1815*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals( 1816*890232f2SAndroid Build Coastguard Worker b, 1817*890232f2SAndroid Build Coastguard Worker [ 1818*890232f2SAndroid Build Coastguard Worker 16, 1819*890232f2SAndroid Build Coastguard Worker 0, 1820*890232f2SAndroid Build Coastguard Worker 0, 1821*890232f2SAndroid Build Coastguard Worker 0, # root of table: points to object 1822*890232f2SAndroid Build Coastguard Worker 0, 1823*890232f2SAndroid Build Coastguard Worker 0, # padding 1824*890232f2SAndroid Build Coastguard Worker 10, 1825*890232f2SAndroid Build Coastguard Worker 0, # vtable bytes 1826*890232f2SAndroid Build Coastguard Worker 8, 1827*890232f2SAndroid Build Coastguard Worker 0, # size of object 1828*890232f2SAndroid Build Coastguard Worker 7, 1829*890232f2SAndroid Build Coastguard Worker 0, # start of value 0 1830*890232f2SAndroid Build Coastguard Worker 6, 1831*890232f2SAndroid Build Coastguard Worker 0, # start of value 1 1832*890232f2SAndroid Build Coastguard Worker 5, 1833*890232f2SAndroid Build Coastguard Worker 0, # start of value 2 1834*890232f2SAndroid Build Coastguard Worker 10, 1835*890232f2SAndroid Build Coastguard Worker 0, 1836*890232f2SAndroid Build Coastguard Worker 0, 1837*890232f2SAndroid Build Coastguard Worker 0, # offset for start of vtable (int32) 1838*890232f2SAndroid Build Coastguard Worker 0, # padding 1839*890232f2SAndroid Build Coastguard Worker 77, # value 2 1840*890232f2SAndroid Build Coastguard Worker 66, # value 1 1841*890232f2SAndroid Build Coastguard Worker 55, # value 0 1842*890232f2SAndroid Build Coastguard Worker 12, 1843*890232f2SAndroid Build Coastguard Worker 0, 1844*890232f2SAndroid Build Coastguard Worker 0, 1845*890232f2SAndroid Build Coastguard Worker 0, # root of table: points to object 1846*890232f2SAndroid Build Coastguard Worker 8, 1847*890232f2SAndroid Build Coastguard Worker 0, # vtable bytes 1848*890232f2SAndroid Build Coastguard Worker 8, 1849*890232f2SAndroid Build Coastguard Worker 0, # size of object 1850*890232f2SAndroid Build Coastguard Worker 7, 1851*890232f2SAndroid Build Coastguard Worker 0, # start of value 0 1852*890232f2SAndroid Build Coastguard Worker 6, 1853*890232f2SAndroid Build Coastguard Worker 0, # start of value 1 1854*890232f2SAndroid Build Coastguard Worker 8, 1855*890232f2SAndroid Build Coastguard Worker 0, 1856*890232f2SAndroid Build Coastguard Worker 0, 1857*890232f2SAndroid Build Coastguard Worker 0, # offset for start of vtable (int32) 1858*890232f2SAndroid Build Coastguard Worker 0, 1859*890232f2SAndroid Build Coastguard Worker 0, # padding 1860*890232f2SAndroid Build Coastguard Worker 44, # value 1 1861*890232f2SAndroid Build Coastguard Worker 33, # value 0 1862*890232f2SAndroid Build Coastguard Worker ]) 1863*890232f2SAndroid Build Coastguard Worker 1864*890232f2SAndroid Build Coastguard Worker def test_a_bunch_of_bools(self): 1865*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1866*890232f2SAndroid Build Coastguard Worker b.StartObject(8) 1867*890232f2SAndroid Build Coastguard Worker b.PrependBoolSlot(0, True, False) 1868*890232f2SAndroid Build Coastguard Worker b.PrependBoolSlot(1, True, False) 1869*890232f2SAndroid Build Coastguard Worker b.PrependBoolSlot(2, True, False) 1870*890232f2SAndroid Build Coastguard Worker b.PrependBoolSlot(3, True, False) 1871*890232f2SAndroid Build Coastguard Worker b.PrependBoolSlot(4, True, False) 1872*890232f2SAndroid Build Coastguard Worker b.PrependBoolSlot(5, True, False) 1873*890232f2SAndroid Build Coastguard Worker b.PrependBoolSlot(6, True, False) 1874*890232f2SAndroid Build Coastguard Worker b.PrependBoolSlot(7, True, False) 1875*890232f2SAndroid Build Coastguard Worker off = b.EndObject() 1876*890232f2SAndroid Build Coastguard Worker b.Finish(off) 1877*890232f2SAndroid Build Coastguard Worker 1878*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals( 1879*890232f2SAndroid Build Coastguard Worker b, 1880*890232f2SAndroid Build Coastguard Worker [ 1881*890232f2SAndroid Build Coastguard Worker 24, 1882*890232f2SAndroid Build Coastguard Worker 0, 1883*890232f2SAndroid Build Coastguard Worker 0, 1884*890232f2SAndroid Build Coastguard Worker 0, # root of table: points to vtable offset 1885*890232f2SAndroid Build Coastguard Worker 20, 1886*890232f2SAndroid Build Coastguard Worker 0, # vtable bytes 1887*890232f2SAndroid Build Coastguard Worker 12, 1888*890232f2SAndroid Build Coastguard Worker 0, # size of object 1889*890232f2SAndroid Build Coastguard Worker 11, 1890*890232f2SAndroid Build Coastguard Worker 0, # start of value 0 1891*890232f2SAndroid Build Coastguard Worker 10, 1892*890232f2SAndroid Build Coastguard Worker 0, # start of value 1 1893*890232f2SAndroid Build Coastguard Worker 9, 1894*890232f2SAndroid Build Coastguard Worker 0, # start of value 2 1895*890232f2SAndroid Build Coastguard Worker 8, 1896*890232f2SAndroid Build Coastguard Worker 0, # start of value 3 1897*890232f2SAndroid Build Coastguard Worker 7, 1898*890232f2SAndroid Build Coastguard Worker 0, # start of value 4 1899*890232f2SAndroid Build Coastguard Worker 6, 1900*890232f2SAndroid Build Coastguard Worker 0, # start of value 5 1901*890232f2SAndroid Build Coastguard Worker 5, 1902*890232f2SAndroid Build Coastguard Worker 0, # start of value 6 1903*890232f2SAndroid Build Coastguard Worker 4, 1904*890232f2SAndroid Build Coastguard Worker 0, # start of value 7 1905*890232f2SAndroid Build Coastguard Worker 20, 1906*890232f2SAndroid Build Coastguard Worker 0, 1907*890232f2SAndroid Build Coastguard Worker 0, 1908*890232f2SAndroid Build Coastguard Worker 0, # vtable offset 1909*890232f2SAndroid Build Coastguard Worker 1, # value 7 1910*890232f2SAndroid Build Coastguard Worker 1, # value 6 1911*890232f2SAndroid Build Coastguard Worker 1, # value 5 1912*890232f2SAndroid Build Coastguard Worker 1, # value 4 1913*890232f2SAndroid Build Coastguard Worker 1, # value 3 1914*890232f2SAndroid Build Coastguard Worker 1, # value 2 1915*890232f2SAndroid Build Coastguard Worker 1, # value 1 1916*890232f2SAndroid Build Coastguard Worker 1, # value 0 1917*890232f2SAndroid Build Coastguard Worker ]) 1918*890232f2SAndroid Build Coastguard Worker 1919*890232f2SAndroid Build Coastguard Worker def test_three_bools(self): 1920*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1921*890232f2SAndroid Build Coastguard Worker b.StartObject(3) 1922*890232f2SAndroid Build Coastguard Worker b.PrependBoolSlot(0, True, False) 1923*890232f2SAndroid Build Coastguard Worker b.PrependBoolSlot(1, True, False) 1924*890232f2SAndroid Build Coastguard Worker b.PrependBoolSlot(2, True, False) 1925*890232f2SAndroid Build Coastguard Worker off = b.EndObject() 1926*890232f2SAndroid Build Coastguard Worker b.Finish(off) 1927*890232f2SAndroid Build Coastguard Worker 1928*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals( 1929*890232f2SAndroid Build Coastguard Worker b, 1930*890232f2SAndroid Build Coastguard Worker [ 1931*890232f2SAndroid Build Coastguard Worker 16, 1932*890232f2SAndroid Build Coastguard Worker 0, 1933*890232f2SAndroid Build Coastguard Worker 0, 1934*890232f2SAndroid Build Coastguard Worker 0, # root of table: points to vtable offset 1935*890232f2SAndroid Build Coastguard Worker 0, 1936*890232f2SAndroid Build Coastguard Worker 0, # padding 1937*890232f2SAndroid Build Coastguard Worker 10, 1938*890232f2SAndroid Build Coastguard Worker 0, # vtable bytes 1939*890232f2SAndroid Build Coastguard Worker 8, 1940*890232f2SAndroid Build Coastguard Worker 0, # size of object 1941*890232f2SAndroid Build Coastguard Worker 7, 1942*890232f2SAndroid Build Coastguard Worker 0, # start of value 0 1943*890232f2SAndroid Build Coastguard Worker 6, 1944*890232f2SAndroid Build Coastguard Worker 0, # start of value 1 1945*890232f2SAndroid Build Coastguard Worker 5, 1946*890232f2SAndroid Build Coastguard Worker 0, # start of value 2 1947*890232f2SAndroid Build Coastguard Worker 10, 1948*890232f2SAndroid Build Coastguard Worker 0, 1949*890232f2SAndroid Build Coastguard Worker 0, 1950*890232f2SAndroid Build Coastguard Worker 0, # vtable offset from here 1951*890232f2SAndroid Build Coastguard Worker 0, # padding 1952*890232f2SAndroid Build Coastguard Worker 1, # value 2 1953*890232f2SAndroid Build Coastguard Worker 1, # value 1 1954*890232f2SAndroid Build Coastguard Worker 1, # value 0 1955*890232f2SAndroid Build Coastguard Worker ]) 1956*890232f2SAndroid Build Coastguard Worker 1957*890232f2SAndroid Build Coastguard Worker def test_some_floats(self): 1958*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1959*890232f2SAndroid Build Coastguard Worker b.StartObject(1) 1960*890232f2SAndroid Build Coastguard Worker b.PrependFloat32Slot(0, 1.0, 0.0) 1961*890232f2SAndroid Build Coastguard Worker off = b.EndObject() 1962*890232f2SAndroid Build Coastguard Worker 1963*890232f2SAndroid Build Coastguard Worker self.assertBuilderEquals( 1964*890232f2SAndroid Build Coastguard Worker b, 1965*890232f2SAndroid Build Coastguard Worker [ 1966*890232f2SAndroid Build Coastguard Worker 6, 1967*890232f2SAndroid Build Coastguard Worker 0, # vtable bytes 1968*890232f2SAndroid Build Coastguard Worker 8, 1969*890232f2SAndroid Build Coastguard Worker 0, # size of object 1970*890232f2SAndroid Build Coastguard Worker 4, 1971*890232f2SAndroid Build Coastguard Worker 0, # start of value 0 1972*890232f2SAndroid Build Coastguard Worker 6, 1973*890232f2SAndroid Build Coastguard Worker 0, 1974*890232f2SAndroid Build Coastguard Worker 0, 1975*890232f2SAndroid Build Coastguard Worker 0, # vtable offset 1976*890232f2SAndroid Build Coastguard Worker 0, 1977*890232f2SAndroid Build Coastguard Worker 0, 1978*890232f2SAndroid Build Coastguard Worker 128, 1979*890232f2SAndroid Build Coastguard Worker 63, # value 0 1980*890232f2SAndroid Build Coastguard Worker ]) 1981*890232f2SAndroid Build Coastguard Worker 1982*890232f2SAndroid Build Coastguard Worker 1983*890232f2SAndroid Build Coastguard Workerdef make_monster_from_generated_code(sizePrefix=False, file_identifier=None): 1984*890232f2SAndroid Build Coastguard Worker """ Use generated code to build the example Monster. """ 1985*890232f2SAndroid Build Coastguard Worker 1986*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 1987*890232f2SAndroid Build Coastguard Worker string = b.CreateString('MyMonster') 1988*890232f2SAndroid Build Coastguard Worker test1 = b.CreateString('test1') 1989*890232f2SAndroid Build Coastguard Worker test2 = b.CreateString('test2') 1990*890232f2SAndroid Build Coastguard Worker fred = b.CreateString('Fred') 1991*890232f2SAndroid Build Coastguard Worker 1992*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterStartInventoryVector(b, 5) 1993*890232f2SAndroid Build Coastguard Worker b.PrependByte(4) 1994*890232f2SAndroid Build Coastguard Worker b.PrependByte(3) 1995*890232f2SAndroid Build Coastguard Worker b.PrependByte(2) 1996*890232f2SAndroid Build Coastguard Worker b.PrependByte(1) 1997*890232f2SAndroid Build Coastguard Worker b.PrependByte(0) 1998*890232f2SAndroid Build Coastguard Worker inv = b.EndVector() 1999*890232f2SAndroid Build Coastguard Worker 2000*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterStart(b) 2001*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterAddName(b, fred) 2002*890232f2SAndroid Build Coastguard Worker mon2 = _MONSTER.MonsterEnd(b) 2003*890232f2SAndroid Build Coastguard Worker 2004*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterStartTest4Vector(b, 2) 2005*890232f2SAndroid Build Coastguard Worker _TEST.CreateTest(b, 10, 20) 2006*890232f2SAndroid Build Coastguard Worker _TEST.CreateTest(b, 30, 40) 2007*890232f2SAndroid Build Coastguard Worker test4 = b.EndVector() 2008*890232f2SAndroid Build Coastguard Worker 2009*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterStartTestarrayofstringVector(b, 2) 2010*890232f2SAndroid Build Coastguard Worker b.PrependUOffsetTRelative(test2) 2011*890232f2SAndroid Build Coastguard Worker b.PrependUOffsetTRelative(test1) 2012*890232f2SAndroid Build Coastguard Worker testArrayOfString = b.EndVector() 2013*890232f2SAndroid Build Coastguard Worker 2014*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterStartVectorOfLongsVector(b, 5) 2015*890232f2SAndroid Build Coastguard Worker b.PrependInt64(100000000) 2016*890232f2SAndroid Build Coastguard Worker b.PrependInt64(1000000) 2017*890232f2SAndroid Build Coastguard Worker b.PrependInt64(10000) 2018*890232f2SAndroid Build Coastguard Worker b.PrependInt64(100) 2019*890232f2SAndroid Build Coastguard Worker b.PrependInt64(1) 2020*890232f2SAndroid Build Coastguard Worker VectorOfLongs = b.EndVector() 2021*890232f2SAndroid Build Coastguard Worker 2022*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterStartVectorOfDoublesVector(b, 3) 2023*890232f2SAndroid Build Coastguard Worker b.PrependFloat64(1.7976931348623157e+308) 2024*890232f2SAndroid Build Coastguard Worker b.PrependFloat64(0) 2025*890232f2SAndroid Build Coastguard Worker b.PrependFloat64(-1.7976931348623157e+308) 2026*890232f2SAndroid Build Coastguard Worker VectorOfDoubles = b.EndVector() 2027*890232f2SAndroid Build Coastguard Worker 2028*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterStart(b) 2029*890232f2SAndroid Build Coastguard Worker 2030*890232f2SAndroid Build Coastguard Worker pos = _VEC3.CreateVec3(b, 1.0, 2.0, 3.0, 3.0, 2, 5, 6) 2031*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterAddPos(b, pos) 2032*890232f2SAndroid Build Coastguard Worker 2033*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterAddHp(b, 80) 2034*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterAddName(b, string) 2035*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterAddInventory(b, inv) 2036*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterAddTestType(b, 1) 2037*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterAddTest(b, mon2) 2038*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterAddTest4(b, test4) 2039*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterAddTestarrayofstring(b, testArrayOfString) 2040*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterAddVectorOfLongs(b, VectorOfLongs) 2041*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterAddVectorOfDoubles(b, VectorOfDoubles) 2042*890232f2SAndroid Build Coastguard Worker mon = _MONSTER.MonsterEnd(b) 2043*890232f2SAndroid Build Coastguard Worker 2044*890232f2SAndroid Build Coastguard Worker if sizePrefix: 2045*890232f2SAndroid Build Coastguard Worker b.FinishSizePrefixed(mon, file_identifier) 2046*890232f2SAndroid Build Coastguard Worker else: 2047*890232f2SAndroid Build Coastguard Worker b.Finish(mon, file_identifier) 2048*890232f2SAndroid Build Coastguard Worker 2049*890232f2SAndroid Build Coastguard Worker return b.Bytes, b.Head() 2050*890232f2SAndroid Build Coastguard Worker 2051*890232f2SAndroid Build Coastguard Worker 2052*890232f2SAndroid Build Coastguard Workerclass TestBuilderForceDefaults(unittest.TestCase): 2053*890232f2SAndroid Build Coastguard Worker """Verify that the builder adds default values when forced.""" 2054*890232f2SAndroid Build Coastguard Worker 2055*890232f2SAndroid Build Coastguard Worker test_flags = [N.BoolFlags(), N.Uint8Flags(), N.Uint16Flags(), \ 2056*890232f2SAndroid Build Coastguard Worker N.Uint32Flags(), N.Uint64Flags(), N.Int8Flags(), \ 2057*890232f2SAndroid Build Coastguard Worker N.Int16Flags(), N.Int32Flags(), N.Int64Flags(), \ 2058*890232f2SAndroid Build Coastguard Worker N.Float32Flags(), N.Float64Flags(), N.UOffsetTFlags()] 2059*890232f2SAndroid Build Coastguard Worker 2060*890232f2SAndroid Build Coastguard Worker def test_default_force_defaults(self): 2061*890232f2SAndroid Build Coastguard Worker for flag in self.test_flags: 2062*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 2063*890232f2SAndroid Build Coastguard Worker b.StartObject(1) 2064*890232f2SAndroid Build Coastguard Worker stored_offset = b.Offset() 2065*890232f2SAndroid Build Coastguard Worker if flag != N.UOffsetTFlags(): 2066*890232f2SAndroid Build Coastguard Worker b.PrependSlot(flag, 0, 0, 0) 2067*890232f2SAndroid Build Coastguard Worker else: 2068*890232f2SAndroid Build Coastguard Worker b.PrependUOffsetTRelativeSlot(0, 0, 0) 2069*890232f2SAndroid Build Coastguard Worker end_offset = b.Offset() 2070*890232f2SAndroid Build Coastguard Worker b.EndObject() 2071*890232f2SAndroid Build Coastguard Worker self.assertEqual(0, end_offset - stored_offset) 2072*890232f2SAndroid Build Coastguard Worker 2073*890232f2SAndroid Build Coastguard Worker def test_force_defaults_true(self): 2074*890232f2SAndroid Build Coastguard Worker for flag in self.test_flags: 2075*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 2076*890232f2SAndroid Build Coastguard Worker b.ForceDefaults(True) 2077*890232f2SAndroid Build Coastguard Worker b.StartObject(1) 2078*890232f2SAndroid Build Coastguard Worker stored_offset = b.Offset() 2079*890232f2SAndroid Build Coastguard Worker if flag != N.UOffsetTFlags(): 2080*890232f2SAndroid Build Coastguard Worker b.PrependSlot(flag, 0, 0, 0) 2081*890232f2SAndroid Build Coastguard Worker else: 2082*890232f2SAndroid Build Coastguard Worker b.PrependUOffsetTRelativeSlot(0, 0, 0) 2083*890232f2SAndroid Build Coastguard Worker end_offset = b.Offset() 2084*890232f2SAndroid Build Coastguard Worker b.EndObject() 2085*890232f2SAndroid Build Coastguard Worker self.assertEqual(flag.bytewidth, end_offset - stored_offset) 2086*890232f2SAndroid Build Coastguard Worker 2087*890232f2SAndroid Build Coastguard Worker 2088*890232f2SAndroid Build Coastguard Workerclass TestAllCodePathsOfExampleSchema(unittest.TestCase): 2089*890232f2SAndroid Build Coastguard Worker 2090*890232f2SAndroid Build Coastguard Worker def setUp(self, *args, **kwargs): 2091*890232f2SAndroid Build Coastguard Worker super(TestAllCodePathsOfExampleSchema, self).setUp(*args, **kwargs) 2092*890232f2SAndroid Build Coastguard Worker 2093*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 2094*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterStart(b) 2095*890232f2SAndroid Build Coastguard Worker gen_mon = _MONSTER.MonsterEnd(b) 2096*890232f2SAndroid Build Coastguard Worker b.Finish(gen_mon) 2097*890232f2SAndroid Build Coastguard Worker 2098*890232f2SAndroid Build Coastguard Worker self.mon = _MONSTER.Monster.GetRootAs(b.Bytes, b.Head()) 2099*890232f2SAndroid Build Coastguard Worker 2100*890232f2SAndroid Build Coastguard Worker def test_default_monster_pos(self): 2101*890232f2SAndroid Build Coastguard Worker self.assertTrue(self.mon.Pos() is None) 2102*890232f2SAndroid Build Coastguard Worker 2103*890232f2SAndroid Build Coastguard Worker def test_nondefault_monster_mana(self): 2104*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 2105*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterStart(b) 2106*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterAddMana(b, 50) 2107*890232f2SAndroid Build Coastguard Worker mon = _MONSTER.MonsterEnd(b) 2108*890232f2SAndroid Build Coastguard Worker b.Finish(mon) 2109*890232f2SAndroid Build Coastguard Worker 2110*890232f2SAndroid Build Coastguard Worker got_mon = _MONSTER.Monster.GetRootAs(b.Bytes, b.Head()) 2111*890232f2SAndroid Build Coastguard Worker self.assertEqual(50, got_mon.Mana()) 2112*890232f2SAndroid Build Coastguard Worker 2113*890232f2SAndroid Build Coastguard Worker def test_default_monster_hp(self): 2114*890232f2SAndroid Build Coastguard Worker self.assertEqual(100, self.mon.Hp()) 2115*890232f2SAndroid Build Coastguard Worker 2116*890232f2SAndroid Build Coastguard Worker def test_default_monster_name(self): 2117*890232f2SAndroid Build Coastguard Worker self.assertEqual(None, self.mon.Name()) 2118*890232f2SAndroid Build Coastguard Worker 2119*890232f2SAndroid Build Coastguard Worker def test_default_monster_inventory_item(self): 2120*890232f2SAndroid Build Coastguard Worker self.assertEqual(0, self.mon.Inventory(0)) 2121*890232f2SAndroid Build Coastguard Worker 2122*890232f2SAndroid Build Coastguard Worker def test_default_monster_inventory_length(self): 2123*890232f2SAndroid Build Coastguard Worker self.assertEqual(0, self.mon.InventoryLength()) 2124*890232f2SAndroid Build Coastguard Worker self.assertTrue(self.mon.InventoryIsNone()) 2125*890232f2SAndroid Build Coastguard Worker 2126*890232f2SAndroid Build Coastguard Worker def test_empty_monster_inventory_vector(self): 2127*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 2128*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterStartInventoryVector(b, 0) 2129*890232f2SAndroid Build Coastguard Worker inv = b.EndVector() 2130*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterStart(b) 2131*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterAddInventory(b, inv) 2132*890232f2SAndroid Build Coastguard Worker mon = _MONSTER.MonsterEnd(b) 2133*890232f2SAndroid Build Coastguard Worker b.Finish(mon) 2134*890232f2SAndroid Build Coastguard Worker mon2 = _MONSTER.Monster.GetRootAs(b.Bytes, b.Head()) 2135*890232f2SAndroid Build Coastguard Worker self.assertFalse(mon2.InventoryIsNone()) 2136*890232f2SAndroid Build Coastguard Worker 2137*890232f2SAndroid Build Coastguard Worker def test_default_monster_color(self): 2138*890232f2SAndroid Build Coastguard Worker self.assertEqual(_COLOR.Color.Blue, self.mon.Color()) 2139*890232f2SAndroid Build Coastguard Worker 2140*890232f2SAndroid Build Coastguard Worker def test_nondefault_monster_color(self): 2141*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 2142*890232f2SAndroid Build Coastguard Worker color = _COLOR.Color.Red 2143*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterStart(b) 2144*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterAddColor(b, color) 2145*890232f2SAndroid Build Coastguard Worker mon = _MONSTER.MonsterEnd(b) 2146*890232f2SAndroid Build Coastguard Worker b.Finish(mon) 2147*890232f2SAndroid Build Coastguard Worker 2148*890232f2SAndroid Build Coastguard Worker mon2 = _MONSTER.Monster.GetRootAs(b.Bytes, b.Head()) 2149*890232f2SAndroid Build Coastguard Worker self.assertEqual(_COLOR.Color.Red, mon2.Color()) 2150*890232f2SAndroid Build Coastguard Worker 2151*890232f2SAndroid Build Coastguard Worker def test_default_monster_testtype(self): 2152*890232f2SAndroid Build Coastguard Worker self.assertEqual(0, self.mon.TestType()) 2153*890232f2SAndroid Build Coastguard Worker 2154*890232f2SAndroid Build Coastguard Worker def test_default_monster_test_field(self): 2155*890232f2SAndroid Build Coastguard Worker self.assertEqual(None, self.mon.Test()) 2156*890232f2SAndroid Build Coastguard Worker 2157*890232f2SAndroid Build Coastguard Worker def test_default_monster_test4_item(self): 2158*890232f2SAndroid Build Coastguard Worker self.assertEqual(None, self.mon.Test4(0)) 2159*890232f2SAndroid Build Coastguard Worker 2160*890232f2SAndroid Build Coastguard Worker def test_default_monster_test4_length(self): 2161*890232f2SAndroid Build Coastguard Worker self.assertEqual(0, self.mon.Test4Length()) 2162*890232f2SAndroid Build Coastguard Worker self.assertTrue(self.mon.Test4IsNone()) 2163*890232f2SAndroid Build Coastguard Worker 2164*890232f2SAndroid Build Coastguard Worker def test_empty_monster_test4_vector(self): 2165*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 2166*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterStartTest4Vector(b, 0) 2167*890232f2SAndroid Build Coastguard Worker test4 = b.EndVector() 2168*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterStart(b) 2169*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterAddTest4(b, test4) 2170*890232f2SAndroid Build Coastguard Worker mon = _MONSTER.MonsterEnd(b) 2171*890232f2SAndroid Build Coastguard Worker b.Finish(mon) 2172*890232f2SAndroid Build Coastguard Worker mon2 = _MONSTER.Monster.GetRootAs(b.Bytes, b.Head()) 2173*890232f2SAndroid Build Coastguard Worker self.assertFalse(mon2.Test4IsNone()) 2174*890232f2SAndroid Build Coastguard Worker 2175*890232f2SAndroid Build Coastguard Worker def test_default_monster_testarrayofstring(self): 2176*890232f2SAndroid Build Coastguard Worker self.assertEqual('', self.mon.Testarrayofstring(0)) 2177*890232f2SAndroid Build Coastguard Worker 2178*890232f2SAndroid Build Coastguard Worker def test_default_monster_testarrayofstring_length(self): 2179*890232f2SAndroid Build Coastguard Worker self.assertEqual(0, self.mon.TestarrayofstringLength()) 2180*890232f2SAndroid Build Coastguard Worker self.assertTrue(self.mon.TestarrayofstringIsNone()) 2181*890232f2SAndroid Build Coastguard Worker 2182*890232f2SAndroid Build Coastguard Worker def test_empty_monster_testarrayofstring_vector(self): 2183*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 2184*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterStartTestarrayofstringVector(b, 0) 2185*890232f2SAndroid Build Coastguard Worker testarrayofstring = b.EndVector() 2186*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterStart(b) 2187*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterAddTestarrayofstring(b, testarrayofstring) 2188*890232f2SAndroid Build Coastguard Worker mon = _MONSTER.MonsterEnd(b) 2189*890232f2SAndroid Build Coastguard Worker b.Finish(mon) 2190*890232f2SAndroid Build Coastguard Worker mon2 = _MONSTER.Monster.GetRootAs(b.Bytes, b.Head()) 2191*890232f2SAndroid Build Coastguard Worker self.assertFalse(mon2.TestarrayofstringIsNone()) 2192*890232f2SAndroid Build Coastguard Worker 2193*890232f2SAndroid Build Coastguard Worker def test_default_monster_testarrayoftables(self): 2194*890232f2SAndroid Build Coastguard Worker self.assertEqual(None, self.mon.Testarrayoftables(0)) 2195*890232f2SAndroid Build Coastguard Worker 2196*890232f2SAndroid Build Coastguard Worker def test_nondefault_monster_testarrayoftables(self): 2197*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 2198*890232f2SAndroid Build Coastguard Worker 2199*890232f2SAndroid Build Coastguard Worker # make a child Monster within a vector of Monsters: 2200*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterStart(b) 2201*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterAddHp(b, 99) 2202*890232f2SAndroid Build Coastguard Worker sub_monster = _MONSTER.MonsterEnd(b) 2203*890232f2SAndroid Build Coastguard Worker 2204*890232f2SAndroid Build Coastguard Worker # build the vector: 2205*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterStartTestarrayoftablesVector(b, 1) 2206*890232f2SAndroid Build Coastguard Worker b.PrependUOffsetTRelative(sub_monster) 2207*890232f2SAndroid Build Coastguard Worker vec = b.EndVector() 2208*890232f2SAndroid Build Coastguard Worker 2209*890232f2SAndroid Build Coastguard Worker # make the parent monster and include the vector of Monster: 2210*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterStart(b) 2211*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterAddTestarrayoftables(b, vec) 2212*890232f2SAndroid Build Coastguard Worker mon = _MONSTER.MonsterEnd(b) 2213*890232f2SAndroid Build Coastguard Worker b.Finish(mon) 2214*890232f2SAndroid Build Coastguard Worker 2215*890232f2SAndroid Build Coastguard Worker # inspect the resulting data: 2216*890232f2SAndroid Build Coastguard Worker mon2 = _MONSTER.Monster.GetRootAs(b.Output(), 0) 2217*890232f2SAndroid Build Coastguard Worker self.assertEqual(99, mon2.Testarrayoftables(0).Hp()) 2218*890232f2SAndroid Build Coastguard Worker self.assertEqual(1, mon2.TestarrayoftablesLength()) 2219*890232f2SAndroid Build Coastguard Worker self.assertFalse(mon2.TestarrayoftablesIsNone()) 2220*890232f2SAndroid Build Coastguard Worker 2221*890232f2SAndroid Build Coastguard Worker def test_default_monster_testarrayoftables_length(self): 2222*890232f2SAndroid Build Coastguard Worker self.assertEqual(0, self.mon.TestarrayoftablesLength()) 2223*890232f2SAndroid Build Coastguard Worker self.assertTrue(self.mon.TestarrayoftablesIsNone()) 2224*890232f2SAndroid Build Coastguard Worker 2225*890232f2SAndroid Build Coastguard Worker def test_empty_monster_testarrayoftables_vector(self): 2226*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 2227*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterStartTestarrayoftablesVector(b, 0) 2228*890232f2SAndroid Build Coastguard Worker testarrayoftables = b.EndVector() 2229*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterStart(b) 2230*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterAddTestarrayoftables(b, testarrayoftables) 2231*890232f2SAndroid Build Coastguard Worker mon = _MONSTER.MonsterEnd(b) 2232*890232f2SAndroid Build Coastguard Worker b.Finish(mon) 2233*890232f2SAndroid Build Coastguard Worker mon2 = _MONSTER.Monster.GetRootAs(b.Bytes, b.Head()) 2234*890232f2SAndroid Build Coastguard Worker self.assertFalse(mon2.TestarrayoftablesIsNone()) 2235*890232f2SAndroid Build Coastguard Worker 2236*890232f2SAndroid Build Coastguard Worker def test_default_monster_testarrayoftables_length(self): 2237*890232f2SAndroid Build Coastguard Worker self.assertEqual(0, self.mon.TestarrayoftablesLength()) 2238*890232f2SAndroid Build Coastguard Worker 2239*890232f2SAndroid Build Coastguard Worker def test_nondefault_monster_enemy(self): 2240*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 2241*890232f2SAndroid Build Coastguard Worker 2242*890232f2SAndroid Build Coastguard Worker # make an Enemy object: 2243*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterStart(b) 2244*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterAddHp(b, 88) 2245*890232f2SAndroid Build Coastguard Worker enemy = _MONSTER.MonsterEnd(b) 2246*890232f2SAndroid Build Coastguard Worker b.Finish(enemy) 2247*890232f2SAndroid Build Coastguard Worker 2248*890232f2SAndroid Build Coastguard Worker # make the parent monster and include the vector of Monster: 2249*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterStart(b) 2250*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterAddEnemy(b, enemy) 2251*890232f2SAndroid Build Coastguard Worker mon = _MONSTER.MonsterEnd(b) 2252*890232f2SAndroid Build Coastguard Worker b.Finish(mon) 2253*890232f2SAndroid Build Coastguard Worker 2254*890232f2SAndroid Build Coastguard Worker # inspect the resulting data: 2255*890232f2SAndroid Build Coastguard Worker mon2 = _MONSTER.Monster.GetRootAs(b.Bytes, b.Head()) 2256*890232f2SAndroid Build Coastguard Worker self.assertEqual(88, mon2.Enemy().Hp()) 2257*890232f2SAndroid Build Coastguard Worker 2258*890232f2SAndroid Build Coastguard Worker def test_default_monster_testnestedflatbuffer(self): 2259*890232f2SAndroid Build Coastguard Worker self.assertEqual(0, self.mon.Testnestedflatbuffer(0)) 2260*890232f2SAndroid Build Coastguard Worker 2261*890232f2SAndroid Build Coastguard Worker def test_default_monster_testnestedflatbuffer_length(self): 2262*890232f2SAndroid Build Coastguard Worker self.assertEqual(0, self.mon.TestnestedflatbufferLength()) 2263*890232f2SAndroid Build Coastguard Worker self.assertTrue(self.mon.TestnestedflatbufferIsNone()) 2264*890232f2SAndroid Build Coastguard Worker 2265*890232f2SAndroid Build Coastguard Worker def test_empty_monster_testnestedflatbuffer_vector(self): 2266*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 2267*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterStartTestnestedflatbufferVector(b, 0) 2268*890232f2SAndroid Build Coastguard Worker testnestedflatbuffer = b.EndVector() 2269*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterStart(b) 2270*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterAddTestnestedflatbuffer(b, testnestedflatbuffer) 2271*890232f2SAndroid Build Coastguard Worker mon = _MONSTER.MonsterEnd(b) 2272*890232f2SAndroid Build Coastguard Worker b.Finish(mon) 2273*890232f2SAndroid Build Coastguard Worker mon2 = _MONSTER.Monster.GetRootAs(b.Bytes, b.Head()) 2274*890232f2SAndroid Build Coastguard Worker self.assertFalse(mon2.TestnestedflatbufferIsNone()) 2275*890232f2SAndroid Build Coastguard Worker 2276*890232f2SAndroid Build Coastguard Worker def test_nondefault_monster_testnestedflatbuffer(self): 2277*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 2278*890232f2SAndroid Build Coastguard Worker 2279*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterStartTestnestedflatbufferVector(b, 3) 2280*890232f2SAndroid Build Coastguard Worker b.PrependByte(4) 2281*890232f2SAndroid Build Coastguard Worker b.PrependByte(2) 2282*890232f2SAndroid Build Coastguard Worker b.PrependByte(0) 2283*890232f2SAndroid Build Coastguard Worker sub_buf = b.EndVector() 2284*890232f2SAndroid Build Coastguard Worker 2285*890232f2SAndroid Build Coastguard Worker # make the parent monster and include the vector of Monster: 2286*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterStart(b) 2287*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterAddTestnestedflatbuffer(b, sub_buf) 2288*890232f2SAndroid Build Coastguard Worker mon = _MONSTER.MonsterEnd(b) 2289*890232f2SAndroid Build Coastguard Worker b.Finish(mon) 2290*890232f2SAndroid Build Coastguard Worker 2291*890232f2SAndroid Build Coastguard Worker # inspect the resulting data: 2292*890232f2SAndroid Build Coastguard Worker mon2 = _MONSTER.Monster.GetRootAs(b.Bytes, b.Head()) 2293*890232f2SAndroid Build Coastguard Worker self.assertEqual(3, mon2.TestnestedflatbufferLength()) 2294*890232f2SAndroid Build Coastguard Worker self.assertFalse(mon2.TestnestedflatbufferIsNone()) 2295*890232f2SAndroid Build Coastguard Worker self.assertEqual(0, mon2.Testnestedflatbuffer(0)) 2296*890232f2SAndroid Build Coastguard Worker self.assertEqual(2, mon2.Testnestedflatbuffer(1)) 2297*890232f2SAndroid Build Coastguard Worker self.assertEqual(4, mon2.Testnestedflatbuffer(2)) 2298*890232f2SAndroid Build Coastguard Worker try: 2299*890232f2SAndroid Build Coastguard Worker imp.find_module('numpy') 2300*890232f2SAndroid Build Coastguard Worker # if numpy exists, then we should be able to get the 2301*890232f2SAndroid Build Coastguard Worker # vector as a numpy array 2302*890232f2SAndroid Build Coastguard Worker self.assertEqual([0, 2, 4], mon2.TestnestedflatbufferAsNumpy().tolist()) 2303*890232f2SAndroid Build Coastguard Worker except ImportError: 2304*890232f2SAndroid Build Coastguard Worker assertRaises(self, lambda: mon2.TestnestedflatbufferAsNumpy(), 2305*890232f2SAndroid Build Coastguard Worker NumpyRequiredForThisFeature) 2306*890232f2SAndroid Build Coastguard Worker 2307*890232f2SAndroid Build Coastguard Worker def test_nested_monster_testnestedflatbuffer(self): 2308*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 2309*890232f2SAndroid Build Coastguard Worker 2310*890232f2SAndroid Build Coastguard Worker # build another monster to nest inside testnestedflatbuffer 2311*890232f2SAndroid Build Coastguard Worker nestedB = flatbuffers.Builder(0) 2312*890232f2SAndroid Build Coastguard Worker nameStr = nestedB.CreateString('Nested Monster') 2313*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterStart(nestedB) 2314*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterAddHp(nestedB, 30) 2315*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterAddName(nestedB, nameStr) 2316*890232f2SAndroid Build Coastguard Worker nestedMon = _MONSTER.MonsterEnd(nestedB) 2317*890232f2SAndroid Build Coastguard Worker nestedB.Finish(nestedMon) 2318*890232f2SAndroid Build Coastguard Worker 2319*890232f2SAndroid Build Coastguard Worker # write the nested FB bytes 2320*890232f2SAndroid Build Coastguard Worker sub_buf = _MONSTER.MonsterMakeTestnestedflatbufferVectorFromBytes( 2321*890232f2SAndroid Build Coastguard Worker b, nestedB.Output()) 2322*890232f2SAndroid Build Coastguard Worker 2323*890232f2SAndroid Build Coastguard Worker # make the parent monster and include the bytes of the nested monster 2324*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterStart(b) 2325*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterAddTestnestedflatbuffer(b, sub_buf) 2326*890232f2SAndroid Build Coastguard Worker mon = _MONSTER.MonsterEnd(b) 2327*890232f2SAndroid Build Coastguard Worker b.Finish(mon) 2328*890232f2SAndroid Build Coastguard Worker 2329*890232f2SAndroid Build Coastguard Worker # inspect the resulting data: 2330*890232f2SAndroid Build Coastguard Worker mon2 = _MONSTER.Monster.GetRootAs(b.Bytes, b.Head()) 2331*890232f2SAndroid Build Coastguard Worker nestedMon2 = mon2.TestnestedflatbufferNestedRoot() 2332*890232f2SAndroid Build Coastguard Worker self.assertEqual(b'Nested Monster', nestedMon2.Name()) 2333*890232f2SAndroid Build Coastguard Worker self.assertEqual(30, nestedMon2.Hp()) 2334*890232f2SAndroid Build Coastguard Worker 2335*890232f2SAndroid Build Coastguard Worker def test_nondefault_monster_testempty(self): 2336*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 2337*890232f2SAndroid Build Coastguard Worker 2338*890232f2SAndroid Build Coastguard Worker # make a Stat object: 2339*890232f2SAndroid Build Coastguard Worker _STAT.StatStart(b) 2340*890232f2SAndroid Build Coastguard Worker _STAT.StatAddVal(b, 123) 2341*890232f2SAndroid Build Coastguard Worker my_stat = _STAT.StatEnd(b) 2342*890232f2SAndroid Build Coastguard Worker b.Finish(my_stat) 2343*890232f2SAndroid Build Coastguard Worker 2344*890232f2SAndroid Build Coastguard Worker # include the stat object in a monster: 2345*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterStart(b) 2346*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterAddTestempty(b, my_stat) 2347*890232f2SAndroid Build Coastguard Worker mon = _MONSTER.MonsterEnd(b) 2348*890232f2SAndroid Build Coastguard Worker b.Finish(mon) 2349*890232f2SAndroid Build Coastguard Worker 2350*890232f2SAndroid Build Coastguard Worker # inspect the resulting data: 2351*890232f2SAndroid Build Coastguard Worker mon2 = _MONSTER.Monster.GetRootAs(b.Bytes, b.Head()) 2352*890232f2SAndroid Build Coastguard Worker self.assertEqual(123, mon2.Testempty().Val()) 2353*890232f2SAndroid Build Coastguard Worker 2354*890232f2SAndroid Build Coastguard Worker def test_default_monster_testbool(self): 2355*890232f2SAndroid Build Coastguard Worker self.assertFalse(self.mon.Testbool()) 2356*890232f2SAndroid Build Coastguard Worker 2357*890232f2SAndroid Build Coastguard Worker def test_nondefault_monster_testbool(self): 2358*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 2359*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterStart(b) 2360*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterAddTestbool(b, True) 2361*890232f2SAndroid Build Coastguard Worker mon = _MONSTER.MonsterEnd(b) 2362*890232f2SAndroid Build Coastguard Worker b.Finish(mon) 2363*890232f2SAndroid Build Coastguard Worker 2364*890232f2SAndroid Build Coastguard Worker # inspect the resulting data: 2365*890232f2SAndroid Build Coastguard Worker mon2 = _MONSTER.Monster.GetRootAs(b.Bytes, b.Head()) 2366*890232f2SAndroid Build Coastguard Worker self.assertTrue(mon2.Testbool()) 2367*890232f2SAndroid Build Coastguard Worker 2368*890232f2SAndroid Build Coastguard Worker def test_default_monster_testhashes(self): 2369*890232f2SAndroid Build Coastguard Worker self.assertEqual(0, self.mon.Testhashs32Fnv1()) 2370*890232f2SAndroid Build Coastguard Worker self.assertEqual(0, self.mon.Testhashu32Fnv1()) 2371*890232f2SAndroid Build Coastguard Worker self.assertEqual(0, self.mon.Testhashs64Fnv1()) 2372*890232f2SAndroid Build Coastguard Worker self.assertEqual(0, self.mon.Testhashu64Fnv1()) 2373*890232f2SAndroid Build Coastguard Worker self.assertEqual(0, self.mon.Testhashs32Fnv1a()) 2374*890232f2SAndroid Build Coastguard Worker self.assertEqual(0, self.mon.Testhashu32Fnv1a()) 2375*890232f2SAndroid Build Coastguard Worker self.assertEqual(0, self.mon.Testhashs64Fnv1a()) 2376*890232f2SAndroid Build Coastguard Worker self.assertEqual(0, self.mon.Testhashu64Fnv1a()) 2377*890232f2SAndroid Build Coastguard Worker 2378*890232f2SAndroid Build Coastguard Worker def test_nondefault_monster_testhashes(self): 2379*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 2380*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterStart(b) 2381*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterAddTesthashs32Fnv1(b, 1) 2382*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterAddTesthashu32Fnv1(b, 2) 2383*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterAddTesthashs64Fnv1(b, 3) 2384*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterAddTesthashu64Fnv1(b, 4) 2385*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterAddTesthashs32Fnv1a(b, 5) 2386*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterAddTesthashu32Fnv1a(b, 6) 2387*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterAddTesthashs64Fnv1a(b, 7) 2388*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterAddTesthashu64Fnv1a(b, 8) 2389*890232f2SAndroid Build Coastguard Worker mon = _MONSTER.MonsterEnd(b) 2390*890232f2SAndroid Build Coastguard Worker b.Finish(mon) 2391*890232f2SAndroid Build Coastguard Worker 2392*890232f2SAndroid Build Coastguard Worker # inspect the resulting data: 2393*890232f2SAndroid Build Coastguard Worker mon2 = _MONSTER.Monster.GetRootAs(b.Bytes, b.Head()) 2394*890232f2SAndroid Build Coastguard Worker self.assertEqual(1, mon2.Testhashs32Fnv1()) 2395*890232f2SAndroid Build Coastguard Worker self.assertEqual(2, mon2.Testhashu32Fnv1()) 2396*890232f2SAndroid Build Coastguard Worker self.assertEqual(3, mon2.Testhashs64Fnv1()) 2397*890232f2SAndroid Build Coastguard Worker self.assertEqual(4, mon2.Testhashu64Fnv1()) 2398*890232f2SAndroid Build Coastguard Worker self.assertEqual(5, mon2.Testhashs32Fnv1a()) 2399*890232f2SAndroid Build Coastguard Worker self.assertEqual(6, mon2.Testhashu32Fnv1a()) 2400*890232f2SAndroid Build Coastguard Worker self.assertEqual(7, mon2.Testhashs64Fnv1a()) 2401*890232f2SAndroid Build Coastguard Worker self.assertEqual(8, mon2.Testhashu64Fnv1a()) 2402*890232f2SAndroid Build Coastguard Worker 2403*890232f2SAndroid Build Coastguard Worker def test_default_monster_parent_namespace_test(self): 2404*890232f2SAndroid Build Coastguard Worker self.assertEqual(None, self.mon.ParentNamespaceTest()) 2405*890232f2SAndroid Build Coastguard Worker 2406*890232f2SAndroid Build Coastguard Worker def test_nondefault_monster_parent_namespace_test(self): 2407*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 2408*890232f2SAndroid Build Coastguard Worker _IN_PARENT_NAMESPACE.InParentNamespaceStart(b) 2409*890232f2SAndroid Build Coastguard Worker parent = _IN_PARENT_NAMESPACE.InParentNamespaceEnd(b) 2410*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterStart(b) 2411*890232f2SAndroid Build Coastguard Worker _MONSTER.MonsterAddParentNamespaceTest(b, parent) 2412*890232f2SAndroid Build Coastguard Worker mon = _MONSTER.MonsterEnd(b) 2413*890232f2SAndroid Build Coastguard Worker b.Finish(mon) 2414*890232f2SAndroid Build Coastguard Worker 2415*890232f2SAndroid Build Coastguard Worker # Inspect the resulting data. 2416*890232f2SAndroid Build Coastguard Worker monster = _MONSTER.Monster.GetRootAs(b.Bytes, b.Head()) 2417*890232f2SAndroid Build Coastguard Worker self.assertTrue( 2418*890232f2SAndroid Build Coastguard Worker isinstance(monster.ParentNamespaceTest(), 2419*890232f2SAndroid Build Coastguard Worker _IN_PARENT_NAMESPACE.InParentNamespace)) 2420*890232f2SAndroid Build Coastguard Worker 2421*890232f2SAndroid Build Coastguard Worker def test_getrootas_for_nonroot_table(self): 2422*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 2423*890232f2SAndroid Build Coastguard Worker string = b.CreateString('MyStat') 2424*890232f2SAndroid Build Coastguard Worker 2425*890232f2SAndroid Build Coastguard Worker _STAT.StatStart(b) 2426*890232f2SAndroid Build Coastguard Worker _STAT.StatAddId(b, string) 2427*890232f2SAndroid Build Coastguard Worker _STAT.StatAddVal(b, 12345678) 2428*890232f2SAndroid Build Coastguard Worker _STAT.StatAddCount(b, 12345) 2429*890232f2SAndroid Build Coastguard Worker stat = _STAT.StatEnd(b) 2430*890232f2SAndroid Build Coastguard Worker b.Finish(stat) 2431*890232f2SAndroid Build Coastguard Worker 2432*890232f2SAndroid Build Coastguard Worker stat2 = _STAT.Stat.GetRootAs(b.Bytes, b.Head()) 2433*890232f2SAndroid Build Coastguard Worker 2434*890232f2SAndroid Build Coastguard Worker self.assertEqual(b'MyStat', stat2.Id()) 2435*890232f2SAndroid Build Coastguard Worker self.assertEqual(12345678, stat2.Val()) 2436*890232f2SAndroid Build Coastguard Worker self.assertEqual(12345, stat2.Count()) 2437*890232f2SAndroid Build Coastguard Worker 2438*890232f2SAndroid Build Coastguard Worker 2439*890232f2SAndroid Build Coastguard Workerclass TestAllCodePathsOfMonsterExtraSchema(unittest.TestCase): 2440*890232f2SAndroid Build Coastguard Worker 2441*890232f2SAndroid Build Coastguard Worker def setUp(self, *args, **kwargs): 2442*890232f2SAndroid Build Coastguard Worker super(TestAllCodePathsOfMonsterExtraSchema, self).setUp(*args, **kwargs) 2443*890232f2SAndroid Build Coastguard Worker 2444*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 2445*890232f2SAndroid Build Coastguard Worker MyGame.MonsterExtra.Start(b) 2446*890232f2SAndroid Build Coastguard Worker gen_mon = MyGame.MonsterExtra.End(b) 2447*890232f2SAndroid Build Coastguard Worker b.Finish(gen_mon) 2448*890232f2SAndroid Build Coastguard Worker 2449*890232f2SAndroid Build Coastguard Worker self.mon = MyGame.MonsterExtra.MonsterExtra.GetRootAs(b.Bytes, b.Head()) 2450*890232f2SAndroid Build Coastguard Worker 2451*890232f2SAndroid Build Coastguard Worker def test_default_nan_inf(self): 2452*890232f2SAndroid Build Coastguard Worker self.assertTrue(math.isnan(self.mon.F1())) 2453*890232f2SAndroid Build Coastguard Worker self.assertEqual(self.mon.F2(), float('inf')) 2454*890232f2SAndroid Build Coastguard Worker self.assertEqual(self.mon.F3(), float('-inf')) 2455*890232f2SAndroid Build Coastguard Worker 2456*890232f2SAndroid Build Coastguard Worker self.assertTrue(math.isnan(self.mon.D1())) 2457*890232f2SAndroid Build Coastguard Worker self.assertEqual(self.mon.D2(), float('inf')) 2458*890232f2SAndroid Build Coastguard Worker self.assertEqual(self.mon.D3(), float('-inf')) 2459*890232f2SAndroid Build Coastguard Worker 2460*890232f2SAndroid Build Coastguard Worker 2461*890232f2SAndroid Build Coastguard Workerclass TestVtableDeduplication(unittest.TestCase): 2462*890232f2SAndroid Build Coastguard Worker """ TestVtableDeduplication verifies that vtables are deduplicated. """ 2463*890232f2SAndroid Build Coastguard Worker 2464*890232f2SAndroid Build Coastguard Worker def test_vtable_deduplication(self): 2465*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 2466*890232f2SAndroid Build Coastguard Worker 2467*890232f2SAndroid Build Coastguard Worker b.StartObject(4) 2468*890232f2SAndroid Build Coastguard Worker b.PrependByteSlot(0, 0, 0) 2469*890232f2SAndroid Build Coastguard Worker b.PrependByteSlot(1, 11, 0) 2470*890232f2SAndroid Build Coastguard Worker b.PrependByteSlot(2, 22, 0) 2471*890232f2SAndroid Build Coastguard Worker b.PrependInt16Slot(3, 33, 0) 2472*890232f2SAndroid Build Coastguard Worker obj0 = b.EndObject() 2473*890232f2SAndroid Build Coastguard Worker 2474*890232f2SAndroid Build Coastguard Worker b.StartObject(4) 2475*890232f2SAndroid Build Coastguard Worker b.PrependByteSlot(0, 0, 0) 2476*890232f2SAndroid Build Coastguard Worker b.PrependByteSlot(1, 44, 0) 2477*890232f2SAndroid Build Coastguard Worker b.PrependByteSlot(2, 55, 0) 2478*890232f2SAndroid Build Coastguard Worker b.PrependInt16Slot(3, 66, 0) 2479*890232f2SAndroid Build Coastguard Worker obj1 = b.EndObject() 2480*890232f2SAndroid Build Coastguard Worker 2481*890232f2SAndroid Build Coastguard Worker b.StartObject(4) 2482*890232f2SAndroid Build Coastguard Worker b.PrependByteSlot(0, 0, 0) 2483*890232f2SAndroid Build Coastguard Worker b.PrependByteSlot(1, 77, 0) 2484*890232f2SAndroid Build Coastguard Worker b.PrependByteSlot(2, 88, 0) 2485*890232f2SAndroid Build Coastguard Worker b.PrependInt16Slot(3, 99, 0) 2486*890232f2SAndroid Build Coastguard Worker obj2 = b.EndObject() 2487*890232f2SAndroid Build Coastguard Worker 2488*890232f2SAndroid Build Coastguard Worker got = b.Bytes[b.Head():] 2489*890232f2SAndroid Build Coastguard Worker 2490*890232f2SAndroid Build Coastguard Worker want = bytearray([ 2491*890232f2SAndroid Build Coastguard Worker 240, 2492*890232f2SAndroid Build Coastguard Worker 255, 2493*890232f2SAndroid Build Coastguard Worker 255, 2494*890232f2SAndroid Build Coastguard Worker 255, # == -12. offset to dedupped vtable. 2495*890232f2SAndroid Build Coastguard Worker 99, 2496*890232f2SAndroid Build Coastguard Worker 0, 2497*890232f2SAndroid Build Coastguard Worker 88, 2498*890232f2SAndroid Build Coastguard Worker 77, 2499*890232f2SAndroid Build Coastguard Worker 248, 2500*890232f2SAndroid Build Coastguard Worker 255, 2501*890232f2SAndroid Build Coastguard Worker 255, 2502*890232f2SAndroid Build Coastguard Worker 255, # == -8. offset to dedupped vtable. 2503*890232f2SAndroid Build Coastguard Worker 66, 2504*890232f2SAndroid Build Coastguard Worker 0, 2505*890232f2SAndroid Build Coastguard Worker 55, 2506*890232f2SAndroid Build Coastguard Worker 44, 2507*890232f2SAndroid Build Coastguard Worker 12, 2508*890232f2SAndroid Build Coastguard Worker 0, 2509*890232f2SAndroid Build Coastguard Worker 8, 2510*890232f2SAndroid Build Coastguard Worker 0, 2511*890232f2SAndroid Build Coastguard Worker 0, 2512*890232f2SAndroid Build Coastguard Worker 0, 2513*890232f2SAndroid Build Coastguard Worker 7, 2514*890232f2SAndroid Build Coastguard Worker 0, 2515*890232f2SAndroid Build Coastguard Worker 6, 2516*890232f2SAndroid Build Coastguard Worker 0, 2517*890232f2SAndroid Build Coastguard Worker 4, 2518*890232f2SAndroid Build Coastguard Worker 0, 2519*890232f2SAndroid Build Coastguard Worker 12, 2520*890232f2SAndroid Build Coastguard Worker 0, 2521*890232f2SAndroid Build Coastguard Worker 0, 2522*890232f2SAndroid Build Coastguard Worker 0, 2523*890232f2SAndroid Build Coastguard Worker 33, 2524*890232f2SAndroid Build Coastguard Worker 0, 2525*890232f2SAndroid Build Coastguard Worker 22, 2526*890232f2SAndroid Build Coastguard Worker 11, 2527*890232f2SAndroid Build Coastguard Worker ]) 2528*890232f2SAndroid Build Coastguard Worker 2529*890232f2SAndroid Build Coastguard Worker self.assertEqual((len(want), want), (len(got), got)) 2530*890232f2SAndroid Build Coastguard Worker 2531*890232f2SAndroid Build Coastguard Worker table0 = flatbuffers.table.Table(b.Bytes, len(b.Bytes) - obj0) 2532*890232f2SAndroid Build Coastguard Worker table1 = flatbuffers.table.Table(b.Bytes, len(b.Bytes) - obj1) 2533*890232f2SAndroid Build Coastguard Worker table2 = flatbuffers.table.Table(b.Bytes, len(b.Bytes) - obj2) 2534*890232f2SAndroid Build Coastguard Worker 2535*890232f2SAndroid Build Coastguard Worker def _checkTable(tab, voffsett_value, b, c, d): 2536*890232f2SAndroid Build Coastguard Worker # vtable size 2537*890232f2SAndroid Build Coastguard Worker got = tab.GetVOffsetTSlot(0, 0) 2538*890232f2SAndroid Build Coastguard Worker self.assertEqual(12, got, 'case 0, 0') 2539*890232f2SAndroid Build Coastguard Worker 2540*890232f2SAndroid Build Coastguard Worker # object size 2541*890232f2SAndroid Build Coastguard Worker got = tab.GetVOffsetTSlot(2, 0) 2542*890232f2SAndroid Build Coastguard Worker self.assertEqual(8, got, 'case 2, 0') 2543*890232f2SAndroid Build Coastguard Worker 2544*890232f2SAndroid Build Coastguard Worker # default value 2545*890232f2SAndroid Build Coastguard Worker got = tab.GetVOffsetTSlot(4, 0) 2546*890232f2SAndroid Build Coastguard Worker self.assertEqual(voffsett_value, got, 'case 4, 0') 2547*890232f2SAndroid Build Coastguard Worker 2548*890232f2SAndroid Build Coastguard Worker got = tab.GetSlot(6, 0, N.Uint8Flags) 2549*890232f2SAndroid Build Coastguard Worker self.assertEqual(b, got, 'case 6, 0') 2550*890232f2SAndroid Build Coastguard Worker 2551*890232f2SAndroid Build Coastguard Worker val = tab.GetSlot(8, 0, N.Uint8Flags) 2552*890232f2SAndroid Build Coastguard Worker self.assertEqual(c, val, 'failed 8, 0') 2553*890232f2SAndroid Build Coastguard Worker 2554*890232f2SAndroid Build Coastguard Worker got = tab.GetSlot(10, 0, N.Uint8Flags) 2555*890232f2SAndroid Build Coastguard Worker self.assertEqual(d, got, 'failed 10, 0') 2556*890232f2SAndroid Build Coastguard Worker 2557*890232f2SAndroid Build Coastguard Worker _checkTable(table0, 0, 11, 22, 33) 2558*890232f2SAndroid Build Coastguard Worker _checkTable(table1, 0, 44, 55, 66) 2559*890232f2SAndroid Build Coastguard Worker _checkTable(table2, 0, 77, 88, 99) 2560*890232f2SAndroid Build Coastguard Worker 2561*890232f2SAndroid Build Coastguard Worker 2562*890232f2SAndroid Build Coastguard Workerclass TestExceptions(unittest.TestCase): 2563*890232f2SAndroid Build Coastguard Worker 2564*890232f2SAndroid Build Coastguard Worker def test_object_is_nested_error(self): 2565*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 2566*890232f2SAndroid Build Coastguard Worker b.StartObject(0) 2567*890232f2SAndroid Build Coastguard Worker assertRaises(self, lambda: b.StartObject(0), 2568*890232f2SAndroid Build Coastguard Worker flatbuffers.builder.IsNestedError) 2569*890232f2SAndroid Build Coastguard Worker 2570*890232f2SAndroid Build Coastguard Worker def test_object_is_not_nested_error(self): 2571*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 2572*890232f2SAndroid Build Coastguard Worker assertRaises(self, lambda: b.EndObject(), 2573*890232f2SAndroid Build Coastguard Worker flatbuffers.builder.IsNotNestedError) 2574*890232f2SAndroid Build Coastguard Worker 2575*890232f2SAndroid Build Coastguard Worker def test_struct_is_not_inline_error(self): 2576*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 2577*890232f2SAndroid Build Coastguard Worker b.StartObject(0) 2578*890232f2SAndroid Build Coastguard Worker assertRaises(self, lambda: b.PrependStructSlot(0, 1, 0), 2579*890232f2SAndroid Build Coastguard Worker flatbuffers.builder.StructIsNotInlineError) 2580*890232f2SAndroid Build Coastguard Worker 2581*890232f2SAndroid Build Coastguard Worker def test_unreachable_error(self): 2582*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 2583*890232f2SAndroid Build Coastguard Worker assertRaises(self, lambda: b.PrependUOffsetTRelative(1), 2584*890232f2SAndroid Build Coastguard Worker flatbuffers.builder.OffsetArithmeticError) 2585*890232f2SAndroid Build Coastguard Worker 2586*890232f2SAndroid Build Coastguard Worker def test_create_string_is_nested_error(self): 2587*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 2588*890232f2SAndroid Build Coastguard Worker b.StartObject(0) 2589*890232f2SAndroid Build Coastguard Worker s = 'test1' 2590*890232f2SAndroid Build Coastguard Worker assertRaises(self, lambda: b.CreateString(s), 2591*890232f2SAndroid Build Coastguard Worker flatbuffers.builder.IsNestedError) 2592*890232f2SAndroid Build Coastguard Worker 2593*890232f2SAndroid Build Coastguard Worker def test_create_byte_vector_is_nested_error(self): 2594*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 2595*890232f2SAndroid Build Coastguard Worker b.StartObject(0) 2596*890232f2SAndroid Build Coastguard Worker s = b'test1' 2597*890232f2SAndroid Build Coastguard Worker assertRaises(self, lambda: b.CreateByteVector(s), 2598*890232f2SAndroid Build Coastguard Worker flatbuffers.builder.IsNestedError) 2599*890232f2SAndroid Build Coastguard Worker 2600*890232f2SAndroid Build Coastguard Worker def test_finished_bytes_error(self): 2601*890232f2SAndroid Build Coastguard Worker b = flatbuffers.Builder(0) 2602*890232f2SAndroid Build Coastguard Worker assertRaises(self, lambda: b.Output(), 2603*890232f2SAndroid Build Coastguard Worker flatbuffers.builder.BuilderNotFinishedError) 2604*890232f2SAndroid Build Coastguard Worker 2605*890232f2SAndroid Build Coastguard Worker 2606*890232f2SAndroid Build Coastguard Workerclass TestFixedLengthArrays(unittest.TestCase): 2607*890232f2SAndroid Build Coastguard Worker 2608*890232f2SAndroid Build Coastguard Worker def test_fixed_length_array(self): 2609*890232f2SAndroid Build Coastguard Worker builder = flatbuffers.Builder(0) 2610*890232f2SAndroid Build Coastguard Worker 2611*890232f2SAndroid Build Coastguard Worker a = 0.5 2612*890232f2SAndroid Build Coastguard Worker b = range(0, 15) 2613*890232f2SAndroid Build Coastguard Worker c = 1 2614*890232f2SAndroid Build Coastguard Worker d_a = [[1, 2], [3, 4]] 2615*890232f2SAndroid Build Coastguard Worker d_b = [MyGame.Example.TestEnum.TestEnum.B, \ 2616*890232f2SAndroid Build Coastguard Worker MyGame.Example.TestEnum.TestEnum.C] 2617*890232f2SAndroid Build Coastguard Worker d_c = [[MyGame.Example.TestEnum.TestEnum.A, \ 2618*890232f2SAndroid Build Coastguard Worker MyGame.Example.TestEnum.TestEnum.B], \ 2619*890232f2SAndroid Build Coastguard Worker [MyGame.Example.TestEnum.TestEnum.C, \ 2620*890232f2SAndroid Build Coastguard Worker MyGame.Example.TestEnum.TestEnum.B]] 2621*890232f2SAndroid Build Coastguard Worker d_d = [[-1, 1], [-2, 2]] 2622*890232f2SAndroid Build Coastguard Worker e = 2 2623*890232f2SAndroid Build Coastguard Worker f = [-1, 1] 2624*890232f2SAndroid Build Coastguard Worker 2625*890232f2SAndroid Build Coastguard Worker arrayOffset = MyGame.Example.ArrayStruct.CreateArrayStruct(builder, \ 2626*890232f2SAndroid Build Coastguard Worker a, b, c, d_a, d_b, d_c, d_d, e, f) 2627*890232f2SAndroid Build Coastguard Worker 2628*890232f2SAndroid Build Coastguard Worker # Create a table with the ArrayStruct. 2629*890232f2SAndroid Build Coastguard Worker MyGame.Example.ArrayTable.Start(builder) 2630*890232f2SAndroid Build Coastguard Worker MyGame.Example.ArrayTable.AddA(builder, arrayOffset) 2631*890232f2SAndroid Build Coastguard Worker tableOffset = MyGame.Example.ArrayTable.End(builder) 2632*890232f2SAndroid Build Coastguard Worker 2633*890232f2SAndroid Build Coastguard Worker builder.Finish(tableOffset) 2634*890232f2SAndroid Build Coastguard Worker 2635*890232f2SAndroid Build Coastguard Worker buf = builder.Output() 2636*890232f2SAndroid Build Coastguard Worker 2637*890232f2SAndroid Build Coastguard Worker table = MyGame.Example.ArrayTable.ArrayTable.GetRootAs(buf) 2638*890232f2SAndroid Build Coastguard Worker 2639*890232f2SAndroid Build Coastguard Worker # Verify structure. 2640*890232f2SAndroid Build Coastguard Worker nested = MyGame.Example.NestedStruct.NestedStruct() 2641*890232f2SAndroid Build Coastguard Worker self.assertEqual(table.A().A(), 0.5) 2642*890232f2SAndroid Build Coastguard Worker self.assertEqual(table.A().B(), \ 2643*890232f2SAndroid Build Coastguard Worker [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]) 2644*890232f2SAndroid Build Coastguard Worker self.assertEqual(table.A().C(), 1) 2645*890232f2SAndroid Build Coastguard Worker self.assertEqual(table.A().D(nested, 0).A(), [1, 2]) 2646*890232f2SAndroid Build Coastguard Worker self.assertEqual(table.A().D(nested, 1).A(), [3, 4]) 2647*890232f2SAndroid Build Coastguard Worker self.assertEqual(table.A().D(nested, 0).B(), \ 2648*890232f2SAndroid Build Coastguard Worker MyGame.Example.TestEnum.TestEnum.B) 2649*890232f2SAndroid Build Coastguard Worker self.assertEqual(table.A().D(nested, 1).B(), \ 2650*890232f2SAndroid Build Coastguard Worker MyGame.Example.TestEnum.TestEnum.C) 2651*890232f2SAndroid Build Coastguard Worker self.assertEqual(table.A().D(nested, 0).C(), \ 2652*890232f2SAndroid Build Coastguard Worker [MyGame.Example.TestEnum.TestEnum.A, \ 2653*890232f2SAndroid Build Coastguard Worker MyGame.Example.TestEnum.TestEnum.B]) 2654*890232f2SAndroid Build Coastguard Worker self.assertEqual(table.A().D(nested, 1).C(), \ 2655*890232f2SAndroid Build Coastguard Worker [MyGame.Example.TestEnum.TestEnum.C, \ 2656*890232f2SAndroid Build Coastguard Worker MyGame.Example.TestEnum.TestEnum.B]) 2657*890232f2SAndroid Build Coastguard Worker self.assertEqual(table.A().D(nested, 0).D(), [-1, 1]) 2658*890232f2SAndroid Build Coastguard Worker self.assertEqual(table.A().D(nested, 1).D(), [-2, 2]) 2659*890232f2SAndroid Build Coastguard Worker self.assertEqual(table.A().E(), 2) 2660*890232f2SAndroid Build Coastguard Worker self.assertEqual(table.A().F(), [-1, 1]) 2661*890232f2SAndroid Build Coastguard Worker 2662*890232f2SAndroid Build Coastguard Worker 2663*890232f2SAndroid Build Coastguard Workerdef CheckAgainstGoldDataGo(): 2664*890232f2SAndroid Build Coastguard Worker try: 2665*890232f2SAndroid Build Coastguard Worker gen_buf, gen_off = make_monster_from_generated_code() 2666*890232f2SAndroid Build Coastguard Worker fn = 'monsterdata_go_wire.mon' 2667*890232f2SAndroid Build Coastguard Worker if not os.path.exists(fn): 2668*890232f2SAndroid Build Coastguard Worker print('Go-generated data does not exist, failed.') 2669*890232f2SAndroid Build Coastguard Worker return False 2670*890232f2SAndroid Build Coastguard Worker 2671*890232f2SAndroid Build Coastguard Worker # would like to use a context manager here, but it's less 2672*890232f2SAndroid Build Coastguard Worker # backwards-compatible: 2673*890232f2SAndroid Build Coastguard Worker f = open(fn, 'rb') 2674*890232f2SAndroid Build Coastguard Worker go_wire_data = f.read() 2675*890232f2SAndroid Build Coastguard Worker f.close() 2676*890232f2SAndroid Build Coastguard Worker 2677*890232f2SAndroid Build Coastguard Worker CheckReadBuffer(bytearray(go_wire_data), 0) 2678*890232f2SAndroid Build Coastguard Worker if not bytearray(gen_buf[gen_off:]) == bytearray(go_wire_data): 2679*890232f2SAndroid Build Coastguard Worker raise AssertionError('CheckAgainstGoldDataGo failed') 2680*890232f2SAndroid Build Coastguard Worker except: 2681*890232f2SAndroid Build Coastguard Worker print('Failed to test against Go-generated test data.') 2682*890232f2SAndroid Build Coastguard Worker return False 2683*890232f2SAndroid Build Coastguard Worker 2684*890232f2SAndroid Build Coastguard Worker print( 2685*890232f2SAndroid Build Coastguard Worker 'Can read Go-generated test data, and Python generates bytewise identical data.' 2686*890232f2SAndroid Build Coastguard Worker ) 2687*890232f2SAndroid Build Coastguard Worker return True 2688*890232f2SAndroid Build Coastguard Worker 2689*890232f2SAndroid Build Coastguard Worker 2690*890232f2SAndroid Build Coastguard Workerdef CheckAgainstGoldDataJava(): 2691*890232f2SAndroid Build Coastguard Worker try: 2692*890232f2SAndroid Build Coastguard Worker gen_buf, gen_off = make_monster_from_generated_code() 2693*890232f2SAndroid Build Coastguard Worker fn = 'monsterdata_java_wire.mon' 2694*890232f2SAndroid Build Coastguard Worker if not os.path.exists(fn): 2695*890232f2SAndroid Build Coastguard Worker print('Java-generated data does not exist, failed.') 2696*890232f2SAndroid Build Coastguard Worker return False 2697*890232f2SAndroid Build Coastguard Worker f = open(fn, 'rb') 2698*890232f2SAndroid Build Coastguard Worker java_wire_data = f.read() 2699*890232f2SAndroid Build Coastguard Worker f.close() 2700*890232f2SAndroid Build Coastguard Worker 2701*890232f2SAndroid Build Coastguard Worker CheckReadBuffer(bytearray(java_wire_data), 0) 2702*890232f2SAndroid Build Coastguard Worker except: 2703*890232f2SAndroid Build Coastguard Worker print('Failed to read Java-generated test data.') 2704*890232f2SAndroid Build Coastguard Worker return False 2705*890232f2SAndroid Build Coastguard Worker 2706*890232f2SAndroid Build Coastguard Worker print('Can read Java-generated test data.') 2707*890232f2SAndroid Build Coastguard Worker return True 2708*890232f2SAndroid Build Coastguard Worker 2709*890232f2SAndroid Build Coastguard Worker 2710*890232f2SAndroid Build Coastguard Workerclass LCG(object): 2711*890232f2SAndroid Build Coastguard Worker """ Include simple random number generator to ensure results will be the 2712*890232f2SAndroid Build Coastguard Worker 2713*890232f2SAndroid Build Coastguard Worker same cross platform. 2714*890232f2SAndroid Build Coastguard Worker http://en.wikipedia.org/wiki/Park%E2%80%93Miller_random_number_generator 2715*890232f2SAndroid Build Coastguard Worker """ 2716*890232f2SAndroid Build Coastguard Worker 2717*890232f2SAndroid Build Coastguard Worker __slots__ = ['n'] 2718*890232f2SAndroid Build Coastguard Worker 2719*890232f2SAndroid Build Coastguard Worker InitialLCGSeed = 48271 2720*890232f2SAndroid Build Coastguard Worker 2721*890232f2SAndroid Build Coastguard Worker def __init__(self): 2722*890232f2SAndroid Build Coastguard Worker self.n = self.InitialLCGSeed 2723*890232f2SAndroid Build Coastguard Worker 2724*890232f2SAndroid Build Coastguard Worker def Reset(self): 2725*890232f2SAndroid Build Coastguard Worker self.n = self.InitialLCGSeed 2726*890232f2SAndroid Build Coastguard Worker 2727*890232f2SAndroid Build Coastguard Worker def Next(self): 2728*890232f2SAndroid Build Coastguard Worker self.n = ((self.n * 279470273) % 4294967291) & 0xFFFFFFFF 2729*890232f2SAndroid Build Coastguard Worker return self.n 2730*890232f2SAndroid Build Coastguard Worker 2731*890232f2SAndroid Build Coastguard Worker 2732*890232f2SAndroid Build Coastguard Workerdef BenchmarkVtableDeduplication(count): 2733*890232f2SAndroid Build Coastguard Worker """ 2734*890232f2SAndroid Build Coastguard Worker BenchmarkVtableDeduplication measures the speed of vtable deduplication 2735*890232f2SAndroid Build Coastguard Worker by creating `prePop` vtables, then populating `count` objects with a 2736*890232f2SAndroid Build Coastguard Worker different single vtable. 2737*890232f2SAndroid Build Coastguard Worker 2738*890232f2SAndroid Build Coastguard Worker When count is large (as in long benchmarks), memory usage may be high. 2739*890232f2SAndroid Build Coastguard Worker """ 2740*890232f2SAndroid Build Coastguard Worker 2741*890232f2SAndroid Build Coastguard Worker for prePop in (1, 10, 100, 1000): 2742*890232f2SAndroid Build Coastguard Worker builder = flatbuffers.Builder(0) 2743*890232f2SAndroid Build Coastguard Worker n = 1 + int(math.log(prePop, 1.5)) 2744*890232f2SAndroid Build Coastguard Worker 2745*890232f2SAndroid Build Coastguard Worker # generate some layouts: 2746*890232f2SAndroid Build Coastguard Worker layouts = set() 2747*890232f2SAndroid Build Coastguard Worker r = list(compat_range(n)) 2748*890232f2SAndroid Build Coastguard Worker while len(layouts) < prePop: 2749*890232f2SAndroid Build Coastguard Worker layouts.add(tuple(sorted(random.sample(r, int(max(1, n / 2)))))) 2750*890232f2SAndroid Build Coastguard Worker 2751*890232f2SAndroid Build Coastguard Worker layouts = list(layouts) 2752*890232f2SAndroid Build Coastguard Worker 2753*890232f2SAndroid Build Coastguard Worker # pre-populate vtables: 2754*890232f2SAndroid Build Coastguard Worker for layout in layouts: 2755*890232f2SAndroid Build Coastguard Worker builder.StartObject(n) 2756*890232f2SAndroid Build Coastguard Worker for j in layout: 2757*890232f2SAndroid Build Coastguard Worker builder.PrependInt16Slot(j, j, 0) 2758*890232f2SAndroid Build Coastguard Worker builder.EndObject() 2759*890232f2SAndroid Build Coastguard Worker 2760*890232f2SAndroid Build Coastguard Worker # benchmark deduplication of a new vtable: 2761*890232f2SAndroid Build Coastguard Worker def f(): 2762*890232f2SAndroid Build Coastguard Worker layout = random.choice(layouts) 2763*890232f2SAndroid Build Coastguard Worker builder.StartObject(n) 2764*890232f2SAndroid Build Coastguard Worker for j in layout: 2765*890232f2SAndroid Build Coastguard Worker builder.PrependInt16Slot(j, j, 0) 2766*890232f2SAndroid Build Coastguard Worker builder.EndObject() 2767*890232f2SAndroid Build Coastguard Worker 2768*890232f2SAndroid Build Coastguard Worker duration = timeit.timeit(stmt=f, number=count) 2769*890232f2SAndroid Build Coastguard Worker rate = float(count) / duration 2770*890232f2SAndroid Build Coastguard Worker print(('vtable deduplication rate (n=%d, vtables=%d): %.2f sec' % 2771*890232f2SAndroid Build Coastguard Worker (prePop, len(builder.vtables), rate))) 2772*890232f2SAndroid Build Coastguard Worker 2773*890232f2SAndroid Build Coastguard Worker 2774*890232f2SAndroid Build Coastguard Workerdef BenchmarkCheckReadBuffer(count, buf, off): 2775*890232f2SAndroid Build Coastguard Worker """ 2776*890232f2SAndroid Build Coastguard Worker BenchmarkCheckReadBuffer measures the speed of flatbuffer reading 2777*890232f2SAndroid Build Coastguard Worker by re-using the CheckReadBuffer function with the gold data. 2778*890232f2SAndroid Build Coastguard Worker """ 2779*890232f2SAndroid Build Coastguard Worker 2780*890232f2SAndroid Build Coastguard Worker def f(): 2781*890232f2SAndroid Build Coastguard Worker CheckReadBuffer(buf, off) 2782*890232f2SAndroid Build Coastguard Worker 2783*890232f2SAndroid Build Coastguard Worker duration = timeit.timeit(stmt=f, number=count) 2784*890232f2SAndroid Build Coastguard Worker rate = float(count) / duration 2785*890232f2SAndroid Build Coastguard Worker data = float(len(buf) * count) / float(1024 * 1024) 2786*890232f2SAndroid Build Coastguard Worker data_rate = data / float(duration) 2787*890232f2SAndroid Build Coastguard Worker 2788*890232f2SAndroid Build Coastguard Worker print(('traversed %d %d-byte flatbuffers in %.2fsec: %.2f/sec, %.2fMB/sec') % 2789*890232f2SAndroid Build Coastguard Worker (count, len(buf), duration, rate, data_rate)) 2790*890232f2SAndroid Build Coastguard Worker 2791*890232f2SAndroid Build Coastguard Worker 2792*890232f2SAndroid Build Coastguard Workerdef BenchmarkMakeMonsterFromGeneratedCode(count, length): 2793*890232f2SAndroid Build Coastguard Worker """ 2794*890232f2SAndroid Build Coastguard Worker BenchmarkMakeMonsterFromGeneratedCode measures the speed of flatbuffer 2795*890232f2SAndroid Build Coastguard Worker creation by re-using the make_monster_from_generated_code function for 2796*890232f2SAndroid Build Coastguard Worker generating gold data examples. 2797*890232f2SAndroid Build Coastguard Worker """ 2798*890232f2SAndroid Build Coastguard Worker 2799*890232f2SAndroid Build Coastguard Worker duration = timeit.timeit(stmt=make_monster_from_generated_code, number=count) 2800*890232f2SAndroid Build Coastguard Worker rate = float(count) / duration 2801*890232f2SAndroid Build Coastguard Worker data = float(length * count) / float(1024 * 1024) 2802*890232f2SAndroid Build Coastguard Worker data_rate = data / float(duration) 2803*890232f2SAndroid Build Coastguard Worker 2804*890232f2SAndroid Build Coastguard Worker print(('built %d %d-byte flatbuffers in %.2fsec: %.2f/sec, %.2fMB/sec' % \ 2805*890232f2SAndroid Build Coastguard Worker (count, length, duration, rate, data_rate))) 2806*890232f2SAndroid Build Coastguard Worker 2807*890232f2SAndroid Build Coastguard Worker 2808*890232f2SAndroid Build Coastguard Workerdef backward_compatible_run_tests(**kwargs): 2809*890232f2SAndroid Build Coastguard Worker if PY_VERSION < (2, 6): 2810*890232f2SAndroid Build Coastguard Worker sys.stderr.write('Python version less than 2.6 are not supported') 2811*890232f2SAndroid Build Coastguard Worker sys.stderr.flush() 2812*890232f2SAndroid Build Coastguard Worker return False 2813*890232f2SAndroid Build Coastguard Worker 2814*890232f2SAndroid Build Coastguard Worker # python2.6 has a reduced-functionality unittest.main function: 2815*890232f2SAndroid Build Coastguard Worker if PY_VERSION == (2, 6): 2816*890232f2SAndroid Build Coastguard Worker try: 2817*890232f2SAndroid Build Coastguard Worker unittest.main(**kwargs) 2818*890232f2SAndroid Build Coastguard Worker except SystemExit as e: 2819*890232f2SAndroid Build Coastguard Worker if not e.code == 0: 2820*890232f2SAndroid Build Coastguard Worker return False 2821*890232f2SAndroid Build Coastguard Worker return True 2822*890232f2SAndroid Build Coastguard Worker 2823*890232f2SAndroid Build Coastguard Worker # python2.7 and above let us not exit once unittest.main is run: 2824*890232f2SAndroid Build Coastguard Worker kwargs['exit'] = False 2825*890232f2SAndroid Build Coastguard Worker kwargs['verbosity'] = 0 2826*890232f2SAndroid Build Coastguard Worker ret = unittest.main(**kwargs) 2827*890232f2SAndroid Build Coastguard Worker if ret.result.errors or ret.result.failures: 2828*890232f2SAndroid Build Coastguard Worker return False 2829*890232f2SAndroid Build Coastguard Worker 2830*890232f2SAndroid Build Coastguard Worker return True 2831*890232f2SAndroid Build Coastguard Worker 2832*890232f2SAndroid Build Coastguard Worker 2833*890232f2SAndroid Build Coastguard Workerdef main(): 2834*890232f2SAndroid Build Coastguard Worker import os 2835*890232f2SAndroid Build Coastguard Worker import sys 2836*890232f2SAndroid Build Coastguard Worker if not len(sys.argv) == 5: 2837*890232f2SAndroid Build Coastguard Worker sys.stderr.write('Usage: %s <benchmark vtable count> ' 2838*890232f2SAndroid Build Coastguard Worker '<benchmark read count> <benchmark build count> ' 2839*890232f2SAndroid Build Coastguard Worker '<is_onefile>\n' % sys.argv[0]) 2840*890232f2SAndroid Build Coastguard Worker sys.stderr.write(' Provide COMPARE_GENERATED_TO_GO=1 to check' 2841*890232f2SAndroid Build Coastguard Worker 'for bytewise comparison to Go data.\n') 2842*890232f2SAndroid Build Coastguard Worker sys.stderr.write(' Provide COMPARE_GENERATED_TO_JAVA=1 to check' 2843*890232f2SAndroid Build Coastguard Worker 'for bytewise comparison to Java data.\n') 2844*890232f2SAndroid Build Coastguard Worker sys.stderr.flush() 2845*890232f2SAndroid Build Coastguard Worker sys.exit(1) 2846*890232f2SAndroid Build Coastguard Worker 2847*890232f2SAndroid Build Coastguard Worker kwargs = dict(argv=sys.argv[:-4]) 2848*890232f2SAndroid Build Coastguard Worker 2849*890232f2SAndroid Build Coastguard Worker create_namespace_shortcut(sys.argv[4].lower() == 'true') 2850*890232f2SAndroid Build Coastguard Worker 2851*890232f2SAndroid Build Coastguard Worker # show whether numpy is present, as it changes the test logic: 2852*890232f2SAndroid Build Coastguard Worker try: 2853*890232f2SAndroid Build Coastguard Worker import numpy 2854*890232f2SAndroid Build Coastguard Worker print('numpy available') 2855*890232f2SAndroid Build Coastguard Worker except ImportError: 2856*890232f2SAndroid Build Coastguard Worker print('numpy not available') 2857*890232f2SAndroid Build Coastguard Worker 2858*890232f2SAndroid Build Coastguard Worker # run tests, and run some language comparison checks if needed: 2859*890232f2SAndroid Build Coastguard Worker success = backward_compatible_run_tests(**kwargs) 2860*890232f2SAndroid Build Coastguard Worker if success and os.environ.get('COMPARE_GENERATED_TO_GO', 0) == '1': 2861*890232f2SAndroid Build Coastguard Worker success = success and CheckAgainstGoldDataGo() 2862*890232f2SAndroid Build Coastguard Worker if success and os.environ.get('COMPARE_GENERATED_TO_JAVA', 0) == '1': 2863*890232f2SAndroid Build Coastguard Worker success = success and CheckAgainstGoldDataJava() 2864*890232f2SAndroid Build Coastguard Worker 2865*890232f2SAndroid Build Coastguard Worker if not success: 2866*890232f2SAndroid Build Coastguard Worker sys.stderr.write('Tests failed, skipping benchmarks.\n') 2867*890232f2SAndroid Build Coastguard Worker sys.stderr.flush() 2868*890232f2SAndroid Build Coastguard Worker sys.exit(1) 2869*890232f2SAndroid Build Coastguard Worker 2870*890232f2SAndroid Build Coastguard Worker # run benchmarks (if 0, they will be a noop): 2871*890232f2SAndroid Build Coastguard Worker bench_vtable = int(sys.argv[1]) 2872*890232f2SAndroid Build Coastguard Worker bench_traverse = int(sys.argv[2]) 2873*890232f2SAndroid Build Coastguard Worker bench_build = int(sys.argv[3]) 2874*890232f2SAndroid Build Coastguard Worker if bench_vtable: 2875*890232f2SAndroid Build Coastguard Worker BenchmarkVtableDeduplication(bench_vtable) 2876*890232f2SAndroid Build Coastguard Worker if bench_traverse: 2877*890232f2SAndroid Build Coastguard Worker buf, off = make_monster_from_generated_code() 2878*890232f2SAndroid Build Coastguard Worker BenchmarkCheckReadBuffer(bench_traverse, buf, off) 2879*890232f2SAndroid Build Coastguard Worker if bench_build: 2880*890232f2SAndroid Build Coastguard Worker buf, off = make_monster_from_generated_code() 2881*890232f2SAndroid Build Coastguard Worker BenchmarkMakeMonsterFromGeneratedCode(bench_build, len(buf)) 2882*890232f2SAndroid Build Coastguard Worker 2883*890232f2SAndroid Build Coastguard Worker 2884*890232f2SAndroid Build Coastguard Workerif __name__ == '__main__': 2885*890232f2SAndroid Build Coastguard Worker main() 2886