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