Skip to content

Commit 768935b

Browse files
committed
test(arreflect): strengthen multi-level ptr assertions, add map/fixedsizelist/list ptr tests
- multi_level_pointer_struct: assert field values (X==99) not just nulls - Add multi_level_pointer_map, multi_level_pointer_fixed_size_list, multi_level_pointer_list subtests exercising the for-Kind-Ptr loop in buildMapArray, buildFixedSizeListArray, buildListArray
1 parent ab4e790 commit 768935b

1 file changed

Lines changed: 46 additions & 0 deletions

File tree

arrow/array/arreflect/reflect_go_to_arrow_test.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,10 @@ func TestBuildStructArray(t *testing.T) {
331331
assert.False(t, arr.IsNull(0))
332332
assert.True(t, arr.IsNull(1))
333333
assert.False(t, arr.IsNull(2))
334+
sa := arr.(*array.Struct)
335+
xArr := sa.Field(0).(*array.Int32)
336+
assert.Equal(t, int32(99), xArr.Value(0))
337+
assert.Equal(t, int32(99), xArr.Value(2))
334338
})
335339
}
336340

@@ -370,6 +374,20 @@ func TestBuildListArray(t *testing.T) {
370374
assert.False(t, arr.IsNull(2))
371375
})
372376

377+
t.Run("multi_level_pointer_list", func(t *testing.T) {
378+
a := []int32{1, 2}
379+
pa := &a
380+
var nilPa *[]int32
381+
vals := []**[]int32{&pa, &nilPa, &pa}
382+
arr, err := buildArray(reflect.ValueOf(vals), tagOpts{}, mem)
383+
require.NoError(t, err)
384+
defer arr.Release()
385+
assert.Equal(t, 3, arr.Len())
386+
assert.False(t, arr.IsNull(0))
387+
assert.True(t, arr.IsNull(1))
388+
assert.False(t, arr.IsNull(2))
389+
})
390+
373391
t.Run("string_lists", func(t *testing.T) {
374392
vals := [][]string{{"a", "b"}, {"c"}}
375393
arr, err := buildArray(reflect.ValueOf(vals), tagOpts{}, mem)
@@ -422,6 +440,20 @@ func TestBuildMapArray(t *testing.T) {
422440
kvArr := arr.(*array.Map).ListValues().(*array.Struct)
423441
assert.Equal(t, 3, kvArr.Len(), "expected 3 key-value pairs, got %d", kvArr.Len())
424442
})
443+
444+
t.Run("multi_level_pointer_map", func(t *testing.T) {
445+
m := map[string]int32{"x": 1}
446+
pm := &m
447+
var nilPm *map[string]int32
448+
vals := []**map[string]int32{&pm, &nilPm, &pm}
449+
arr, err := buildArray(reflect.ValueOf(vals), tagOpts{}, mem)
450+
require.NoError(t, err)
451+
defer arr.Release()
452+
assert.Equal(t, 3, arr.Len())
453+
assert.False(t, arr.IsNull(0))
454+
assert.True(t, arr.IsNull(1))
455+
assert.False(t, arr.IsNull(2))
456+
})
425457
}
426458

427459
func TestBuildFixedSizeListArray(t *testing.T) {
@@ -470,6 +502,20 @@ func TestBuildFixedSizeListArray(t *testing.T) {
470502
assert.True(t, arr.IsNull(0), "nil slice should be null")
471503
assert.False(t, arr.IsNull(1), "non-nil should not be null")
472504
})
505+
506+
t.Run("multi_level_pointer_fixed_size_list", func(t *testing.T) {
507+
a := [3]int32{1, 2, 3}
508+
pa := &a
509+
var nilPa *[3]int32
510+
vals := []**[3]int32{&pa, &nilPa, &pa}
511+
arr, err := buildArray(reflect.ValueOf(vals), tagOpts{}, mem)
512+
require.NoError(t, err)
513+
defer arr.Release()
514+
assert.Equal(t, 3, arr.Len())
515+
assert.False(t, arr.IsNull(0))
516+
assert.True(t, arr.IsNull(1))
517+
assert.False(t, arr.IsNull(2))
518+
})
473519
}
474520

475521
func TestBuildDictionaryArray(t *testing.T) {

0 commit comments

Comments
 (0)