github.com/apache/arrow/go/v16@v16.1.0/arrow/array/binarybuilder_test.go (about)

     1  // Licensed to the Apache Software Foundation (ASF) under one
     2  // or more contributor license agreements.  See the NOTICE file
     3  // distributed with this work for additional information
     4  // regarding copyright ownership.  The ASF licenses this file
     5  // to you under the Apache License, Version 2.0 (the
     6  // "License"); you may not use this file except in compliance
     7  // with the License.  You may obtain a copy of the License at
     8  //
     9  // http://www.apache.org/licenses/LICENSE-2.0
    10  //
    11  // Unless required by applicable law or agreed to in writing, software
    12  // distributed under the License is distributed on an "AS IS" BASIS,
    13  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14  // See the License for the specific language governing permissions and
    15  // limitations under the License.
    16  
    17  package array_test
    18  
    19  import (
    20  	"bytes"
    21  	"testing"
    22  
    23  	"github.com/apache/arrow/go/v16/arrow"
    24  	"github.com/apache/arrow/go/v16/arrow/array"
    25  	"github.com/apache/arrow/go/v16/arrow/memory"
    26  	"github.com/stretchr/testify/assert"
    27  )
    28  
    29  func TestBinaryBuilder(t *testing.T) {
    30  	mem := memory.NewCheckedAllocator(memory.NewGoAllocator())
    31  	defer mem.AssertSize(t, 0)
    32  
    33  	ab := array.NewBinaryBuilder(mem, arrow.BinaryTypes.Binary)
    34  
    35  	exp := [][]byte{[]byte("foo"), []byte("bar"), nil, []byte("sydney"), []byte("cameron")}
    36  	for _, v := range exp {
    37  		if v == nil {
    38  			ab.AppendNull()
    39  		} else {
    40  			ab.Append(v)
    41  		}
    42  	}
    43  
    44  	assert.Equal(t, len(exp), ab.Len(), "unexpected Len()")
    45  	assert.Equal(t, 1, ab.NullN(), "unexpected NullN()")
    46  
    47  	for i, v := range exp {
    48  		if v == nil {
    49  			v = []byte{}
    50  		}
    51  		assert.Equal(t, v, ab.Value(i), "unexpected BinaryArrayBuilder.Value(%d)", i)
    52  	}
    53  	// Zm9v is foo in base64
    54  	assert.NoError(t, ab.AppendValueFromString("Zm9v"))
    55  
    56  	ar := ab.NewBinaryArray()
    57  	assert.Equal(t, "Zm9v", ar.ValueStr(5))
    58  
    59  	ab.Release()
    60  	ar.Release()
    61  
    62  	// check state of builder after NewBinaryArray
    63  	assert.Zero(t, ab.Len(), "unexpected ArrayBuilder.Len(), NewBinaryArray did not reset state")
    64  	assert.Zero(t, ab.Cap(), "unexpected ArrayBuilder.Cap(), NewBinaryArray did not reset state")
    65  	assert.Zero(t, ab.NullN(), "unexpected ArrayBuilder.NullN(), NewBinaryArray did not reset state")
    66  }
    67  
    68  func TestBinaryBuilder_ReserveData(t *testing.T) {
    69  	mem := memory.NewCheckedAllocator(memory.NewGoAllocator())
    70  	defer mem.AssertSize(t, 0)
    71  
    72  	ab := array.NewBinaryBuilder(mem, arrow.BinaryTypes.Binary)
    73  
    74  	// call ReserveData and ensure the capacity doesn't change
    75  	// when appending entries until that count.
    76  	ab.ReserveData(256)
    77  	expCap := ab.DataCap()
    78  	for i := 0; i < 256/8; i++ {
    79  		ab.Append(bytes.Repeat([]byte("a"), 8))
    80  	}
    81  	assert.Equal(t, expCap, ab.DataCap(), "unexpected BinaryArrayBuilder.DataCap()")
    82  
    83  	ar := ab.NewBinaryArray()
    84  	ab.Release()
    85  	ar.Release()
    86  
    87  	// check state of builder after NewBinaryArray
    88  	assert.Zero(t, ab.Len(), "unexpected ArrayBuilder.Len(), NewBinaryArray did not reset state")
    89  	assert.Zero(t, ab.Cap(), "unexpected ArrayBuilder.Cap(), NewBinaryArray did not reset state")
    90  	assert.Zero(t, ab.NullN(), "unexpected ArrayBuilder.NullN(), NewBinaryArray did not reset state")
    91  }
    92  
    93  func TestBinaryBuilderLarge(t *testing.T) {
    94  	mem := memory.NewCheckedAllocator(memory.NewGoAllocator())
    95  	defer mem.AssertSize(t, 0)
    96  
    97  	ab := array.NewBinaryBuilder(mem, arrow.BinaryTypes.LargeBinary)
    98  
    99  	exp := [][]byte{[]byte("foo"), []byte("bar"), nil, []byte("sydney"), []byte("cameron")}
   100  	for _, v := range exp {
   101  		if v == nil {
   102  			ab.AppendNull()
   103  		} else {
   104  			ab.Append(v)
   105  		}
   106  	}
   107  
   108  	assert.Equal(t, len(exp), ab.Len(), "unexpected Len()")
   109  	assert.Equal(t, 1, ab.NullN(), "unexpected NullN()")
   110  
   111  	for i, v := range exp {
   112  		if v == nil {
   113  			v = []byte{}
   114  		}
   115  		assert.Equal(t, v, ab.Value(i), "unexpected BinaryArrayBuilder.Value(%d)", i)
   116  	}
   117  
   118  	ar := ab.NewLargeBinaryArray()
   119  	ab.Release()
   120  	ar.Release()
   121  
   122  	// check state of builder after NewBinaryArray
   123  	assert.Zero(t, ab.Len(), "unexpected ArrayBuilder.Len(), NewBinaryArray did not reset state")
   124  	assert.Zero(t, ab.Cap(), "unexpected ArrayBuilder.Cap(), NewBinaryArray did not reset state")
   125  	assert.Zero(t, ab.NullN(), "unexpected ArrayBuilder.NullN(), NewBinaryArray did not reset state")
   126  }
   127  
   128  func TestBinaryBuilderLarge_ReserveData(t *testing.T) {
   129  	mem := memory.NewCheckedAllocator(memory.NewGoAllocator())
   130  	defer mem.AssertSize(t, 0)
   131  
   132  	ab := array.NewBinaryBuilder(mem, arrow.BinaryTypes.LargeBinary)
   133  
   134  	// call ReserveData and ensure the capacity doesn't change
   135  	// when appending entries until that count.
   136  	ab.ReserveData(256)
   137  	expCap := ab.DataCap()
   138  	for i := 0; i < 256/8; i++ {
   139  		ab.Append(bytes.Repeat([]byte("a"), 8))
   140  	}
   141  	assert.Equal(t, expCap, ab.DataCap(), "unexpected BinaryArrayBuilder.DataCap()")
   142  
   143  	ar := ab.NewLargeBinaryArray()
   144  	ab.Release()
   145  	ar.Release()
   146  
   147  	// check state of builder after NewBinaryArray
   148  	assert.Zero(t, ab.Len(), "unexpected ArrayBuilder.Len(), NewBinaryArray did not reset state")
   149  	assert.Zero(t, ab.Cap(), "unexpected ArrayBuilder.Cap(), NewBinaryArray did not reset state")
   150  	assert.Zero(t, ab.NullN(), "unexpected ArrayBuilder.NullN(), NewBinaryArray did not reset state")
   151  }