• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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