xref: /aosp_15_r20/external/flatbuffers/tests/FlatBuffers.Test/ByteBufferTests.cs (revision 890232f25432b36107d06881e0a25aaa6b473652)
1*890232f2SAndroid Build Coastguard Worker /*
2*890232f2SAndroid Build Coastguard Worker  * Copyright 2014 Google Inc. All rights reserved.
3*890232f2SAndroid Build Coastguard Worker  *
4*890232f2SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*890232f2SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*890232f2SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*890232f2SAndroid Build Coastguard Worker  *
8*890232f2SAndroid Build Coastguard Worker  *     http://www.apache.org/licenses/LICENSE-2.0
9*890232f2SAndroid Build Coastguard Worker  *
10*890232f2SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*890232f2SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*890232f2SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*890232f2SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*890232f2SAndroid Build Coastguard Worker  * limitations under the License.
15*890232f2SAndroid Build Coastguard Worker  */
16*890232f2SAndroid Build Coastguard Worker 
17*890232f2SAndroid Build Coastguard Worker using System;
18*890232f2SAndroid Build Coastguard Worker using System.Runtime.InteropServices;
19*890232f2SAndroid Build Coastguard Worker 
20*890232f2SAndroid Build Coastguard Worker namespace FlatBuffers.Test
21*890232f2SAndroid Build Coastguard Worker {
22*890232f2SAndroid Build Coastguard Worker     [FlatBuffersTestClass]
23*890232f2SAndroid Build Coastguard Worker     public class ByteBufferTests
24*890232f2SAndroid Build Coastguard Worker     {
25*890232f2SAndroid Build Coastguard Worker 
26*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_Length_MatchesBufferLength()27*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_Length_MatchesBufferLength()
28*890232f2SAndroid Build Coastguard Worker         {
29*890232f2SAndroid Build Coastguard Worker             var buffer = new byte[1000];
30*890232f2SAndroid Build Coastguard Worker             var uut = new ByteBuffer(buffer);
31*890232f2SAndroid Build Coastguard Worker             Assert.AreEqual(buffer.Length, uut.Length);
32*890232f2SAndroid Build Coastguard Worker         }
33*890232f2SAndroid Build Coastguard Worker 
34*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_PutBytePopulatesBufferAtZeroOffset()35*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_PutBytePopulatesBufferAtZeroOffset()
36*890232f2SAndroid Build Coastguard Worker         {
37*890232f2SAndroid Build Coastguard Worker             var buffer = new byte[1];
38*890232f2SAndroid Build Coastguard Worker             var uut = new ByteBuffer(buffer);
39*890232f2SAndroid Build Coastguard Worker             uut.PutByte(0, (byte)99);
40*890232f2SAndroid Build Coastguard Worker 
41*890232f2SAndroid Build Coastguard Worker             Assert.AreEqual((byte)99, buffer[0]);
42*890232f2SAndroid Build Coastguard Worker         }
43*890232f2SAndroid Build Coastguard Worker 
44*890232f2SAndroid Build Coastguard Worker #if !BYTEBUFFER_NO_BOUNDS_CHECK
45*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_PutByteCannotPutAtOffsetPastLength()46*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_PutByteCannotPutAtOffsetPastLength()
47*890232f2SAndroid Build Coastguard Worker         {
48*890232f2SAndroid Build Coastguard Worker             var uut = new ByteBuffer(1);
49*890232f2SAndroid Build Coastguard Worker             Assert.Throws<ArgumentOutOfRangeException>(() => uut.PutByte(1, 99));
50*890232f2SAndroid Build Coastguard Worker         }
51*890232f2SAndroid Build Coastguard Worker #endif
52*890232f2SAndroid Build Coastguard Worker 
53*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_PutShortPopulatesBufferCorrectly()54*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_PutShortPopulatesBufferCorrectly()
55*890232f2SAndroid Build Coastguard Worker         {
56*890232f2SAndroid Build Coastguard Worker             var buffer = new byte[2];
57*890232f2SAndroid Build Coastguard Worker             var uut = new ByteBuffer(buffer);
58*890232f2SAndroid Build Coastguard Worker             uut.PutShort(0, (short)1);
59*890232f2SAndroid Build Coastguard Worker 
60*890232f2SAndroid Build Coastguard Worker             // Ensure Endianness was written correctly
61*890232f2SAndroid Build Coastguard Worker             Assert.AreEqual((byte)1, buffer[0]);
62*890232f2SAndroid Build Coastguard Worker             Assert.AreEqual((byte)0, buffer[1]);
63*890232f2SAndroid Build Coastguard Worker         }
64*890232f2SAndroid Build Coastguard Worker 
65*890232f2SAndroid Build Coastguard Worker #if !BYTEBUFFER_NO_BOUNDS_CHECK
66*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_PutShortCannotPutAtOffsetPastLength()67*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_PutShortCannotPutAtOffsetPastLength()
68*890232f2SAndroid Build Coastguard Worker         {
69*890232f2SAndroid Build Coastguard Worker             var uut = new ByteBuffer(2);
70*890232f2SAndroid Build Coastguard Worker             Assert.Throws<ArgumentOutOfRangeException>(() => uut.PutShort(2, 99));
71*890232f2SAndroid Build Coastguard Worker         }
72*890232f2SAndroid Build Coastguard Worker #endif
73*890232f2SAndroid Build Coastguard Worker 
74*890232f2SAndroid Build Coastguard Worker #if !BYTEBUFFER_NO_BOUNDS_CHECK
75*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_PutShortChecksLength()76*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_PutShortChecksLength()
77*890232f2SAndroid Build Coastguard Worker         {
78*890232f2SAndroid Build Coastguard Worker             var uut = new ByteBuffer(1);
79*890232f2SAndroid Build Coastguard Worker             Assert.Throws<ArgumentOutOfRangeException>(() => uut.PutShort(0, 99));
80*890232f2SAndroid Build Coastguard Worker         }
81*890232f2SAndroid Build Coastguard Worker 
82*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_PutShortChecksLengthAndOffset()83*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_PutShortChecksLengthAndOffset()
84*890232f2SAndroid Build Coastguard Worker         {
85*890232f2SAndroid Build Coastguard Worker             var uut = new ByteBuffer(2);
86*890232f2SAndroid Build Coastguard Worker             Assert.Throws<ArgumentOutOfRangeException>(() => uut.PutShort(1, 99));
87*890232f2SAndroid Build Coastguard Worker         }
88*890232f2SAndroid Build Coastguard Worker #endif
89*890232f2SAndroid Build Coastguard Worker 
90*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_PutIntPopulatesBufferCorrectly()91*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_PutIntPopulatesBufferCorrectly()
92*890232f2SAndroid Build Coastguard Worker         {
93*890232f2SAndroid Build Coastguard Worker             var buffer = new byte[4];
94*890232f2SAndroid Build Coastguard Worker             var uut = new ByteBuffer(buffer);
95*890232f2SAndroid Build Coastguard Worker             uut.PutInt(0, 0x0A0B0C0D);
96*890232f2SAndroid Build Coastguard Worker 
97*890232f2SAndroid Build Coastguard Worker             // Ensure Endianness was written correctly
98*890232f2SAndroid Build Coastguard Worker             Assert.AreEqual(0x0D, buffer[0]);
99*890232f2SAndroid Build Coastguard Worker             Assert.AreEqual(0x0C, buffer[1]);
100*890232f2SAndroid Build Coastguard Worker             Assert.AreEqual(0x0B, buffer[2]);
101*890232f2SAndroid Build Coastguard Worker             Assert.AreEqual(0x0A, buffer[3]);
102*890232f2SAndroid Build Coastguard Worker         }
103*890232f2SAndroid Build Coastguard Worker 
104*890232f2SAndroid Build Coastguard Worker #if !BYTEBUFFER_NO_BOUNDS_CHECK
105*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_PutIntCannotPutAtOffsetPastLength()106*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_PutIntCannotPutAtOffsetPastLength()
107*890232f2SAndroid Build Coastguard Worker         {
108*890232f2SAndroid Build Coastguard Worker             var uut = new ByteBuffer(4);
109*890232f2SAndroid Build Coastguard Worker             Assert.Throws<ArgumentOutOfRangeException>(() => uut.PutInt(2, 0x0A0B0C0D));
110*890232f2SAndroid Build Coastguard Worker         }
111*890232f2SAndroid Build Coastguard Worker 
112*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_PutIntChecksLength()113*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_PutIntChecksLength()
114*890232f2SAndroid Build Coastguard Worker         {
115*890232f2SAndroid Build Coastguard Worker             var uut = new ByteBuffer(1);
116*890232f2SAndroid Build Coastguard Worker             Assert.Throws<ArgumentOutOfRangeException>(() => uut.PutInt(0, 0x0A0B0C0D));
117*890232f2SAndroid Build Coastguard Worker         }
118*890232f2SAndroid Build Coastguard Worker 
119*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_PutIntChecksLengthAndOffset()120*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_PutIntChecksLengthAndOffset()
121*890232f2SAndroid Build Coastguard Worker         {
122*890232f2SAndroid Build Coastguard Worker             var uut = new ByteBuffer(4);
123*890232f2SAndroid Build Coastguard Worker             Assert.Throws<ArgumentOutOfRangeException>(() => uut.PutInt(2, 0x0A0B0C0D));
124*890232f2SAndroid Build Coastguard Worker         }
125*890232f2SAndroid Build Coastguard Worker #endif
126*890232f2SAndroid Build Coastguard Worker 
127*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_PutLongPopulatesBufferCorrectly()128*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_PutLongPopulatesBufferCorrectly()
129*890232f2SAndroid Build Coastguard Worker         {
130*890232f2SAndroid Build Coastguard Worker             var buffer = new byte[8];
131*890232f2SAndroid Build Coastguard Worker             var uut = new ByteBuffer(buffer);
132*890232f2SAndroid Build Coastguard Worker             uut.PutLong(0, 0x010203040A0B0C0D);
133*890232f2SAndroid Build Coastguard Worker 
134*890232f2SAndroid Build Coastguard Worker             // Ensure Endianness was written correctly
135*890232f2SAndroid Build Coastguard Worker             Assert.AreEqual(0x0D, buffer[0]);
136*890232f2SAndroid Build Coastguard Worker             Assert.AreEqual(0x0C, buffer[1]);
137*890232f2SAndroid Build Coastguard Worker             Assert.AreEqual(0x0B, buffer[2]);
138*890232f2SAndroid Build Coastguard Worker             Assert.AreEqual(0x0A, buffer[3]);
139*890232f2SAndroid Build Coastguard Worker             Assert.AreEqual(0x04, buffer[4]);
140*890232f2SAndroid Build Coastguard Worker             Assert.AreEqual(0x03, buffer[5]);
141*890232f2SAndroid Build Coastguard Worker             Assert.AreEqual(0x02, buffer[6]);
142*890232f2SAndroid Build Coastguard Worker             Assert.AreEqual(0x01, buffer[7]);
143*890232f2SAndroid Build Coastguard Worker         }
144*890232f2SAndroid Build Coastguard Worker 
145*890232f2SAndroid Build Coastguard Worker #if !BYTEBUFFER_NO_BOUNDS_CHECK
146*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_PutLongCannotPutAtOffsetPastLength()147*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_PutLongCannotPutAtOffsetPastLength()
148*890232f2SAndroid Build Coastguard Worker         {
149*890232f2SAndroid Build Coastguard Worker             var uut = new ByteBuffer(8);
150*890232f2SAndroid Build Coastguard Worker             Assert.Throws<ArgumentOutOfRangeException>(() => uut.PutLong(2, 0x010203040A0B0C0D));
151*890232f2SAndroid Build Coastguard Worker         }
152*890232f2SAndroid Build Coastguard Worker 
153*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_PutLongChecksLength()154*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_PutLongChecksLength()
155*890232f2SAndroid Build Coastguard Worker         {
156*890232f2SAndroid Build Coastguard Worker             var uut = new ByteBuffer(1);
157*890232f2SAndroid Build Coastguard Worker             Assert.Throws<ArgumentOutOfRangeException>(() => uut.PutLong(0, 0x010203040A0B0C0D));
158*890232f2SAndroid Build Coastguard Worker         }
159*890232f2SAndroid Build Coastguard Worker 
160*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_PutLongChecksLengthAndOffset()161*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_PutLongChecksLengthAndOffset()
162*890232f2SAndroid Build Coastguard Worker         {
163*890232f2SAndroid Build Coastguard Worker             var uut = new ByteBuffer(8);
164*890232f2SAndroid Build Coastguard Worker             Assert.Throws<ArgumentOutOfRangeException>(() => uut.PutLong(2, 0x010203040A0B0C0D));
165*890232f2SAndroid Build Coastguard Worker         }
166*890232f2SAndroid Build Coastguard Worker #endif
167*890232f2SAndroid Build Coastguard Worker 
168*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_GetByteReturnsCorrectData()169*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_GetByteReturnsCorrectData()
170*890232f2SAndroid Build Coastguard Worker         {
171*890232f2SAndroid Build Coastguard Worker             var buffer = new byte[1];
172*890232f2SAndroid Build Coastguard Worker             buffer[0] = 99;
173*890232f2SAndroid Build Coastguard Worker             var uut = new ByteBuffer(buffer);
174*890232f2SAndroid Build Coastguard Worker             Assert.AreEqual((byte)99, uut.Get(0));
175*890232f2SAndroid Build Coastguard Worker         }
176*890232f2SAndroid Build Coastguard Worker 
177*890232f2SAndroid Build Coastguard Worker #if !BYTEBUFFER_NO_BOUNDS_CHECK
178*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_GetByteChecksOffset()179*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_GetByteChecksOffset()
180*890232f2SAndroid Build Coastguard Worker         {
181*890232f2SAndroid Build Coastguard Worker             var uut = new ByteBuffer(1);
182*890232f2SAndroid Build Coastguard Worker             Assert.Throws<ArgumentOutOfRangeException>(() => uut.Get(1));
183*890232f2SAndroid Build Coastguard Worker         }
184*890232f2SAndroid Build Coastguard Worker #endif
185*890232f2SAndroid Build Coastguard Worker 
186*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_GetShortReturnsCorrectData()187*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_GetShortReturnsCorrectData()
188*890232f2SAndroid Build Coastguard Worker         {
189*890232f2SAndroid Build Coastguard Worker             var buffer = new byte[2];
190*890232f2SAndroid Build Coastguard Worker             buffer[0] = 1;
191*890232f2SAndroid Build Coastguard Worker             buffer[1] = 0;
192*890232f2SAndroid Build Coastguard Worker             var uut = new ByteBuffer(buffer);
193*890232f2SAndroid Build Coastguard Worker             Assert.AreEqual(1, uut.GetShort(0));
194*890232f2SAndroid Build Coastguard Worker         }
195*890232f2SAndroid Build Coastguard Worker 
196*890232f2SAndroid Build Coastguard Worker #if !BYTEBUFFER_NO_BOUNDS_CHECK
197*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_GetShortChecksOffset()198*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_GetShortChecksOffset()
199*890232f2SAndroid Build Coastguard Worker         {
200*890232f2SAndroid Build Coastguard Worker             var uut = new ByteBuffer(2);
201*890232f2SAndroid Build Coastguard Worker             Assert.Throws<ArgumentOutOfRangeException>(() => uut.GetShort(2));
202*890232f2SAndroid Build Coastguard Worker         }
203*890232f2SAndroid Build Coastguard Worker 
204*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_GetShortChecksLength()205*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_GetShortChecksLength()
206*890232f2SAndroid Build Coastguard Worker         {
207*890232f2SAndroid Build Coastguard Worker             var uut = new ByteBuffer(2);
208*890232f2SAndroid Build Coastguard Worker             Assert.Throws<ArgumentOutOfRangeException>(() => uut.GetShort(1));
209*890232f2SAndroid Build Coastguard Worker         }
210*890232f2SAndroid Build Coastguard Worker #endif
211*890232f2SAndroid Build Coastguard Worker 
212*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_GetIntReturnsCorrectData()213*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_GetIntReturnsCorrectData()
214*890232f2SAndroid Build Coastguard Worker         {
215*890232f2SAndroid Build Coastguard Worker             var buffer = new byte[4];
216*890232f2SAndroid Build Coastguard Worker             buffer[0] = 0x0D;
217*890232f2SAndroid Build Coastguard Worker             buffer[1] = 0x0C;
218*890232f2SAndroid Build Coastguard Worker             buffer[2] = 0x0B;
219*890232f2SAndroid Build Coastguard Worker             buffer[3] = 0x0A;
220*890232f2SAndroid Build Coastguard Worker             var uut = new ByteBuffer(buffer);
221*890232f2SAndroid Build Coastguard Worker             Assert.AreEqual(0x0A0B0C0D, uut.GetInt(0));
222*890232f2SAndroid Build Coastguard Worker         }
223*890232f2SAndroid Build Coastguard Worker 
224*890232f2SAndroid Build Coastguard Worker #if !BYTEBUFFER_NO_BOUNDS_CHECK
225*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_GetIntChecksOffset()226*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_GetIntChecksOffset()
227*890232f2SAndroid Build Coastguard Worker         {
228*890232f2SAndroid Build Coastguard Worker             var uut = new ByteBuffer(4);
229*890232f2SAndroid Build Coastguard Worker             Assert.Throws<ArgumentOutOfRangeException>(() => uut.GetInt(4));
230*890232f2SAndroid Build Coastguard Worker         }
231*890232f2SAndroid Build Coastguard Worker 
232*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_GetIntChecksLength()233*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_GetIntChecksLength()
234*890232f2SAndroid Build Coastguard Worker         {
235*890232f2SAndroid Build Coastguard Worker             var uut = new ByteBuffer(2);
236*890232f2SAndroid Build Coastguard Worker             Assert.Throws<ArgumentOutOfRangeException>(() => uut.GetInt(0));
237*890232f2SAndroid Build Coastguard Worker         }
238*890232f2SAndroid Build Coastguard Worker #endif
239*890232f2SAndroid Build Coastguard Worker 
240*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_GetLongReturnsCorrectData()241*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_GetLongReturnsCorrectData()
242*890232f2SAndroid Build Coastguard Worker         {
243*890232f2SAndroid Build Coastguard Worker             var buffer = new byte[8];
244*890232f2SAndroid Build Coastguard Worker             buffer[0] = 0x0D;
245*890232f2SAndroid Build Coastguard Worker             buffer[1] = 0x0C;
246*890232f2SAndroid Build Coastguard Worker             buffer[2] = 0x0B;
247*890232f2SAndroid Build Coastguard Worker             buffer[3] = 0x0A;
248*890232f2SAndroid Build Coastguard Worker             buffer[4] = 0x04;
249*890232f2SAndroid Build Coastguard Worker             buffer[5] = 0x03;
250*890232f2SAndroid Build Coastguard Worker             buffer[6] = 0x02;
251*890232f2SAndroid Build Coastguard Worker             buffer[7] = 0x01;
252*890232f2SAndroid Build Coastguard Worker             var uut = new ByteBuffer(buffer);
253*890232f2SAndroid Build Coastguard Worker             Assert.AreEqual(0x010203040A0B0C0D, uut.GetLong(0));
254*890232f2SAndroid Build Coastguard Worker         }
255*890232f2SAndroid Build Coastguard Worker 
256*890232f2SAndroid Build Coastguard Worker #if !BYTEBUFFER_NO_BOUNDS_CHECK
257*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_GetLongChecksOffset()258*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_GetLongChecksOffset()
259*890232f2SAndroid Build Coastguard Worker         {
260*890232f2SAndroid Build Coastguard Worker             var uut = new ByteBuffer(8);
261*890232f2SAndroid Build Coastguard Worker             Assert.Throws<ArgumentOutOfRangeException>(() => uut.GetLong(8));
262*890232f2SAndroid Build Coastguard Worker         }
263*890232f2SAndroid Build Coastguard Worker 
264*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_GetLongChecksLength()265*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_GetLongChecksLength()
266*890232f2SAndroid Build Coastguard Worker         {
267*890232f2SAndroid Build Coastguard Worker             var uut = new ByteBuffer(7);
268*890232f2SAndroid Build Coastguard Worker             Assert.Throws<ArgumentOutOfRangeException>(() => uut.GetLong(0));
269*890232f2SAndroid Build Coastguard Worker         }
270*890232f2SAndroid Build Coastguard Worker #endif
271*890232f2SAndroid Build Coastguard Worker 
272*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_ReverseBytesUshort()273*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_ReverseBytesUshort()
274*890232f2SAndroid Build Coastguard Worker         {
275*890232f2SAndroid Build Coastguard Worker             const ushort original = (ushort)0x1234U;
276*890232f2SAndroid Build Coastguard Worker             var reverse = ByteBuffer.ReverseBytes(original);
277*890232f2SAndroid Build Coastguard Worker             Assert.AreEqual(0x3412U, reverse);
278*890232f2SAndroid Build Coastguard Worker 
279*890232f2SAndroid Build Coastguard Worker             var rereverse = ByteBuffer.ReverseBytes(reverse);
280*890232f2SAndroid Build Coastguard Worker             Assert.AreEqual(original, rereverse);
281*890232f2SAndroid Build Coastguard Worker         }
282*890232f2SAndroid Build Coastguard Worker 
283*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_ReverseBytesUint()284*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_ReverseBytesUint()
285*890232f2SAndroid Build Coastguard Worker         {
286*890232f2SAndroid Build Coastguard Worker             const uint original = 0x12345678;
287*890232f2SAndroid Build Coastguard Worker             var reverse = ByteBuffer.ReverseBytes(original);
288*890232f2SAndroid Build Coastguard Worker             Assert.AreEqual(0x78563412U, reverse);
289*890232f2SAndroid Build Coastguard Worker 
290*890232f2SAndroid Build Coastguard Worker             var rereverse = ByteBuffer.ReverseBytes(reverse);
291*890232f2SAndroid Build Coastguard Worker             Assert.AreEqual(original, rereverse);
292*890232f2SAndroid Build Coastguard Worker         }
293*890232f2SAndroid Build Coastguard Worker 
294*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_ReverseBytesUlong()295*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_ReverseBytesUlong()
296*890232f2SAndroid Build Coastguard Worker         {
297*890232f2SAndroid Build Coastguard Worker             const ulong original = 0x1234567890ABCDEFUL;
298*890232f2SAndroid Build Coastguard Worker             var reverse = ByteBuffer.ReverseBytes(original);
299*890232f2SAndroid Build Coastguard Worker             Assert.AreEqual(0xEFCDAB9078563412UL, reverse);
300*890232f2SAndroid Build Coastguard Worker 
301*890232f2SAndroid Build Coastguard Worker             var rereverse = ByteBuffer.ReverseBytes(reverse);
302*890232f2SAndroid Build Coastguard Worker             Assert.AreEqual(original, rereverse);
303*890232f2SAndroid Build Coastguard Worker         }
304*890232f2SAndroid Build Coastguard Worker 
305*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_ToFullArray_MatchesBuffer()306*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_ToFullArray_MatchesBuffer()
307*890232f2SAndroid Build Coastguard Worker         {
308*890232f2SAndroid Build Coastguard Worker             var buffer = new byte[4];
309*890232f2SAndroid Build Coastguard Worker             buffer[0] = 0x0D;
310*890232f2SAndroid Build Coastguard Worker             buffer[1] = 0x0C;
311*890232f2SAndroid Build Coastguard Worker             buffer[2] = 0x0B;
312*890232f2SAndroid Build Coastguard Worker             buffer[3] = 0x0A;
313*890232f2SAndroid Build Coastguard Worker             var uut = new ByteBuffer(buffer);
314*890232f2SAndroid Build Coastguard Worker             Assert.ArrayEqual(buffer, uut.ToFullArray());
315*890232f2SAndroid Build Coastguard Worker         }
316*890232f2SAndroid Build Coastguard Worker 
317*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_ToSizedArray_MatchesBuffer()318*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_ToSizedArray_MatchesBuffer()
319*890232f2SAndroid Build Coastguard Worker         {
320*890232f2SAndroid Build Coastguard Worker             var buffer = new byte[4];
321*890232f2SAndroid Build Coastguard Worker             buffer[0] = 0x0D;
322*890232f2SAndroid Build Coastguard Worker             buffer[1] = 0x0C;
323*890232f2SAndroid Build Coastguard Worker             buffer[2] = 0x0B;
324*890232f2SAndroid Build Coastguard Worker             buffer[3] = 0x0A;
325*890232f2SAndroid Build Coastguard Worker             var uut = new ByteBuffer(buffer);
326*890232f2SAndroid Build Coastguard Worker             Assert.ArrayEqual(buffer, uut.ToFullArray());
327*890232f2SAndroid Build Coastguard Worker         }
328*890232f2SAndroid Build Coastguard Worker 
329*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_Duplicate_MatchesBuffer()330*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_Duplicate_MatchesBuffer()
331*890232f2SAndroid Build Coastguard Worker         {
332*890232f2SAndroid Build Coastguard Worker             var buffer = new byte[4];
333*890232f2SAndroid Build Coastguard Worker             buffer[0] = 0x0D;
334*890232f2SAndroid Build Coastguard Worker             buffer[1] = 0x0C;
335*890232f2SAndroid Build Coastguard Worker             buffer[2] = 0x0B;
336*890232f2SAndroid Build Coastguard Worker             buffer[3] = 0x0A;
337*890232f2SAndroid Build Coastguard Worker             var uut = new ByteBuffer(buffer);
338*890232f2SAndroid Build Coastguard Worker             Assert.AreEqual(0x0A0B0C0D, uut.GetInt(0));
339*890232f2SAndroid Build Coastguard Worker 
340*890232f2SAndroid Build Coastguard Worker             // Advance by two bytes
341*890232f2SAndroid Build Coastguard Worker             uut.Position = 2; uut = uut.Duplicate();
342*890232f2SAndroid Build Coastguard Worker             Assert.AreEqual(0x0A0B, uut.GetShort(2));
343*890232f2SAndroid Build Coastguard Worker 
344*890232f2SAndroid Build Coastguard Worker             // Advance by one more byte
345*890232f2SAndroid Build Coastguard Worker             uut.Position = 1; uut = uut.Duplicate();
346*890232f2SAndroid Build Coastguard Worker             Assert.AreEqual(0x0A, uut.Get(3));
347*890232f2SAndroid Build Coastguard Worker         }
348*890232f2SAndroid Build Coastguard Worker 
349*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_To_Array_Float()350*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_To_Array_Float()
351*890232f2SAndroid Build Coastguard Worker         {
352*890232f2SAndroid Build Coastguard Worker             const int len = 9;
353*890232f2SAndroid Build Coastguard Worker 
354*890232f2SAndroid Build Coastguard Worker             // Construct the data array
355*890232f2SAndroid Build Coastguard Worker             var fData = new float[len];
356*890232f2SAndroid Build Coastguard Worker             fData[0] = 1.0079F;
357*890232f2SAndroid Build Coastguard Worker             fData[1] = 4.0026F;
358*890232f2SAndroid Build Coastguard Worker             fData[2] = 6.941F;
359*890232f2SAndroid Build Coastguard Worker             fData[3] = 9.0122F;
360*890232f2SAndroid Build Coastguard Worker             fData[4] = 10.811F;
361*890232f2SAndroid Build Coastguard Worker             fData[5] = 12.0107F;
362*890232f2SAndroid Build Coastguard Worker             fData[6] = 14.0067F;
363*890232f2SAndroid Build Coastguard Worker             fData[7] = 15.9994F;
364*890232f2SAndroid Build Coastguard Worker             fData[8] = 18.9984F;
365*890232f2SAndroid Build Coastguard Worker 
366*890232f2SAndroid Build Coastguard Worker             // Tranfer it to a byte array
367*890232f2SAndroid Build Coastguard Worker             var buffer = new byte[sizeof(float) * fData.Length];
368*890232f2SAndroid Build Coastguard Worker             Buffer.BlockCopy(fData, 0, buffer, 0, buffer.Length);
369*890232f2SAndroid Build Coastguard Worker 
370*890232f2SAndroid Build Coastguard Worker             // Create the Byte Buffer from byte array
371*890232f2SAndroid Build Coastguard Worker             var uut = new ByteBuffer(buffer);
372*890232f2SAndroid Build Coastguard Worker 
373*890232f2SAndroid Build Coastguard Worker             // Get the full array back out and ensure they are equivalent
374*890232f2SAndroid Build Coastguard Worker             var bbArray = uut.ToArray<float>(0, len);
375*890232f2SAndroid Build Coastguard Worker             Assert.ArrayEqual(fData, bbArray);
376*890232f2SAndroid Build Coastguard Worker 
377*890232f2SAndroid Build Coastguard Worker             // Get a portion of the full array back out and ensure the
378*890232f2SAndroid Build Coastguard Worker             // subrange agrees
379*890232f2SAndroid Build Coastguard Worker             var bbArray2 = uut.ToArray<float>(4, len - 1);
380*890232f2SAndroid Build Coastguard Worker             Assert.AreEqual(bbArray2.Length, len - 1);
381*890232f2SAndroid Build Coastguard Worker             for (int i = 1; i < len - 1; i++)
382*890232f2SAndroid Build Coastguard Worker             {
383*890232f2SAndroid Build Coastguard Worker                 Assert.AreEqual(fData[i], bbArray2[i - 1]);
384*890232f2SAndroid Build Coastguard Worker             }
385*890232f2SAndroid Build Coastguard Worker 
386*890232f2SAndroid Build Coastguard Worker             // Get a sub portion of the full array back out and ensure the
387*890232f2SAndroid Build Coastguard Worker             // subrange agrees
388*890232f2SAndroid Build Coastguard Worker             var bbArray3 = uut.ToArray<float>(8, len - 4);
389*890232f2SAndroid Build Coastguard Worker             Assert.AreEqual(bbArray3.Length, len - 4);
390*890232f2SAndroid Build Coastguard Worker             for (int i = 2; i < len - 4; i++)
391*890232f2SAndroid Build Coastguard Worker             {
392*890232f2SAndroid Build Coastguard Worker                 Assert.AreEqual(fData[i], bbArray3[i - 2]);
393*890232f2SAndroid Build Coastguard Worker             }
394*890232f2SAndroid Build Coastguard Worker         }
395*890232f2SAndroid Build Coastguard Worker 
396*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_Put_Array_Helper<T>(T[] data, int typeSize)
397*890232f2SAndroid Build Coastguard Worker             where T : struct
398*890232f2SAndroid Build Coastguard Worker         {
399*890232f2SAndroid Build Coastguard Worker             // Create the Byte Buffer
400*890232f2SAndroid Build Coastguard Worker             var uut = new ByteBuffer(1024);
401*890232f2SAndroid Build Coastguard Worker 
402*890232f2SAndroid Build Coastguard Worker             // Put the data into the buffer and make sure the offset is
403*890232f2SAndroid Build Coastguard Worker             // calculated correctly
404*890232f2SAndroid Build Coastguard Worker             int nOffset = uut.Put(1024, data);
405*890232f2SAndroid Build Coastguard Worker             Assert.AreEqual(1024 - typeSize * data.Length, nOffset);
406*890232f2SAndroid Build Coastguard Worker 
407*890232f2SAndroid Build Coastguard Worker             // Get the full array back out and ensure they are equivalent
408*890232f2SAndroid Build Coastguard Worker             var bbArray = uut.ToArray<T>(nOffset, data.Length);
Assert.ArrayEqualFlatBuffers.Test.ByteBufferTests.__anon1409*890232f2SAndroid Build Coastguard Worker             Assert.ArrayEqual(data, bbArray);
410*890232f2SAndroid Build Coastguard Worker         }
411*890232f2SAndroid Build Coastguard Worker 
412*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_Put_ArraySegment_Helper<T>(ArraySegment<T> data, int typeSize)
413*890232f2SAndroid Build Coastguard Worker             where T : struct
414*890232f2SAndroid Build Coastguard Worker         {
415*890232f2SAndroid Build Coastguard Worker             // Create the Byte Buffer
416*890232f2SAndroid Build Coastguard Worker             var uut = new ByteBuffer(1024);
417*890232f2SAndroid Build Coastguard Worker 
418*890232f2SAndroid Build Coastguard Worker             // Put the data into the buffer and make sure the offset is
419*890232f2SAndroid Build Coastguard Worker             // calculated correctly
420*890232f2SAndroid Build Coastguard Worker             int nOffset = uut.Put(1024, data);
421*890232f2SAndroid Build Coastguard Worker             Assert.AreEqual(1024 - typeSize * data.Count, nOffset);
422*890232f2SAndroid Build Coastguard Worker 
423*890232f2SAndroid Build Coastguard Worker             // Get the full array back out and ensure they are equivalent
424*890232f2SAndroid Build Coastguard Worker             var bbArray = uut.ToArray<T>(nOffset, data.Count);
data.ToArrayFlatBuffers.Test.ByteBufferTests.__anon2425*890232f2SAndroid Build Coastguard Worker             Assert.ArrayEqual(data.ToArray(), bbArray);
426*890232f2SAndroid Build Coastguard Worker         }
427*890232f2SAndroid Build Coastguard Worker 
428*890232f2SAndroid Build Coastguard Worker         public unsafe void ByteBuffer_Put_IntPtr_Helper<T>(T[] data, int typeSize)
429*890232f2SAndroid Build Coastguard Worker             where T : struct
430*890232f2SAndroid Build Coastguard Worker         {
431*890232f2SAndroid Build Coastguard Worker             GCHandle handle = GCHandle.Alloc(data, GCHandleType.Pinned);
432*890232f2SAndroid Build Coastguard Worker             try
433*890232f2SAndroid Build Coastguard Worker             {
434*890232f2SAndroid Build Coastguard Worker                 var dataPtr = handle.AddrOfPinnedObject();
435*890232f2SAndroid Build Coastguard Worker                 var sizeInBytes = data.Length * typeSize;
436*890232f2SAndroid Build Coastguard Worker 
437*890232f2SAndroid Build Coastguard Worker                 // Create the Byte Buffer
438*890232f2SAndroid Build Coastguard Worker                 var uut = new ByteBuffer(1024);
439*890232f2SAndroid Build Coastguard Worker 
440*890232f2SAndroid Build Coastguard Worker                 // Put the data into the buffer and make sure the offset is
441*890232f2SAndroid Build Coastguard Worker                 // calculated correctly
442*890232f2SAndroid Build Coastguard Worker                 int nOffset = uut.Put<T>(1024, dataPtr, sizeInBytes);
443*890232f2SAndroid Build Coastguard Worker                 Assert.AreEqual(1024 - sizeInBytes, nOffset);
444*890232f2SAndroid Build Coastguard Worker 
445*890232f2SAndroid Build Coastguard Worker                 // Get the full array back out and ensure they are equivalent
446*890232f2SAndroid Build Coastguard Worker                 var bbArray = uut.ToArray<T>(nOffset, data.Length);
447*890232f2SAndroid Build Coastguard Worker                 Assert.ArrayEqual(data, bbArray);
448*890232f2SAndroid Build Coastguard Worker             }
449*890232f2SAndroid Build Coastguard Worker             finally
450*890232f2SAndroid Build Coastguard Worker             {
451*890232f2SAndroid Build Coastguard Worker                 handle.Free();
452*890232f2SAndroid Build Coastguard Worker             }
453*890232f2SAndroid Build Coastguard Worker         }
454*890232f2SAndroid Build Coastguard Worker 
455*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_Put_ArrayTypes_Helper<T>(T[] data, int typeSize)
456*890232f2SAndroid Build Coastguard Worker             where T : struct
457*890232f2SAndroid Build Coastguard Worker         {
ByteBuffer_Put_Array_HelperFlatBuffers.Test.ByteBufferTests.__anon4458*890232f2SAndroid Build Coastguard Worker             ByteBuffer_Put_Array_Helper(data, typeSize);
459*890232f2SAndroid Build Coastguard Worker 
460*890232f2SAndroid Build Coastguard Worker             var arraySegment = CreateArraySegment(data);
ByteBuffer_Put_ArraySegment_HelperFlatBuffers.Test.ByteBufferTests.__anon4461*890232f2SAndroid Build Coastguard Worker             ByteBuffer_Put_ArraySegment_Helper(arraySegment, typeSize);
462*890232f2SAndroid Build Coastguard Worker 
ByteBuffer_Put_IntPtr_HelperFlatBuffers.Test.ByteBufferTests.__anon4463*890232f2SAndroid Build Coastguard Worker             ByteBuffer_Put_IntPtr_Helper(data, typeSize);
464*890232f2SAndroid Build Coastguard Worker         }
465*890232f2SAndroid Build Coastguard Worker 
466*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_Put_Array_Float()467*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_Put_Array_Float()
468*890232f2SAndroid Build Coastguard Worker         {
469*890232f2SAndroid Build Coastguard Worker             const int len = 9;
470*890232f2SAndroid Build Coastguard Worker 
471*890232f2SAndroid Build Coastguard Worker             // Construct the data array
472*890232f2SAndroid Build Coastguard Worker             var data = new float[len];
473*890232f2SAndroid Build Coastguard Worker             data[0] = 1.0079F;
474*890232f2SAndroid Build Coastguard Worker             data[1] = 4.0026F;
475*890232f2SAndroid Build Coastguard Worker             data[2] = 6.941F;
476*890232f2SAndroid Build Coastguard Worker             data[3] = 9.0122F;
477*890232f2SAndroid Build Coastguard Worker             data[4] = 10.811F;
478*890232f2SAndroid Build Coastguard Worker             data[5] = 12.0107F;
479*890232f2SAndroid Build Coastguard Worker             data[6] = 14.0067F;
480*890232f2SAndroid Build Coastguard Worker             data[7] = 15.9994F;
481*890232f2SAndroid Build Coastguard Worker             data[8] = 18.9984F;
482*890232f2SAndroid Build Coastguard Worker 
483*890232f2SAndroid Build Coastguard Worker             ByteBuffer_Put_ArrayTypes_Helper(data, sizeof(float));
484*890232f2SAndroid Build Coastguard Worker         }
485*890232f2SAndroid Build Coastguard Worker 
486*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_Put_Array_Double()487*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_Put_Array_Double()
488*890232f2SAndroid Build Coastguard Worker         {
489*890232f2SAndroid Build Coastguard Worker             const int len = 9;
490*890232f2SAndroid Build Coastguard Worker 
491*890232f2SAndroid Build Coastguard Worker             // Construct the data array
492*890232f2SAndroid Build Coastguard Worker             var data = new double[len];
493*890232f2SAndroid Build Coastguard Worker             data[0] = 1.0079;
494*890232f2SAndroid Build Coastguard Worker             data[1] = 4.0026;
495*890232f2SAndroid Build Coastguard Worker             data[2] = 6.941;
496*890232f2SAndroid Build Coastguard Worker             data[3] = 9.0122;
497*890232f2SAndroid Build Coastguard Worker             data[4] = 10.811;
498*890232f2SAndroid Build Coastguard Worker             data[5] = 12.0107;
499*890232f2SAndroid Build Coastguard Worker             data[6] = 14.0067;
500*890232f2SAndroid Build Coastguard Worker             data[7] = 15.9994;
501*890232f2SAndroid Build Coastguard Worker             data[8] = 18.9984;
502*890232f2SAndroid Build Coastguard Worker 
503*890232f2SAndroid Build Coastguard Worker             ByteBuffer_Put_ArrayTypes_Helper(data, sizeof(double));
504*890232f2SAndroid Build Coastguard Worker         }
505*890232f2SAndroid Build Coastguard Worker 
506*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_Put_Array_Int()507*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_Put_Array_Int()
508*890232f2SAndroid Build Coastguard Worker         {
509*890232f2SAndroid Build Coastguard Worker             const int len = 9;
510*890232f2SAndroid Build Coastguard Worker 
511*890232f2SAndroid Build Coastguard Worker             // Construct the data array
512*890232f2SAndroid Build Coastguard Worker             var data = new int[len];
513*890232f2SAndroid Build Coastguard Worker             data[0] = 1;
514*890232f2SAndroid Build Coastguard Worker             data[1] = 4;
515*890232f2SAndroid Build Coastguard Worker             data[2] = 6;
516*890232f2SAndroid Build Coastguard Worker             data[3] = 9;
517*890232f2SAndroid Build Coastguard Worker             data[4] = 10;
518*890232f2SAndroid Build Coastguard Worker             data[5] = 12;
519*890232f2SAndroid Build Coastguard Worker             data[6] = 14;
520*890232f2SAndroid Build Coastguard Worker             data[7] = 15;
521*890232f2SAndroid Build Coastguard Worker             data[8] = 18;
522*890232f2SAndroid Build Coastguard Worker 
523*890232f2SAndroid Build Coastguard Worker             ByteBuffer_Put_ArrayTypes_Helper(data, sizeof(int));
524*890232f2SAndroid Build Coastguard Worker         }
525*890232f2SAndroid Build Coastguard Worker 
526*890232f2SAndroid Build Coastguard Worker 
527*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_Put_Array_UInt()528*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_Put_Array_UInt()
529*890232f2SAndroid Build Coastguard Worker         {
530*890232f2SAndroid Build Coastguard Worker             const int len = 9;
531*890232f2SAndroid Build Coastguard Worker 
532*890232f2SAndroid Build Coastguard Worker             // Construct the data array
533*890232f2SAndroid Build Coastguard Worker             var data = new uint[len];
534*890232f2SAndroid Build Coastguard Worker             data[0] = 1;
535*890232f2SAndroid Build Coastguard Worker             data[1] = 4;
536*890232f2SAndroid Build Coastguard Worker             data[2] = 6;
537*890232f2SAndroid Build Coastguard Worker             data[3] = 9;
538*890232f2SAndroid Build Coastguard Worker             data[4] = 10;
539*890232f2SAndroid Build Coastguard Worker             data[5] = 12;
540*890232f2SAndroid Build Coastguard Worker             data[6] = 14;
541*890232f2SAndroid Build Coastguard Worker             data[7] = 15;
542*890232f2SAndroid Build Coastguard Worker             data[8] = 18;
543*890232f2SAndroid Build Coastguard Worker 
544*890232f2SAndroid Build Coastguard Worker             ByteBuffer_Put_ArrayTypes_Helper(data, sizeof(uint));
545*890232f2SAndroid Build Coastguard Worker         }
546*890232f2SAndroid Build Coastguard Worker 
547*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_Put_Array_Bool()548*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_Put_Array_Bool()
549*890232f2SAndroid Build Coastguard Worker         {
550*890232f2SAndroid Build Coastguard Worker             const int len = 9;
551*890232f2SAndroid Build Coastguard Worker 
552*890232f2SAndroid Build Coastguard Worker             // Construct the data array
553*890232f2SAndroid Build Coastguard Worker             var data = new bool[len];
554*890232f2SAndroid Build Coastguard Worker             data[0] = true;
555*890232f2SAndroid Build Coastguard Worker             data[1] = true;
556*890232f2SAndroid Build Coastguard Worker             data[2] = false;
557*890232f2SAndroid Build Coastguard Worker             data[3] = true;
558*890232f2SAndroid Build Coastguard Worker             data[4] = false;
559*890232f2SAndroid Build Coastguard Worker             data[5] = true;
560*890232f2SAndroid Build Coastguard Worker             data[6] = true;
561*890232f2SAndroid Build Coastguard Worker             data[7] = true;
562*890232f2SAndroid Build Coastguard Worker             data[8] = false;
563*890232f2SAndroid Build Coastguard Worker 
564*890232f2SAndroid Build Coastguard Worker             ByteBuffer_Put_ArrayTypes_Helper(data, sizeof(bool));
565*890232f2SAndroid Build Coastguard Worker         }
566*890232f2SAndroid Build Coastguard Worker 
567*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_Put_Array_Long()568*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_Put_Array_Long()
569*890232f2SAndroid Build Coastguard Worker         {
570*890232f2SAndroid Build Coastguard Worker             const int len = 9;
571*890232f2SAndroid Build Coastguard Worker 
572*890232f2SAndroid Build Coastguard Worker             // Construct the data array
573*890232f2SAndroid Build Coastguard Worker             var data = new long[len];
574*890232f2SAndroid Build Coastguard Worker             data[0] = 1;
575*890232f2SAndroid Build Coastguard Worker             data[1] = 4;
576*890232f2SAndroid Build Coastguard Worker             data[2] = 6;
577*890232f2SAndroid Build Coastguard Worker             data[3] = 9;
578*890232f2SAndroid Build Coastguard Worker             data[4] = 10;
579*890232f2SAndroid Build Coastguard Worker             data[5] = 12;
580*890232f2SAndroid Build Coastguard Worker             data[6] = 14;
581*890232f2SAndroid Build Coastguard Worker             data[7] = 15;
582*890232f2SAndroid Build Coastguard Worker             data[8] = 18;
583*890232f2SAndroid Build Coastguard Worker 
584*890232f2SAndroid Build Coastguard Worker             ByteBuffer_Put_ArrayTypes_Helper(data, sizeof(long));
585*890232f2SAndroid Build Coastguard Worker         }
586*890232f2SAndroid Build Coastguard Worker 
587*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_Put_Array_Byte()588*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_Put_Array_Byte()
589*890232f2SAndroid Build Coastguard Worker         {
590*890232f2SAndroid Build Coastguard Worker             const int len = 9;
591*890232f2SAndroid Build Coastguard Worker 
592*890232f2SAndroid Build Coastguard Worker             // Construct the data array
593*890232f2SAndroid Build Coastguard Worker             var data = new byte[len];
594*890232f2SAndroid Build Coastguard Worker             data[0] = 1;
595*890232f2SAndroid Build Coastguard Worker             data[1] = 4;
596*890232f2SAndroid Build Coastguard Worker             data[2] = 6;
597*890232f2SAndroid Build Coastguard Worker             data[3] = 9;
598*890232f2SAndroid Build Coastguard Worker             data[4] = 10;
599*890232f2SAndroid Build Coastguard Worker             data[5] = 12;
600*890232f2SAndroid Build Coastguard Worker             data[6] = 14;
601*890232f2SAndroid Build Coastguard Worker             data[7] = 15;
602*890232f2SAndroid Build Coastguard Worker             data[8] = 18;
603*890232f2SAndroid Build Coastguard Worker 
604*890232f2SAndroid Build Coastguard Worker             ByteBuffer_Put_ArrayTypes_Helper(data, sizeof(byte));
605*890232f2SAndroid Build Coastguard Worker         }
606*890232f2SAndroid Build Coastguard Worker 
607*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_Put_Array_SByte()608*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_Put_Array_SByte()
609*890232f2SAndroid Build Coastguard Worker         {
610*890232f2SAndroid Build Coastguard Worker             const int len = 9;
611*890232f2SAndroid Build Coastguard Worker 
612*890232f2SAndroid Build Coastguard Worker             // Construct the data array
613*890232f2SAndroid Build Coastguard Worker             var data = new sbyte[len];
614*890232f2SAndroid Build Coastguard Worker             data[0] = 1;
615*890232f2SAndroid Build Coastguard Worker             data[1] = 4;
616*890232f2SAndroid Build Coastguard Worker             data[2] = 6;
617*890232f2SAndroid Build Coastguard Worker             data[3] = 9;
618*890232f2SAndroid Build Coastguard Worker             data[4] = 10;
619*890232f2SAndroid Build Coastguard Worker             data[5] = 12;
620*890232f2SAndroid Build Coastguard Worker             data[6] = 14;
621*890232f2SAndroid Build Coastguard Worker             data[7] = 15;
622*890232f2SAndroid Build Coastguard Worker             data[8] = 18;
623*890232f2SAndroid Build Coastguard Worker 
624*890232f2SAndroid Build Coastguard Worker             ByteBuffer_Put_ArrayTypes_Helper(data, sizeof(sbyte));
625*890232f2SAndroid Build Coastguard Worker         }
626*890232f2SAndroid Build Coastguard Worker 
627*890232f2SAndroid Build Coastguard Worker         private static ArraySegment<T> CreateArraySegment<T>(T[] data)
628*890232f2SAndroid Build Coastguard Worker             where T : struct
629*890232f2SAndroid Build Coastguard Worker         {
630*890232f2SAndroid Build Coastguard Worker             const int arraySegmentPadding = 7;
631*890232f2SAndroid Build Coastguard Worker             var newData = new T[data.Length + 2 * arraySegmentPadding];
Array.CopyFlatBuffers.Test.ByteBufferTests.__anon5632*890232f2SAndroid Build Coastguard Worker             Array.Copy(data, 0, newData, arraySegmentPadding, data.Length);
633*890232f2SAndroid Build Coastguard Worker             return new ArraySegment<T>(newData, arraySegmentPadding, data.Length);
634*890232f2SAndroid Build Coastguard Worker         }
635*890232f2SAndroid Build Coastguard Worker 
636*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_Put_Array_Null_Throws()637*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_Put_Array_Null_Throws()
638*890232f2SAndroid Build Coastguard Worker         {
639*890232f2SAndroid Build Coastguard Worker             // Create the Byte Buffer
640*890232f2SAndroid Build Coastguard Worker             var uut = new ByteBuffer(1024);
641*890232f2SAndroid Build Coastguard Worker 
642*890232f2SAndroid Build Coastguard Worker             // create a null array and try to put it into the buffer
643*890232f2SAndroid Build Coastguard Worker             float[] data = null;
644*890232f2SAndroid Build Coastguard Worker             Assert.Throws<ArgumentNullException>(() => uut.Put(1024, data));
645*890232f2SAndroid Build Coastguard Worker 
646*890232f2SAndroid Build Coastguard Worker             ArraySegment<float> dataArraySegment = default;
647*890232f2SAndroid Build Coastguard Worker             Assert.Throws<ArgumentNullException>(() => uut.Put(1024, dataArraySegment));
648*890232f2SAndroid Build Coastguard Worker 
649*890232f2SAndroid Build Coastguard Worker             IntPtr dataPtr = IntPtr.Zero;
650*890232f2SAndroid Build Coastguard Worker             int dataPtrLength = 100;
651*890232f2SAndroid Build Coastguard Worker             Assert.Throws<ArgumentNullException>(() => uut.Put<float>(1024, dataPtr, dataPtrLength));
652*890232f2SAndroid Build Coastguard Worker         }
653*890232f2SAndroid Build Coastguard Worker 
654*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_Put_Array_Empty_Throws()655*890232f2SAndroid Build Coastguard Worker         public unsafe void ByteBuffer_Put_Array_Empty_Throws()
656*890232f2SAndroid Build Coastguard Worker         {
657*890232f2SAndroid Build Coastguard Worker             // Create the Byte Buffer
658*890232f2SAndroid Build Coastguard Worker             var uut = new ByteBuffer(1024);
659*890232f2SAndroid Build Coastguard Worker 
660*890232f2SAndroid Build Coastguard Worker             // create an array of length == 0, and try to put it into the buffer
661*890232f2SAndroid Build Coastguard Worker             float[] data = new float[0];
662*890232f2SAndroid Build Coastguard Worker             Assert.Throws<ArgumentException>(() => uut.Put(1024, data));
663*890232f2SAndroid Build Coastguard Worker 
664*890232f2SAndroid Build Coastguard Worker             var dataArraySegment = new ArraySegment<float>(new float[10], 5, 0);
665*890232f2SAndroid Build Coastguard Worker             Assert.Throws<ArgumentException>(() => uut.Put(1024, dataArraySegment));
666*890232f2SAndroid Build Coastguard Worker 
667*890232f2SAndroid Build Coastguard Worker             fixed(float* floatPtr = data)
668*890232f2SAndroid Build Coastguard Worker             {
669*890232f2SAndroid Build Coastguard Worker                 var dataPtr = (IntPtr)floatPtr;
670*890232f2SAndroid Build Coastguard Worker                 var dataPtrLength = 0;
671*890232f2SAndroid Build Coastguard Worker                 Assert.Throws<ArgumentException>(() => uut.Put<float>(1024, dataPtr, dataPtrLength));
672*890232f2SAndroid Build Coastguard Worker             }
673*890232f2SAndroid Build Coastguard Worker         }
674*890232f2SAndroid Build Coastguard Worker 
675*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_Put_IntPtr_NegativeSize_Throws()676*890232f2SAndroid Build Coastguard Worker         public unsafe void ByteBuffer_Put_IntPtr_NegativeSize_Throws()
677*890232f2SAndroid Build Coastguard Worker         {
678*890232f2SAndroid Build Coastguard Worker             // Create the Byte Buffer
679*890232f2SAndroid Build Coastguard Worker             var uut = new ByteBuffer(1024);
680*890232f2SAndroid Build Coastguard Worker 
681*890232f2SAndroid Build Coastguard Worker             // create an array of length == 0, and try to put it into the buffer
682*890232f2SAndroid Build Coastguard Worker             float[] data = new float[10];
683*890232f2SAndroid Build Coastguard Worker             fixed(float* floatPtr = data)
684*890232f2SAndroid Build Coastguard Worker             {
685*890232f2SAndroid Build Coastguard Worker                 var dataPtr = (IntPtr)floatPtr;
686*890232f2SAndroid Build Coastguard Worker                 var dataPtrLength = -1;
687*890232f2SAndroid Build Coastguard Worker                 Assert.Throws<ArgumentException>(() => uut.Put<float>(1024, dataPtr, dataPtrLength));
688*890232f2SAndroid Build Coastguard Worker             }
689*890232f2SAndroid Build Coastguard Worker         }
690*890232f2SAndroid Build Coastguard Worker 
691*890232f2SAndroid Build Coastguard Worker         #pragma warning disable 0169
692*890232f2SAndroid Build Coastguard Worker         // These are purposely not used and the warning is suppress
693*890232f2SAndroid Build Coastguard Worker         private struct dummyStruct
694*890232f2SAndroid Build Coastguard Worker         {
695*890232f2SAndroid Build Coastguard Worker             int a;
696*890232f2SAndroid Build Coastguard Worker             float b;
697*890232f2SAndroid Build Coastguard Worker         }
698*890232f2SAndroid Build Coastguard Worker         #pragma warning restore 0169
699*890232f2SAndroid Build Coastguard Worker 
700*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_Put_Array_IncorrectType_Throws()701*890232f2SAndroid Build Coastguard Worker         public unsafe void ByteBuffer_Put_Array_IncorrectType_Throws()
702*890232f2SAndroid Build Coastguard Worker         {
703*890232f2SAndroid Build Coastguard Worker             // Create the Byte Buffer
704*890232f2SAndroid Build Coastguard Worker             var uut = new ByteBuffer(1024);
705*890232f2SAndroid Build Coastguard Worker 
706*890232f2SAndroid Build Coastguard Worker             // Create an array of dummy structures that shouldn't be
707*890232f2SAndroid Build Coastguard Worker             // able to be put into the buffer
708*890232f2SAndroid Build Coastguard Worker             var data = new dummyStruct[10];
709*890232f2SAndroid Build Coastguard Worker             Assert.Throws<ArgumentException>(() => uut.Put(1024, data));
710*890232f2SAndroid Build Coastguard Worker 
711*890232f2SAndroid Build Coastguard Worker             var dataArraySegment = new ArraySegment<dummyStruct>(data);
712*890232f2SAndroid Build Coastguard Worker             Assert.Throws<ArgumentException>(() => uut.Put(1024, dataArraySegment));
713*890232f2SAndroid Build Coastguard Worker 
714*890232f2SAndroid Build Coastguard Worker             fixed(dummyStruct* floatPtr = data)
715*890232f2SAndroid Build Coastguard Worker             {
716*890232f2SAndroid Build Coastguard Worker                 var dataPtr = (IntPtr)floatPtr;
717*890232f2SAndroid Build Coastguard Worker                 var dataPtrLength = data.Length * sizeof(dummyStruct);
718*890232f2SAndroid Build Coastguard Worker                 Assert.Throws<ArgumentException>(() => uut.Put<dummyStruct>(1024, dataPtr, dataPtrLength));
719*890232f2SAndroid Build Coastguard Worker             }
720*890232f2SAndroid Build Coastguard Worker         }
721*890232f2SAndroid Build Coastguard Worker 
722*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_Get_Double()723*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_Get_Double()
724*890232f2SAndroid Build Coastguard Worker         {
725*890232f2SAndroid Build Coastguard Worker             var uut = new ByteBuffer(1024);
726*890232f2SAndroid Build Coastguard Worker             double value = 3.14159265;
727*890232f2SAndroid Build Coastguard Worker             uut.PutDouble(900, value);
728*890232f2SAndroid Build Coastguard Worker             double getValue = uut.GetDouble(900);
729*890232f2SAndroid Build Coastguard Worker             Assert.AreEqual(value, getValue);
730*890232f2SAndroid Build Coastguard Worker         }
731*890232f2SAndroid Build Coastguard Worker 
732*890232f2SAndroid Build Coastguard Worker         [FlatBuffersTestMethod]
ByteBuffer_Get_Float()733*890232f2SAndroid Build Coastguard Worker         public void ByteBuffer_Get_Float()
734*890232f2SAndroid Build Coastguard Worker         {
735*890232f2SAndroid Build Coastguard Worker             var uut = new ByteBuffer(1024);
736*890232f2SAndroid Build Coastguard Worker             float value = 3.14159265F;
737*890232f2SAndroid Build Coastguard Worker             uut.PutFloat(900, value);
738*890232f2SAndroid Build Coastguard Worker             double getValue = uut.GetFloat(900);
739*890232f2SAndroid Build Coastguard Worker             Assert.AreEqual(value, getValue);
740*890232f2SAndroid Build Coastguard Worker         }
741*890232f2SAndroid Build Coastguard Worker     }
742*890232f2SAndroid Build Coastguard Worker }
743