15
15
// specific language governing permissions and limitations
16
16
// under the License.
17
17
18
+ #include < gmock/gmock-matchers.h>
18
19
#include < gtest/gtest.h>
19
20
#include < cmath>
21
+ #include < cstdint>
20
22
21
23
#include < arrow/array.h>
22
24
#include < arrow/array/builder_binary.h>
29
31
#include < arrow/compare.h>
30
32
#include < arrow/util/decimal.h>
31
33
32
- #include " nanoarrow/nanoarrow.h "
34
+ #include " nanoarrow/nanoarrow.hpp "
33
35
34
36
using namespace arrow ;
37
+ using nanoarrow::NA;
38
+ using testing::ElementsAre;
35
39
36
40
// Lightweight versions of ArrowTesting's ARROW_EXPECT_OK. This
37
41
// version accomplishes the task of making sure the status message
@@ -603,20 +607,9 @@ TEST(ArrayTest, ArrayTestAppendToUInt32Array) {
603
607
604
608
EXPECT_EQ (array.length , 2 );
605
609
EXPECT_EQ (array.null_count , 0 );
606
- auto data_buffer = reinterpret_cast <const uint32_t *>(array.buffers [1 ]);
607
610
EXPECT_EQ (array.buffers [0 ], nullptr );
608
- EXPECT_EQ (data_buffer[0 ], 1 );
609
- EXPECT_EQ (data_buffer[1 ], 3 );
610
-
611
- auto arrow_array = ImportArray (&array, uint32 ());
612
- ARROW_EXPECT_OK (arrow_array);
613
-
614
- auto builder = UInt32Builder ();
615
- ARROW_EXPECT_OK (builder.Append (1 ));
616
- ARROW_EXPECT_OK (builder.Append (3 ));
617
- auto expected_array = builder.Finish ();
618
-
619
- EXPECT_TRUE (arrow_array.ValueUnsafe ()->Equals (expected_array.ValueUnsafe ()));
611
+ EXPECT_THAT (nanoarrow::ViewArrayAs<uint32_t >(&array), ElementsAre (1 , 3 ));
612
+ ArrowArrayRelease (&array);
620
613
}
621
614
622
615
TEST (ArrayTest, ArrayTestAppendToUInt16Array) {
@@ -806,24 +799,8 @@ TEST(ArrayTest, ArrayTestAppendToBoolArray) {
806
799
807
800
EXPECT_EQ (array.length , 4 );
808
801
EXPECT_EQ (array.null_count , 2 );
809
- auto validity_buffer = reinterpret_cast <const uint8_t *>(array.buffers [0 ]);
810
- auto data_buffer = reinterpret_cast <const uint8_t *>(array.buffers [1 ]);
811
- EXPECT_EQ (validity_buffer[0 ], 0x01 | 0x08 );
812
- EXPECT_EQ (ArrowBitGet (data_buffer, 0 ), 0x01 );
813
- EXPECT_EQ (ArrowBitGet (data_buffer, 1 ), 0x00 );
814
- EXPECT_EQ (ArrowBitGet (data_buffer, 2 ), 0x00 );
815
- EXPECT_EQ (ArrowBitGet (data_buffer, 3 ), 0x00 );
816
-
817
- auto arrow_array = ImportArray (&array, boolean ());
818
- ARROW_EXPECT_OK (arrow_array);
819
-
820
- auto builder = BooleanBuilder ();
821
- ARROW_EXPECT_OK (builder.Append (true ));
822
- ARROW_EXPECT_OK (builder.AppendNulls (2 ));
823
- ARROW_EXPECT_OK (builder.Append (false ));
824
- auto expected_array = builder.Finish ();
825
-
826
- EXPECT_TRUE (arrow_array.ValueUnsafe ()->Equals (expected_array.ValueUnsafe ()));
802
+ EXPECT_THAT (nanoarrow::ViewArrayAs<bool >(&array), ElementsAre (true , NA, NA, false ));
803
+ ArrowArrayRelease (&array);
827
804
}
828
805
829
806
TEST (ArrayTest, ArrayTestAppendToLargeStringArray) {
@@ -855,17 +832,9 @@ TEST(ArrayTest, ArrayTestAppendToLargeStringArray) {
855
832
EXPECT_EQ (offset_buffer[4 ], 9 );
856
833
EXPECT_EQ (memcmp (data_buffer, " 123456789" , 9 ), 0 );
857
834
858
- auto arrow_array = ImportArray (&array, large_utf8 ());
859
- ARROW_EXPECT_OK (arrow_array);
860
-
861
- auto builder = LargeStringBuilder ();
862
- ARROW_EXPECT_OK (builder.Append (" 1234" ));
863
- ARROW_EXPECT_OK (builder.AppendNulls (2 ));
864
- ARROW_EXPECT_OK (builder.Append (" 56789" ));
865
- ARROW_EXPECT_OK (builder.AppendEmptyValue ());
866
- auto expected_array = builder.Finish ();
867
-
868
- EXPECT_TRUE (arrow_array.ValueUnsafe ()->Equals (expected_array.ValueUnsafe ()));
835
+ EXPECT_THAT (nanoarrow::ViewArrayAsBytes<64 >(&array),
836
+ ElementsAre (" 1234" _v, NA, NA, " 56789" _v, " " _v));
837
+ ArrowArrayRelease (&array);
869
838
}
870
839
871
840
TEST (ArrayTest, ArrayTestAppendToFixedSizeBinaryArray) {
@@ -899,18 +868,10 @@ TEST(ArrayTest, ArrayTestAppendToFixedSizeBinaryArray) {
899
868
' 9' , ' 0' , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 };
900
869
EXPECT_EQ (memcmp (data_buffer, expected_data, 25 ), 0 );
901
870
902
- auto arrow_array = ImportArray (&array, &schema);
903
- ARROW_EXPECT_OK (arrow_array);
904
-
905
- auto builder = FixedSizeBinaryBuilder (fixed_size_binary (5 ));
906
- ARROW_EXPECT_OK (builder.Append (" 12345" ));
907
- ARROW_EXPECT_OK (builder.AppendNulls (2 ));
908
- ARROW_EXPECT_OK (builder.Append (" 67890" ));
909
- ARROW_EXPECT_OK (builder.AppendEmptyValue ());
910
- auto expected_array = builder.Finish ();
911
- ARROW_EXPECT_OK (expected_array);
912
-
913
- EXPECT_TRUE (arrow_array.ValueUnsafe ()->Equals (expected_array.ValueUnsafe ()));
871
+ EXPECT_THAT (nanoarrow::ViewArrayAsFixedSizeBytes (&array, 5 ),
872
+ ElementsAre (" 12345" _v, NA, NA, " 67890" _v, " \0\0\0\0\0 " _v));
873
+ ArrowArrayRelease (&array);
874
+ ArrowSchemaRelease (&schema);
914
875
}
915
876
916
877
TEST (ArrayTest, ArrayTestAppendToBinaryArrayErrors) {
@@ -932,7 +893,7 @@ TEST(ArrayTest, ArrayTestAppendToIntervalArrayYearMonth) {
932
893
const int32_t months = 42 ;
933
894
struct ArrowInterval interval;
934
895
ArrowIntervalInit (&interval, ArrowType::NANOARROW_TYPE_INTERVAL_MONTHS);
935
- interval.months = 42 ;
896
+ interval.months = months ;
936
897
937
898
ASSERT_EQ (ArrowArrayInitFromType (&array, NANOARROW_TYPE_INTERVAL_MONTHS), NANOARROW_OK);
938
899
EXPECT_EQ (ArrowArrayStartAppending (&array), NANOARROW_OK);
@@ -943,14 +904,8 @@ TEST(ArrayTest, ArrayTestAppendToIntervalArrayYearMonth) {
943
904
EXPECT_EQ (array.length , 2 );
944
905
EXPECT_EQ (array.null_count , 1 );
945
906
946
- auto data_buffer = reinterpret_cast <const int32_t *>(array.buffers [1 ]);
947
- EXPECT_EQ (data_buffer[0 ], months);
948
-
949
- auto arrow_array = ImportArray (&array, month_interval ());
950
- ARROW_EXPECT_OK (arrow_array);
951
-
952
- // TODO: arrow does not have a builder for MonthIntervals
953
- // so no comparison is done after creating the array
907
+ EXPECT_THAT (nanoarrow::ViewArrayAs<int32_t >(&array), ElementsAre (months, NA));
908
+ ArrowArrayRelease (&array);
954
909
}
955
910
956
911
TEST (ArrayTest, ArrayTestAppendToIntervalArrayDayTime) {
0 commit comments