1 /* 2 * Copyright 2016 Google Inc. All rights reserved. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 using System; 18 using System.Diagnostics; 19 20 namespace Google.FlatBuffers.Test 21 { 22 [FlatBuffersTestClass] 23 public class FlatBufferBuilderTests 24 { CreateBuffer(bool forceDefaults = true)25 private FlatBufferBuilder CreateBuffer(bool forceDefaults = true) 26 { 27 var fbb = new FlatBufferBuilder(16) {ForceDefaults = forceDefaults}; 28 fbb.StartTable(1); 29 return fbb; 30 } 31 32 [FlatBuffersTestMethod] FlatBufferBuilder_WithForceDefaults_WhenAddBool_AndDefaultValue_OffsetIncreasesBySize()33 public void FlatBufferBuilder_WithForceDefaults_WhenAddBool_AndDefaultValue_OffsetIncreasesBySize() 34 { 35 var fbb = CreateBuffer(); 36 var storedOffset = fbb.Offset; 37 fbb.AddBool(0, false, false); 38 var endOffset = fbb.Offset; 39 Assert.AreEqual(sizeof(bool), endOffset-storedOffset); 40 } 41 42 [FlatBuffersTestMethod] FlatBufferBuilder_WithForceDefaults_WhenAddSByte_AndDefaultValue_OffsetIncreasesBySize()43 public void FlatBufferBuilder_WithForceDefaults_WhenAddSByte_AndDefaultValue_OffsetIncreasesBySize() 44 { 45 var fbb = CreateBuffer(); 46 var storedOffset = fbb.Offset; 47 fbb.AddSbyte(0, 0, 0); 48 var endOffset = fbb.Offset; 49 Assert.AreEqual(sizeof(sbyte), endOffset - storedOffset); 50 } 51 52 [FlatBuffersTestMethod] FlatBufferBuilder_WithForceDefaults_WhenAddByte_AndDefaultValue_OffsetIncreasesBySize()53 public void FlatBufferBuilder_WithForceDefaults_WhenAddByte_AndDefaultValue_OffsetIncreasesBySize() 54 { 55 var fbb = CreateBuffer(); 56 var storedOffset = fbb.Offset; 57 fbb.AddByte(0, 0, 0); 58 var endOffset = fbb.Offset; 59 Assert.AreEqual(sizeof(byte), endOffset - storedOffset); 60 } 61 62 [FlatBuffersTestMethod] FlatBufferBuilder_WithForceDefaults_WhenAddShort_AndDefaultValue_OffsetIncreasesBySize()63 public void FlatBufferBuilder_WithForceDefaults_WhenAddShort_AndDefaultValue_OffsetIncreasesBySize() 64 { 65 var fbb = CreateBuffer(); 66 var storedOffset = fbb.Offset; 67 fbb.AddShort(0, 0, 0); 68 var endOffset = fbb.Offset; 69 Assert.AreEqual(sizeof(short), endOffset - storedOffset); 70 } 71 72 [FlatBuffersTestMethod] FlatBufferBuilder_WithForceDefaults_WhenAddUShort_AndDefaultValue_OffsetIncreasesBySize()73 public void FlatBufferBuilder_WithForceDefaults_WhenAddUShort_AndDefaultValue_OffsetIncreasesBySize() 74 { 75 var fbb = CreateBuffer(); 76 var storedOffset = fbb.Offset; 77 fbb.AddUshort(0, 0, 0); 78 var endOffset = fbb.Offset; 79 Assert.AreEqual(sizeof(ushort), endOffset - storedOffset); 80 } 81 82 [FlatBuffersTestMethod] FlatBufferBuilder_WithForceDefaults_WhenAddInt_AndDefaultValue_OffsetIncreasesBySize()83 public void FlatBufferBuilder_WithForceDefaults_WhenAddInt_AndDefaultValue_OffsetIncreasesBySize() 84 { 85 var fbb = CreateBuffer(); 86 var storedOffset = fbb.Offset; 87 fbb.AddInt(0, 0, 0); 88 var endOffset = fbb.Offset; 89 Assert.AreEqual(sizeof(int), endOffset - storedOffset); 90 } 91 92 [FlatBuffersTestMethod] FlatBufferBuilder_WithForceDefaults_WhenAddUInt_AndDefaultValue_OffsetIncreasesBySize()93 public void FlatBufferBuilder_WithForceDefaults_WhenAddUInt_AndDefaultValue_OffsetIncreasesBySize() 94 { 95 var fbb = CreateBuffer(); 96 var storedOffset = fbb.Offset; 97 fbb.AddUint(0, 0, 0); 98 var endOffset = fbb.Offset; 99 Assert.AreEqual(sizeof(uint), endOffset - storedOffset); 100 } 101 102 [FlatBuffersTestMethod] FlatBufferBuilder_WithForceDefaults_WhenAddLong_AndDefaultValue_OffsetIncreasesBySize()103 public void FlatBufferBuilder_WithForceDefaults_WhenAddLong_AndDefaultValue_OffsetIncreasesBySize() 104 { 105 var fbb = CreateBuffer(); 106 var storedOffset = fbb.Offset; 107 fbb.AddLong(0, 0, 0); 108 var endOffset = fbb.Offset; 109 Assert.AreEqual(sizeof(long), endOffset - storedOffset); 110 } 111 112 [FlatBuffersTestMethod] FlatBufferBuilder_WithForceDefaults_WhenAddULong_AndDefaultValue_OffsetIncreasesBySize()113 public void FlatBufferBuilder_WithForceDefaults_WhenAddULong_AndDefaultValue_OffsetIncreasesBySize() 114 { 115 var fbb = CreateBuffer(); 116 var storedOffset = fbb.Offset; 117 fbb.AddUlong(0, 0, 0); 118 var endOffset = fbb.Offset; 119 Assert.AreEqual(sizeof(ulong), endOffset - storedOffset); 120 } 121 122 [FlatBuffersTestMethod] FlatBufferBuilder_WithForceDefaults_WhenAddFloat_AndDefaultValue_OffsetIncreasesBySize()123 public void FlatBufferBuilder_WithForceDefaults_WhenAddFloat_AndDefaultValue_OffsetIncreasesBySize() 124 { 125 var fbb = CreateBuffer(); 126 var storedOffset = fbb.Offset; 127 fbb.AddFloat(0, 0, 0); 128 var endOffset = fbb.Offset; 129 Assert.AreEqual(sizeof(float), endOffset - storedOffset); 130 } 131 132 [FlatBuffersTestMethod] FlatBufferBuilder_WithForceDefaults_WhenAddDouble_AndDefaultValue_OffsetIncreasesBySize()133 public void FlatBufferBuilder_WithForceDefaults_WhenAddDouble_AndDefaultValue_OffsetIncreasesBySize() 134 { 135 var fbb = CreateBuffer(); 136 var storedOffset = fbb.Offset; 137 fbb.AddDouble(0, 0, 0); 138 var endOffset = fbb.Offset; 139 Assert.AreEqual(sizeof(double), endOffset - storedOffset); 140 } 141 142 [FlatBuffersTestMethod] FlatBufferBuilder_WhenAddBool_AndDefaultValue_OffsetIsUnchanged()143 public void FlatBufferBuilder_WhenAddBool_AndDefaultValue_OffsetIsUnchanged() 144 { 145 var fbb = CreateBuffer(false); 146 var storedOffset = fbb.Offset; 147 fbb.AddBool(0, false, false); 148 var endOffset = fbb.Offset; 149 Assert.AreEqual(endOffset, storedOffset); 150 } 151 152 [FlatBuffersTestMethod] FlatBufferBuilder_WhenAddSByte_AndDefaultValue_OffsetIsUnchanged()153 public void FlatBufferBuilder_WhenAddSByte_AndDefaultValue_OffsetIsUnchanged() 154 { 155 var fbb = CreateBuffer(false); 156 var storedOffset = fbb.Offset; 157 fbb.AddSbyte(0, 0, 0); 158 var endOffset = fbb.Offset; 159 Assert.AreEqual(endOffset, storedOffset); 160 } 161 162 [FlatBuffersTestMethod] FlatBufferBuilder_WhenAddByte_AndDefaultValue_OffsetIsUnchanged()163 public void FlatBufferBuilder_WhenAddByte_AndDefaultValue_OffsetIsUnchanged() 164 { 165 var fbb = CreateBuffer(false); 166 var storedOffset = fbb.Offset; 167 fbb.AddByte(0, 0, 0); 168 var endOffset = fbb.Offset; 169 Assert.AreEqual(endOffset, storedOffset); 170 } 171 172 [FlatBuffersTestMethod] FlatBufferBuilder_WhenAddShort_AndDefaultValue_OffsetIsUnchanged()173 public void FlatBufferBuilder_WhenAddShort_AndDefaultValue_OffsetIsUnchanged() 174 { 175 var fbb = CreateBuffer(false); 176 var storedOffset = fbb.Offset; 177 fbb.AddShort(0, 0, 0); 178 var endOffset = fbb.Offset; 179 Assert.AreEqual(endOffset, storedOffset); 180 } 181 182 [FlatBuffersTestMethod] FlatBufferBuilder_WhenAddUShort_AndDefaultValue_OffsetIsUnchanged()183 public void FlatBufferBuilder_WhenAddUShort_AndDefaultValue_OffsetIsUnchanged() 184 { 185 var fbb = CreateBuffer(false); 186 var storedOffset = fbb.Offset; 187 fbb.AddUshort(0, 0, 0); 188 var endOffset = fbb.Offset; 189 Assert.AreEqual(endOffset, storedOffset); 190 } 191 192 [FlatBuffersTestMethod] FlatBufferBuilder_WhenAddInt_AndDefaultValue_OffsetIsUnchanged()193 public void FlatBufferBuilder_WhenAddInt_AndDefaultValue_OffsetIsUnchanged() 194 { 195 var fbb = CreateBuffer(false); 196 var storedOffset = fbb.Offset; 197 fbb.AddInt(0, 0, 0); 198 var endOffset = fbb.Offset; 199 Assert.AreEqual(endOffset, storedOffset); 200 } 201 202 [FlatBuffersTestMethod] FlatBufferBuilder_WhenAddUInt_AndDefaultValue_OffsetIsUnchanged()203 public void FlatBufferBuilder_WhenAddUInt_AndDefaultValue_OffsetIsUnchanged() 204 { 205 var fbb = CreateBuffer(false); 206 var storedOffset = fbb.Offset; 207 fbb.AddUint(0, 0, 0); 208 var endOffset = fbb.Offset; 209 Assert.AreEqual(endOffset, storedOffset); 210 } 211 212 [FlatBuffersTestMethod] FlatBufferBuilder_WhenAddLong_AndDefaultValue_OffsetIsUnchanged()213 public void FlatBufferBuilder_WhenAddLong_AndDefaultValue_OffsetIsUnchanged() 214 { 215 var fbb = CreateBuffer(false); 216 var storedOffset = fbb.Offset; 217 fbb.AddLong(0, 0, 0); 218 var endOffset = fbb.Offset; 219 Assert.AreEqual(endOffset, storedOffset); 220 } 221 222 [FlatBuffersTestMethod] FlatBufferBuilder_WhenAddULong_AndDefaultValue_OffsetIsUnchanged()223 public void FlatBufferBuilder_WhenAddULong_AndDefaultValue_OffsetIsUnchanged() 224 { 225 var fbb = CreateBuffer(false); 226 var storedOffset = fbb.Offset; 227 fbb.AddUlong(0, 0, 0); 228 var endOffset = fbb.Offset; 229 Assert.AreEqual(endOffset, storedOffset); 230 } 231 232 [FlatBuffersTestMethod] FlatBufferBuilder_WhenAddFloat_AndDefaultValue_OffsetIsUnchanged()233 public void FlatBufferBuilder_WhenAddFloat_AndDefaultValue_OffsetIsUnchanged() 234 { 235 var fbb = CreateBuffer(false); 236 var storedOffset = fbb.Offset; 237 fbb.AddFloat(0, 0, 0); 238 var endOffset = fbb.Offset; 239 Assert.AreEqual(endOffset, storedOffset); 240 } 241 242 [FlatBuffersTestMethod] FlatBufferBuilder_WhenAddDouble_AndDefaultValue_OffsetIsUnchanged()243 public void FlatBufferBuilder_WhenAddDouble_AndDefaultValue_OffsetIsUnchanged() 244 { 245 var fbb = CreateBuffer(false); 246 var storedOffset = fbb.Offset; 247 fbb.AddDouble(0, 0, 0); 248 var endOffset = fbb.Offset; 249 Assert.AreEqual(endOffset, storedOffset); 250 } 251 252 [FlatBuffersTestMethod] FlatBufferBuilder_WhenAddNullableBool_OffsetIsUnchanged()253 public void FlatBufferBuilder_WhenAddNullableBool_OffsetIsUnchanged() 254 { 255 var fbb = CreateBuffer(false); 256 var storedOffset = fbb.Offset; 257 fbb.AddBool(0, null); 258 var endOffset = fbb.Offset; 259 Assert.AreEqual(endOffset, storedOffset); 260 } 261 262 [FlatBuffersTestMethod] FlatBufferBuilder_WhenAddNullableSbyte_OffsetIsUnchanged()263 public void FlatBufferBuilder_WhenAddNullableSbyte_OffsetIsUnchanged() 264 { 265 var fbb = CreateBuffer(false); 266 var storedOffset = fbb.Offset; 267 fbb.AddSbyte(0, null); 268 var endOffset = fbb.Offset; 269 Assert.AreEqual(endOffset, storedOffset); 270 } 271 272 [FlatBuffersTestMethod] FlatBufferBuilder_WhenAddNullableByte_OffsetIsUnchanged()273 public void FlatBufferBuilder_WhenAddNullableByte_OffsetIsUnchanged() 274 { 275 var fbb = CreateBuffer(false); 276 var storedOffset = fbb.Offset; 277 fbb.AddByte(0, null); 278 var endOffset = fbb.Offset; 279 Assert.AreEqual(endOffset, storedOffset); 280 } 281 282 [FlatBuffersTestMethod] FlatBufferBuilder_WhenAddNullableShort_OffsetIsUnchanged()283 public void FlatBufferBuilder_WhenAddNullableShort_OffsetIsUnchanged() 284 { 285 var fbb = CreateBuffer(false); 286 var storedOffset = fbb.Offset; 287 fbb.AddShort(0, null); 288 var endOffset = fbb.Offset; 289 Assert.AreEqual(endOffset, storedOffset); 290 } 291 292 [FlatBuffersTestMethod] FlatBufferBuilder_WhenAddNullableUShort_OffsetIsUnchanged()293 public void FlatBufferBuilder_WhenAddNullableUShort_OffsetIsUnchanged() 294 { 295 var fbb = CreateBuffer(false); 296 var storedOffset = fbb.Offset; 297 fbb.AddUshort(0, null); 298 var endOffset = fbb.Offset; 299 Assert.AreEqual(endOffset, storedOffset); 300 } 301 302 [FlatBuffersTestMethod] FlatBufferBuilder_WhenAddNullableInt_OffsetIsUnchanged()303 public void FlatBufferBuilder_WhenAddNullableInt_OffsetIsUnchanged() 304 { 305 var fbb = CreateBuffer(false); 306 var storedOffset = fbb.Offset; 307 fbb.AddInt(0, null); 308 var endOffset = fbb.Offset; 309 Assert.AreEqual(endOffset, storedOffset); 310 } 311 312 [FlatBuffersTestMethod] FlatBufferBuilder_WhenAddNullableUInt_OffsetIsUnchanged()313 public void FlatBufferBuilder_WhenAddNullableUInt_OffsetIsUnchanged() 314 { 315 var fbb = CreateBuffer(false); 316 var storedOffset = fbb.Offset; 317 fbb.AddUint(0, null); 318 var endOffset = fbb.Offset; 319 Assert.AreEqual(endOffset, storedOffset); 320 } 321 322 [FlatBuffersTestMethod] FlatBufferBuilder_WhenAddNullableLong_OffsetIsUnchanged()323 public void FlatBufferBuilder_WhenAddNullableLong_OffsetIsUnchanged() 324 { 325 var fbb = CreateBuffer(false); 326 var storedOffset = fbb.Offset; 327 fbb.AddLong(0, null); 328 var endOffset = fbb.Offset; 329 Assert.AreEqual(endOffset, storedOffset); 330 } 331 332 [FlatBuffersTestMethod] FlatBufferBuilder_WhenAddNullableULong_OffsetIsUnchanged()333 public void FlatBufferBuilder_WhenAddNullableULong_OffsetIsUnchanged() 334 { 335 var fbb = CreateBuffer(false); 336 var storedOffset = fbb.Offset; 337 fbb.AddUlong(0, null); 338 var endOffset = fbb.Offset; 339 Assert.AreEqual(endOffset, storedOffset); 340 } 341 342 [FlatBuffersTestMethod] FlatBufferBuilder_WhenAddNullableFloat_OffsetIsUnchanged()343 public void FlatBufferBuilder_WhenAddNullableFloat_OffsetIsUnchanged() 344 { 345 var fbb = CreateBuffer(false); 346 var storedOffset = fbb.Offset; 347 fbb.AddFloat(0, null); 348 var endOffset = fbb.Offset; 349 Assert.AreEqual(endOffset, storedOffset); 350 } 351 352 [FlatBuffersTestMethod] FlatBufferBuilder_WhenAddNullableDouble_OffsetIsUnchanged()353 public void FlatBufferBuilder_WhenAddNullableDouble_OffsetIsUnchanged() 354 { 355 var fbb = CreateBuffer(false); 356 var storedOffset = fbb.Offset; 357 fbb.AddDouble(0, null); 358 var endOffset = fbb.Offset; 359 Assert.AreEqual(endOffset, storedOffset); 360 } 361 362 [FlatBuffersTestMethod] FlatBufferBuilder_WhenAddNullableBool_OffsetIsChangedBySize()363 public void FlatBufferBuilder_WhenAddNullableBool_OffsetIsChangedBySize() 364 { 365 var fbb = CreateBuffer(false); 366 var storedOffset = fbb.Offset; 367 fbb.AddBool(0, true); 368 var endOffset = fbb.Offset; 369 Assert.AreEqual(sizeof(bool), endOffset - storedOffset); 370 } 371 372 [FlatBuffersTestMethod] FlatBufferBuilder_WhenAddNullableSbyte_OffsetIsChangedBySize()373 public void FlatBufferBuilder_WhenAddNullableSbyte_OffsetIsChangedBySize() 374 { 375 var fbb = CreateBuffer(false); 376 var storedOffset = fbb.Offset; 377 fbb.AddSbyte(0, 1); 378 var endOffset = fbb.Offset; 379 Assert.AreEqual(sizeof(sbyte), endOffset - storedOffset); 380 } 381 382 [FlatBuffersTestMethod] FlatBufferBuilder_WhenAddNullableByte_OffsetIsChangedBySize()383 public void FlatBufferBuilder_WhenAddNullableByte_OffsetIsChangedBySize() 384 { 385 var fbb = CreateBuffer(false); 386 var storedOffset = fbb.Offset; 387 fbb.AddByte(0, 1); 388 var endOffset = fbb.Offset; 389 Assert.AreEqual(sizeof(byte), endOffset - storedOffset); 390 } 391 392 [FlatBuffersTestMethod] FlatBufferBuilder_WhenAddNullableShort_OffsetIsChangedBySize()393 public void FlatBufferBuilder_WhenAddNullableShort_OffsetIsChangedBySize() 394 { 395 var fbb = CreateBuffer(false); 396 var storedOffset = fbb.Offset; 397 fbb.AddShort(0, 1); 398 var endOffset = fbb.Offset; 399 Assert.AreEqual(sizeof(short), endOffset - storedOffset); 400 } 401 402 [FlatBuffersTestMethod] FlatBufferBuilder_WhenAddNullableUShort_OffsetIsChangedBySize()403 public void FlatBufferBuilder_WhenAddNullableUShort_OffsetIsChangedBySize() 404 { 405 var fbb = CreateBuffer(false); 406 var storedOffset = fbb.Offset; 407 fbb.AddUshort(0, 1); 408 var endOffset = fbb.Offset; 409 Assert.AreEqual(sizeof(ushort), endOffset - storedOffset); 410 } 411 412 [FlatBuffersTestMethod] FlatBufferBuilder_WhenAddNullableInt_OffsetIsChangedBySize()413 public void FlatBufferBuilder_WhenAddNullableInt_OffsetIsChangedBySize() 414 { 415 var fbb = CreateBuffer(false); 416 var storedOffset = fbb.Offset; 417 fbb.AddInt(0, 1); 418 var endOffset = fbb.Offset; 419 Assert.AreEqual(sizeof(int), endOffset - storedOffset); 420 } 421 422 [FlatBuffersTestMethod] FlatBufferBuilder_WhenAddNullableUInt_OffsetIsChangedBySize()423 public void FlatBufferBuilder_WhenAddNullableUInt_OffsetIsChangedBySize() 424 { 425 var fbb = CreateBuffer(false); 426 var storedOffset = fbb.Offset; 427 fbb.AddUint(0, 1); 428 var endOffset = fbb.Offset; 429 Assert.AreEqual(sizeof(uint), endOffset - storedOffset); 430 } 431 432 [FlatBuffersTestMethod] FlatBufferBuilder_WhenAddNullableLong_OffsetIsChangedBySize()433 public void FlatBufferBuilder_WhenAddNullableLong_OffsetIsChangedBySize() 434 { 435 var fbb = CreateBuffer(false); 436 var storedOffset = fbb.Offset; 437 fbb.AddLong(0, 1); 438 var endOffset = fbb.Offset; 439 Assert.AreEqual(sizeof(long), endOffset - storedOffset); 440 } 441 442 [FlatBuffersTestMethod] FlatBufferBuilder_WhenAddNullableULong_OffsetIsChangedBySize()443 public void FlatBufferBuilder_WhenAddNullableULong_OffsetIsChangedBySize() 444 { 445 var fbb = CreateBuffer(false); 446 var storedOffset = fbb.Offset; 447 fbb.AddUlong(0, 1); 448 var endOffset = fbb.Offset; 449 Assert.AreEqual(sizeof(ulong), endOffset - storedOffset); 450 } 451 452 [FlatBuffersTestMethod] FlatBufferBuilder_WhenAddNullableFloat_OffsetIsChangedBySize()453 public void FlatBufferBuilder_WhenAddNullableFloat_OffsetIsChangedBySize() 454 { 455 var fbb = CreateBuffer(false); 456 var storedOffset = fbb.Offset; 457 fbb.AddFloat(0, 1.0F); 458 var endOffset = fbb.Offset; 459 Assert.AreEqual(sizeof(float), endOffset - storedOffset); 460 } 461 462 [FlatBuffersTestMethod] FlatBufferBuilder_WhenAddNullableDouble_OffsetIsChangedBySize()463 public void FlatBufferBuilder_WhenAddNullableDouble_OffsetIsChangedBySize() 464 { 465 var fbb = CreateBuffer(false); 466 var storedOffset = fbb.Offset; 467 fbb.AddDouble(0, 1.0); 468 var endOffset = fbb.Offset; 469 Assert.AreEqual(sizeof(double), endOffset - storedOffset); 470 } 471 472 [FlatBuffersTestMethod] FlatBufferBuilder_Add_Array_Float()473 public void FlatBufferBuilder_Add_Array_Float() 474 { 475 var fbb = CreateBuffer(false); 476 var storedOffset = fbb.Offset; 477 478 const int len = 9; 479 480 // Construct the data array 481 var data = new float[len]; 482 data[0] = 1.0079F; 483 data[1] = 4.0026F; 484 data[2] = 6.941F; 485 data[3] = 9.0122F; 486 data[4] = 10.811F; 487 data[5] = 12.0107F; 488 data[6] = 14.0067F; 489 data[7] = 15.9994F; 490 data[8] = 18.9984F; 491 492 fbb.Add(data); 493 var endOffset = fbb.Offset; 494 Assert.AreEqual(endOffset, storedOffset + sizeof(float) * data.Length); 495 } 496 497 [FlatBuffersTestMethod] FlatBufferBuilder_Add_Array_Bool()498 public void FlatBufferBuilder_Add_Array_Bool() 499 { 500 var fbb = CreateBuffer(false); 501 var storedOffset = fbb.Offset; 502 503 const int len = 9; 504 505 // Construct the data array 506 var data = new bool[len]; 507 data[0] = true; 508 data[1] = true; 509 data[2] = false; 510 data[3] = true; 511 data[4] = false; 512 data[5] = true; 513 data[6] = true; 514 data[7] = true; 515 data[8] = false; 516 517 fbb.Add(data); 518 var endOffset = fbb.Offset; 519 Assert.AreEqual(endOffset, storedOffset + sizeof(bool) * data.Length); 520 } 521 522 [FlatBuffersTestMethod] FlatBufferBuilder_Add_Array_Double()523 public void FlatBufferBuilder_Add_Array_Double() 524 { 525 var fbb = CreateBuffer(false); 526 var storedOffset = fbb.Offset; 527 528 const int len = 9; 529 530 // Construct the data array 531 var data = new double[len]; 532 data[0] = 1.0079; 533 data[1] = 4.0026; 534 data[2] = 6.941; 535 data[3] = 9.0122; 536 data[4] = 10.811; 537 data[5] = 12.0107; 538 data[6] = 14.0067; 539 data[7] = 15.9994; 540 data[8] = 18.9984; 541 542 fbb.Add(data); 543 var endOffset = fbb.Offset; 544 Assert.AreEqual(endOffset, storedOffset + sizeof(double) * data.Length); 545 } 546 547 [FlatBuffersTestMethod] FlatBufferBuilder_Add_Array_Null_Throws()548 public void FlatBufferBuilder_Add_Array_Null_Throws() 549 { 550 var fbb = CreateBuffer(false); 551 552 // Construct the data array 553 float[] data = null; 554 555 Assert.Throws<ArgumentNullException>(() => fbb.Add(data)); 556 } 557 558 [FlatBuffersTestMethod] FlatBufferBuilder_Add_Array_UnsupportedType_Throws()559 public unsafe void FlatBufferBuilder_Add_Array_UnsupportedType_Throws() 560 { 561 var fbb = CreateBuffer(false); 562 563 var storedOffset = fbb.Offset; 564 565 // Construct the data array 566 var data = new DummyStruct[10]; 567 Assert.Throws<ArgumentException>(() => fbb.Add(data)); 568 } 569 570 [FlatBuffersTestMethod] FlatBufferBuilder_Add_Array_Empty_Noop()571 public void FlatBufferBuilder_Add_Array_Empty_Noop() 572 { 573 var fbb = CreateBuffer(false); 574 575 var storedOffset = fbb.Offset; 576 577 // Construct an empty data array 578 float[] data = new float[0]; 579 fbb.Add(data); 580 581 // Make sure the offset didn't change since nothing 582 // was really added 583 var endOffset = fbb.Offset; 584 Assert.AreEqual(endOffset, storedOffset); 585 } 586 587 [FlatBuffersTestMethod] FlatBufferBuilder_Add_ArraySegment_Default_Throws()588 public void FlatBufferBuilder_Add_ArraySegment_Default_Throws() 589 { 590 #if NETCOREAPP 591 var fbb = CreateBuffer(false); 592 593 // Construct the data array 594 ArraySegment<float> data = default(ArraySegment<float>); 595 596 Assert.Throws<ArgumentNullException>(() => fbb.Add(data)); 597 #endif 598 } 599 600 [FlatBuffersTestMethod] FlatBufferBuilder_Add_ArraySegment_UnsupportedType_Throws()601 public unsafe void FlatBufferBuilder_Add_ArraySegment_UnsupportedType_Throws() 602 { 603 var fbb = CreateBuffer(false); 604 605 var storedOffset = fbb.Offset; 606 607 // Construct the data array 608 var array = new DummyStruct[10]; 609 var data = new ArraySegment<DummyStruct>(array); 610 Assert.Throws<ArgumentException>(() => fbb.Add(data)); 611 } 612 613 [FlatBuffersTestMethod] FlatBufferBuilder_Add_ArraySegment_Empty_Noop()614 public void FlatBufferBuilder_Add_ArraySegment_Empty_Noop() 615 { 616 var fbb = CreateBuffer(false); 617 618 var storedOffset = fbb.Offset; 619 620 // Construct the data array 621 var array = new float[10]; 622 var data = new ArraySegment<float>(array, 5, 0); 623 fbb.Add(data); 624 625 // Make sure the offset didn't change since nothing 626 // was really added 627 var endOffset = fbb.Offset; 628 Assert.AreEqual(endOffset, storedOffset); 629 } 630 631 [FlatBuffersTestMethod] FlatBufferBuilder_Add_IntPtr_Zero_Throws()632 public void FlatBufferBuilder_Add_IntPtr_Zero_Throws() 633 { 634 var fbb = CreateBuffer(false); 635 636 // Construct the data array 637 var data = IntPtr.Zero; 638 var length = 100; 639 640 Assert.Throws<ArgumentNullException>(() => fbb.Add<float>(data, length)); 641 } 642 643 [FlatBuffersTestMethod] FlatBufferBuilder_Add_IntPtr_SizeNegative_Throws()644 public unsafe void FlatBufferBuilder_Add_IntPtr_SizeNegative_Throws() 645 { 646 var fbb = CreateBuffer(false); 647 648 // Construct the data array 649 var array = new float[10]; 650 fixed(float* ptr = array) 651 { 652 var data = (IntPtr)ptr; 653 var length = -1; 654 Assert.Throws<ArgumentOutOfRangeException>(() => fbb.Add<float>(data, length)); 655 } 656 } 657 658 [FlatBuffersTestMethod] FlatBufferBuilder_Add_IntPtr_Zero_Empty_Noop()659 public void FlatBufferBuilder_Add_IntPtr_Zero_Empty_Noop() 660 { 661 var fbb = CreateBuffer(false); 662 663 var storedOffset = fbb.Offset; 664 665 // Construct the data array 666 var data = IntPtr.Zero; 667 var length = 0; 668 669 fbb.Add<float>(data, length); 670 671 // make sure that a length of 0 doesn't throw also if ptr is Zero as well 672 // and that nothing was really added 673 var endOffset = fbb.Offset; 674 Assert.AreEqual(endOffset, storedOffset); 675 } 676 677 [FlatBuffersTestMethod] FlatBufferBuilder_Add_IntPtr_Empty_Noop()678 public unsafe void FlatBufferBuilder_Add_IntPtr_Empty_Noop() 679 { 680 var fbb = CreateBuffer(false); 681 682 var storedOffset = fbb.Offset; 683 684 // Construct the data array 685 var array = new float[10]; 686 fixed(float* ptr = array) 687 { 688 var data = (IntPtr)ptr; 689 var length = 0; 690 fbb.Add<float>(data, length); 691 } 692 693 // Make sure the offset didn't change since nothing 694 // was really added 695 var endOffset = fbb.Offset; 696 Assert.AreEqual(endOffset, storedOffset); 697 } 698 699 [FlatBuffersTestMethod] FlatBufferBuilder_Add_IntPtr_SizeInBytesNotMatchingDataType_Throws()700 public unsafe void FlatBufferBuilder_Add_IntPtr_SizeInBytesNotMatchingDataType_Throws() 701 { 702 var fbb = CreateBuffer(false); 703 704 var storedOffset = fbb.Offset; 705 706 // Construct the data array 707 var array = new float[10]; 708 fixed(float* ptr = array) 709 { 710 const int invalidBytes = 1; 711 var data = (IntPtr)ptr; 712 // add some invalid bytes to the length 713 var length = 2 * sizeof(float) + invalidBytes; 714 715 Assert.Throws<ArgumentException>(() => fbb.Add<float>(data, length)); 716 } 717 } 718 719 [FlatBuffersTestMethod] FlatBufferBuilder_Add_IntPtr_UnsupportedType_Throws()720 public unsafe void FlatBufferBuilder_Add_IntPtr_UnsupportedType_Throws() 721 { 722 var fbb = CreateBuffer(false); 723 724 var storedOffset = fbb.Offset; 725 726 // Construct the data array 727 var array = new DummyStruct[10]; 728 fixed(DummyStruct* ptr = array) 729 { 730 var data = (IntPtr)ptr; 731 var length = 10 * sizeof(DummyStruct); 732 733 Assert.Throws<ArgumentException>(() => fbb.Add<DummyStruct>(data, length)); 734 } 735 } 736 737 private struct DummyStruct 738 { 739 int value; 740 } 741 742 [FlatBuffersTestMethod] FlatBufferBuilder_Add_null_String()743 public void FlatBufferBuilder_Add_null_String() 744 { 745 var fbb = new FlatBufferBuilder(16); 746 string s = null; 747 Assert.AreEqual(fbb.CreateSharedString(s).Value, 0); 748 Assert.AreEqual(fbb.CreateString(s).Value, 0); 749 } 750 751 [FlatBuffersTestMethod] FlatBufferBuilder_Empty_Builder()752 public void FlatBufferBuilder_Empty_Builder() 753 { 754 var fbb = new FlatBufferBuilder(16); 755 var str = "Hello"; 756 var flatbuffer = "Flatbuffers!"; 757 var strOffset = fbb.CreateSharedString(str); 758 var flatbufferOffset = fbb.CreateSharedString(flatbuffer); 759 fbb.Clear(); 760 var flatbufferOffset2 = fbb.CreateSharedString(flatbuffer); 761 var strOffset2 = fbb.CreateSharedString(str); 762 Assert.IsFalse(strOffset.Value == strOffset2.Value); 763 Assert.IsFalse(flatbufferOffset.Value == flatbufferOffset2.Value); 764 } 765 } 766 } 767