@@ -1525,7 +1525,7 @@ TEST(ArrayTest, ArrayTestAppendToLargeListArray) {
1525
1525
EXPECT_EQ (ArrowArrayFinishBuildingDefault (&array, &error), EINVAL);
1526
1526
EXPECT_STREQ (
1527
1527
ArrowErrorMessage (&error),
1528
- " Expected child of large list array to have length >= 3 but found array with "
1528
+ " Expected child of large_list array to have length >= 3 but found array with "
1529
1529
" length 2" );
1530
1530
1531
1531
array.children [0 ]->length = array.children [0 ]->length + 1 ;
@@ -1555,6 +1555,149 @@ TEST(ArrayTest, ArrayTestAppendToLargeListArray) {
1555
1555
#endif
1556
1556
}
1557
1557
1558
+ TEST (ArrayTest, ArrayTestAppendToListViewArray) {
1559
+ struct ArrowArray array;
1560
+ struct ArrowSchema schema;
1561
+ struct ArrowError error;
1562
+
1563
+ ASSERT_EQ (ArrowSchemaInitFromType (&schema, NANOARROW_TYPE_LIST_VIEW), NANOARROW_OK);
1564
+ ASSERT_EQ (ArrowSchemaSetType (schema.children [0 ], NANOARROW_TYPE_INT64), NANOARROW_OK);
1565
+ ASSERT_EQ (ArrowArrayInitFromSchema (&array, &schema, nullptr ), NANOARROW_OK);
1566
+
1567
+ ASSERT_EQ (ArrowArrayStartAppending (&array), NANOARROW_OK);
1568
+
1569
+ // Check that we can reserve recursively without erroring
1570
+ ASSERT_EQ (ArrowArrayReserve (&array, 5 ), NANOARROW_OK);
1571
+ EXPECT_EQ (ArrowArrayBuffer (array.children [0 ], 1 )->capacity_bytes , 0 );
1572
+
1573
+ ASSERT_EQ (ArrowArrayAppendInt (array.children [0 ], 123 ), NANOARROW_OK);
1574
+ EXPECT_EQ (ArrowArrayFinishElement (&array), NANOARROW_OK);
1575
+
1576
+ ASSERT_EQ (ArrowArrayAppendNull (&array, 1 ), NANOARROW_OK);
1577
+
1578
+ ASSERT_EQ (ArrowArrayAppendInt (array.children [0 ], 456 ), NANOARROW_OK);
1579
+ ASSERT_EQ (ArrowArrayAppendInt (array.children [0 ], 789 ), NANOARROW_OK);
1580
+ EXPECT_EQ (ArrowArrayFinishElement (&array), NANOARROW_OK);
1581
+
1582
+ EXPECT_EQ (ArrowArrayAppendEmpty (&array, 1 ), NANOARROW_OK);
1583
+
1584
+ // Make sure number of children is checked at finish
1585
+ array.n_children = 0 ;
1586
+ EXPECT_EQ (ArrowArrayFinishBuildingDefault (&array, &error), EINVAL);
1587
+ EXPECT_STREQ (ArrowErrorMessage (&error),
1588
+ " Expected 1 child of list_view array but found 0 child arrays" );
1589
+ array.n_children = 1 ;
1590
+
1591
+ // Make sure final child size is checked at finish
1592
+ // TODO: this may be an expensive check with LIST_VIEW types
1593
+ /*
1594
+ array.children[0]->length = array.children[0]->length - 1;
1595
+ EXPECT_EQ(ArrowArrayFinishBuildingDefault(&array, &error), EINVAL);
1596
+ EXPECT_STREQ(
1597
+ ArrowErrorMessage(&error),
1598
+ "Expected child of list_view array to have length >= 3 but found array with "
1599
+ "length 2");
1600
+
1601
+ array.children[0]->length = array.children[0]->length + 1;
1602
+ */
1603
+ EXPECT_EQ (ArrowArrayFinishBuildingDefault (&array, &error), NANOARROW_OK);
1604
+
1605
+ #if defined(NANOARROW_BUILD_TESTS_WITH_ARROW)
1606
+ auto arrow_array = ImportArray (&array, &schema);
1607
+ ARROW_EXPECT_OK (arrow_array);
1608
+
1609
+ constexpr size_t nelems = 4 ;
1610
+ const std::array<int32_t , nelems> offsets = {0 , 0 , 1 , 0 };
1611
+ const std::array<int32_t , nelems> sizes = {1 , 0 , 2 , 0 };
1612
+ const std::array<uint8_t , nelems> valid_bytes = {1 , 0 , 1 , 1 };
1613
+
1614
+ auto child_builder = std::make_shared<Int64Builder>();
1615
+ auto builder =
1616
+ ListViewBuilder (default_memory_pool (), child_builder, list_view (int64 ()));
1617
+ ARROW_EXPECT_OK (
1618
+ builder.AppendValues (offsets.data (), sizes.data (), nelems, valid_bytes.data ()));
1619
+ auto expected_array = builder.Finish ();
1620
+ ARROW_EXPECT_OK (expected_array);
1621
+
1622
+ EXPECT_TRUE (arrow_array.ValueUnsafe ()->Equals (expected_array.ValueUnsafe ()));
1623
+ #else
1624
+ ArrowSchemaRelease (&schema);
1625
+ ArrowArrayRelease (&array);
1626
+ #endif
1627
+ }
1628
+
1629
+ TEST (ArrayTest, ArrayTestAppendToLargeListViewArray) {
1630
+ struct ArrowArray array;
1631
+ struct ArrowSchema schema;
1632
+ struct ArrowError error;
1633
+
1634
+ ASSERT_EQ (ArrowSchemaInitFromType (&schema, NANOARROW_TYPE_LARGE_LIST_VIEW),
1635
+ NANOARROW_OK);
1636
+ ASSERT_EQ (ArrowSchemaSetType (schema.children [0 ], NANOARROW_TYPE_INT64), NANOARROW_OK);
1637
+ ASSERT_EQ (ArrowArrayInitFromSchema (&array, &schema, nullptr ), NANOARROW_OK);
1638
+
1639
+ ASSERT_EQ (ArrowArrayStartAppending (&array), NANOARROW_OK);
1640
+
1641
+ // Check that we can reserve recursively without erroring
1642
+ ASSERT_EQ (ArrowArrayReserve (&array, 5 ), NANOARROW_OK);
1643
+ EXPECT_EQ (ArrowArrayBuffer (array.children [0 ], 1 )->capacity_bytes , 0 );
1644
+
1645
+ ASSERT_EQ (ArrowArrayAppendInt (array.children [0 ], 123 ), NANOARROW_OK);
1646
+ EXPECT_EQ (ArrowArrayFinishElement (&array), NANOARROW_OK);
1647
+
1648
+ ASSERT_EQ (ArrowArrayAppendNull (&array, 1 ), NANOARROW_OK);
1649
+
1650
+ ASSERT_EQ (ArrowArrayAppendInt (array.children [0 ], 456 ), NANOARROW_OK);
1651
+ ASSERT_EQ (ArrowArrayAppendInt (array.children [0 ], 789 ), NANOARROW_OK);
1652
+ EXPECT_EQ (ArrowArrayFinishElement (&array), NANOARROW_OK);
1653
+
1654
+ EXPECT_EQ (ArrowArrayAppendEmpty (&array, 1 ), NANOARROW_OK);
1655
+
1656
+ // Make sure number of children is checked at finish
1657
+ array.n_children = 0 ;
1658
+ EXPECT_EQ (ArrowArrayFinishBuildingDefault (&array, &error), EINVAL);
1659
+ EXPECT_STREQ (ArrowErrorMessage (&error),
1660
+ " Expected 1 child of large_list_view array but found 0 child arrays" );
1661
+ array.n_children = 1 ;
1662
+
1663
+ // Make sure final child size is checked at finish
1664
+ // TODO: this may be an expensive check with LIST_VIEW types
1665
+ /*
1666
+ array.children[0]->length = array.children[0]->length - 1;
1667
+ EXPECT_EQ(ArrowArrayFinishBuildingDefault(&array, &error), EINVAL);
1668
+ EXPECT_STREQ(
1669
+ ArrowErrorMessage(&error),
1670
+ "Expected child of list_view array to have length >= 3 but found array with "
1671
+ "length 2");
1672
+
1673
+ array.children[0]->length = array.children[0]->length + 1;
1674
+ */
1675
+ EXPECT_EQ (ArrowArrayFinishBuildingDefault (&array, &error), NANOARROW_OK);
1676
+
1677
+ #if defined(NANOARROW_BUILD_TESTS_WITH_ARROW)
1678
+ auto arrow_array = ImportArray (&array, &schema);
1679
+ ARROW_EXPECT_OK (arrow_array);
1680
+
1681
+ constexpr size_t nelems = 4 ;
1682
+ const std::array<int64_t , nelems> offsets = {0 , 0 , 1 , 0 };
1683
+ const std::array<int64_t , nelems> sizes = {1 , 0 , 2 , 0 };
1684
+ const std::array<uint8_t , nelems> valid_bytes = {1 , 0 , 1 , 1 };
1685
+
1686
+ auto child_builder = std::make_shared<Int64Builder>();
1687
+ auto builder =
1688
+ LargeListViewBuilder (default_memory_pool (), child_builder, list_view (int64 ()));
1689
+ ARROW_EXPECT_OK (
1690
+ builder.AppendValues (offsets.data (), sizes.data (), nelems, valid_bytes.data ()));
1691
+ auto expected_array = builder.Finish ();
1692
+ ARROW_EXPECT_OK (expected_array);
1693
+
1694
+ EXPECT_TRUE (arrow_array.ValueUnsafe ()->Equals (expected_array.ValueUnsafe ()));
1695
+ #else
1696
+ ArrowSchemaRelease (&schema);
1697
+ ArrowArrayRelease (&array);
1698
+ #endif
1699
+ }
1700
+
1558
1701
TEST (ArrayTest, ArrayTestAppendToMapArray) {
1559
1702
struct ArrowArray array;
1560
1703
struct ArrowSchema schema;
0 commit comments