1 // Licensed to the Apache Software Foundation (ASF) under one or more
2 // contributor license agreements. See the NOTICE file distributed with
3 // this work for additional information regarding copyright ownership.
4 // The ASF licenses this file to You under the Apache License, Version 2.0
5 // (the "License"); you may not use this file except in compliance with
6 // the License. You may obtain a copy of the License at
8 // http://www.apache.org/licenses/LICENSE-2.0
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.
20 namespace Apache.Arrow.Tests
22 public class ArrowBufferBuilderTests
25 public void ThrowsWhenIndexOutOfBounds()
27 Assert.Throws<IndexOutOfRangeException>(() =>
29 var builder = new ArrowBuffer.Builder<int>();
30 builder.Span[100] = 100;
37 public void DoesNotThrowWithNullParameters()
39 var builder = new ArrowBuffer.Builder<int>();
41 builder.AppendRange(null);
45 public void CapacityOnlyGrowsWhenLengthWillExceedCapacity()
47 var builder = new ArrowBuffer.Builder<int>(1);
48 var capacity = builder.Capacity;
52 Assert.Equal(capacity, builder.Capacity);
56 public void CapacityGrowsAfterAppendWhenLengthExceedsCapacity()
58 var builder = new ArrowBuffer.Builder<int>(1);
59 var capacity = builder.Capacity;
64 Assert.True(builder.Capacity > capacity);
68 public void CapacityGrowsAfterAppendSpan()
70 var builder = new ArrowBuffer.Builder<int>(1);
71 var capacity = builder.Capacity;
72 var data = Enumerable.Range(0, 10).Select(x => x).ToArray();
76 Assert.True(builder.Capacity > capacity);
80 public void LengthIncrementsAfterAppend()
82 var builder = new ArrowBuffer.Builder<int>(1);
83 var length = builder.Length;
87 Assert.Equal(length + 1, builder.Length);
91 public void LengthGrowsBySpanLength()
93 var builder = new ArrowBuffer.Builder<int>(1);
94 var data = Enumerable.Range(0, 10).Select(x => x).ToArray();
98 Assert.Equal(10, builder.Length);
102 public void BufferHasExpectedValues()
104 var builder = new ArrowBuffer.Builder<int>(1);
109 var buffer = builder.Build();
110 var span = buffer.Span.CastTo<int>();
112 Assert.Equal(10, span[0]);
113 Assert.Equal(20, span[1]);
114 Assert.Equal(0, span[2]);
118 public class AppendRange
121 public void CapacityGrowsAfterAppendEnumerable()
123 var builder = new ArrowBuffer.Builder<int>(1);
124 var capacity = builder.Capacity;
125 var data = Enumerable.Range(0, 10).Select(x => x);
127 builder.AppendRange(data);
129 Assert.True(builder.Capacity > capacity);
133 public void LengthGrowsByEnumerableCount()
135 var builder = new ArrowBuffer.Builder<int>(1);
136 var length = builder.Length;
137 var data = Enumerable.Range(0, 10).Select(x => x).ToArray();
138 var count = data.Length;
140 builder.AppendRange(data);
142 Assert.Equal(length + count, builder.Length);
146 public void BufferHasExpectedValues()
148 var builder = new ArrowBuffer.Builder<int>(1);
149 var data = Enumerable.Range(0, 10).Select(x => x).ToArray();
151 builder.AppendRange(data);
153 var buffer = builder.Build();
154 var span = buffer.Span.CastTo<int>();
156 for (var i = 0; i < 10; i++)
158 Assert.Equal(i, span[i]);
168 public void SetsAllValuesToDefault(int sizeBeforeClear)
170 var builder = new ArrowBuffer.Builder<int>(1);
171 var data = Enumerable.Range(0, sizeBeforeClear).Select(x => x).ToArray();
173 builder.AppendRange(data);
177 var buffer = builder.Build();
178 // No matter the sizeBeforeClear, we only appended a single 0,
179 // so the buffer length should be the smallest possible.
180 Assert.Equal(64, buffer.Length);
182 // check all 16 int elements are default
183 var zeros = Enumerable.Range(0, 16).Select(x => 0).ToArray();
184 var values = buffer.Span.CastTo<int>().Slice(0, 16).ToArray();
186 Assert.True(zeros.SequenceEqual(values));
193 public void LengthHasExpectedValueAfterResize()
195 var builder = new ArrowBuffer.Builder<int>();
198 Assert.True(builder.Capacity >= 8);
199 Assert.Equal(8, builder.Length);
203 public void NegativeLengthThrows()
206 var builder = new ArrowBuffer.Builder<int>();
211 Assert.Throws<ArgumentOutOfRangeException>(() => builder.Resize(-1));