blob: 495fc2e0672dfe1fad8bca6d69ccd134b5bffa6d [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one or more
// contributor license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright ownership.
// The ASF licenses this file to You under the Apache License, Version 2.0
// (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System;
using System.Linq;
using Xunit;
namespace Apache.Arrow.Tests
{
public class ArrowBufferBuilderTests
{
[Fact]
public void ThrowsWhenIndexOutOfBounds()
{
Assert.Throws<IndexOutOfRangeException>(() =>
{
var builder = new ArrowBuffer.Builder<int>();
builder.Span[100] = 100;
});
}
public class Append
{
[Fact]
public void DoesNotThrowWithNullParameters()
{
var builder = new ArrowBuffer.Builder<int>();
builder.AppendRange(null);
}
[Fact]
public void CapacityOnlyGrowsWhenLengthWillExceedCapacity()
{
var builder = new ArrowBuffer.Builder<int>(1);
var capacity = builder.Capacity;
builder.Append(1);
Assert.Equal(capacity, builder.Capacity);
}
[Fact]
public void CapacityGrowsAfterAppendWhenLengthExceedsCapacity()
{
var builder = new ArrowBuffer.Builder<int>(1);
var capacity = builder.Capacity;
builder.Append(1);
builder.Append(2);
Assert.True(builder.Capacity > capacity);
}
[Fact]
public void CapacityGrowsAfterAppendSpan()
{
var builder = new ArrowBuffer.Builder<int>(1);
var capacity = builder.Capacity;
var data = Enumerable.Range(0, 10).Select(x => x).ToArray();
builder.Append(data);
Assert.True(builder.Capacity > capacity);
}
[Fact]
public void LengthIncrementsAfterAppend()
{
var builder = new ArrowBuffer.Builder<int>(1);
var length = builder.Length;
builder.Append(1);
Assert.Equal(length + 1, builder.Length);
}
[Fact]
public void LengthGrowsBySpanLength()
{
var builder = new ArrowBuffer.Builder<int>(1);
var data = Enumerable.Range(0, 10).Select(x => x).ToArray();
builder.Append(data);
Assert.Equal(10, builder.Length);
}
[Fact]
public void BufferHasExpectedValues()
{
var builder = new ArrowBuffer.Builder<int>(1);
builder.Append(10);
builder.Append(20);
var buffer = builder.Build();
var span = buffer.Span.CastTo<int>();
Assert.Equal(10, span[0]);
Assert.Equal(20, span[1]);
Assert.Equal(0, span[2]);
}
}
public class AppendRange
{
[Fact]
public void CapacityGrowsAfterAppendEnumerable()
{
var builder = new ArrowBuffer.Builder<int>(1);
var capacity = builder.Capacity;
var data = Enumerable.Range(0, 10).Select(x => x);
builder.AppendRange(data);
Assert.True(builder.Capacity > capacity);
}
[Fact]
public void LengthGrowsByEnumerableCount()
{
var builder = new ArrowBuffer.Builder<int>(1);
var length = builder.Length;
var data = Enumerable.Range(0, 10).Select(x => x).ToArray();
var count = data.Length;
builder.AppendRange(data);
Assert.Equal(length + count, builder.Length);
}
[Fact]
public void BufferHasExpectedValues()
{
var builder = new ArrowBuffer.Builder<int>(1);
var data = Enumerable.Range(0, 10).Select(x => x).ToArray();
builder.AppendRange(data);
var buffer = builder.Build();
var span = buffer.Span.CastTo<int>();
for (var i = 0; i < 10; i++)
{
Assert.Equal(i, span[i]);
}
}
}
public class Clear
{
[Theory]
[InlineData(10)]
[InlineData(100)]
public void SetsAllValuesToDefault(int sizeBeforeClear)
{
var builder = new ArrowBuffer.Builder<int>(1);
var data = Enumerable.Range(0, sizeBeforeClear).Select(x => x).ToArray();
builder.AppendRange(data);
builder.Clear();
builder.Append(0);
var buffer = builder.Build();
// No matter the sizeBeforeClear, we only appended a single 0,
// so the buffer length should be the smallest possible.
Assert.Equal(64, buffer.Length);
// check all 16 int elements are default
var zeros = Enumerable.Range(0, 16).Select(x => 0).ToArray();
var values = buffer.Span.CastTo<int>().Slice(0, 16).ToArray();
Assert.True(zeros.SequenceEqual(values));
}
}
public class Resize
{
[Fact]
public void LengthHasExpectedValueAfterResize()
{
var builder = new ArrowBuffer.Builder<int>();
builder.Resize(8);
Assert.True(builder.Capacity >= 8);
Assert.Equal(8, builder.Length);
}
[Fact]
public void NegativeLengthThrows()
{
// Arrange
var builder = new ArrowBuffer.Builder<int>();
builder.Append(10);
builder.Append(20);
// Act/Assert
Assert.Throws<ArgumentOutOfRangeException>(() => builder.Resize(-1));
}
}
}
}