]> git.proxmox.com Git - ceph.git/blob - ceph/src/arrow/r/tests/testthat/helper-roundtrip.R
import quincy 17.2.0
[ceph.git] / ceph / src / arrow / r / tests / testthat / helper-roundtrip.R
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,
12 # software distributed under the License is distributed on an
13 # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14 # KIND, either express or implied. See the License for the
15 # specific language governing permissions and limitations
16 # under the License.
17
18 expect_array_roundtrip <- function(x, type, as = NULL) {
19 a <- Array$create(x, type = as)
20 expect_equal(a$type, type)
21 expect_identical(length(a), length(x))
22 if (!inherits(type, c("ListType", "LargeListType", "FixedSizeListType"))) {
23 # TODO: revisit how missingness works with ListArrays
24 # R list objects don't handle missingness the same way as other vectors.
25 # Is there some vctrs thing we should do on the roundtrip back to R?
26 expect_as_vector(is.na(a), is.na(x))
27 }
28 roundtrip <- as.vector(a)
29 expect_equal(roundtrip, x, ignore_attr = TRUE)
30 # Make sure the storage mode is the same on roundtrip (esp. integer vs. numeric)
31 expect_identical(typeof(roundtrip), typeof(x))
32
33 if (length(x)) {
34 a_sliced <- a$Slice(1)
35 x_sliced <- x[-1]
36 expect_equal(a_sliced$type, type)
37 expect_identical(length(a_sliced), length(x_sliced))
38 if (!inherits(type, c("ListType", "LargeListType", "FixedSizeListType"))) {
39 expect_as_vector(is.na(a_sliced), is.na(x_sliced))
40 }
41 expect_as_vector(a_sliced, x_sliced, ignore_attr = TRUE)
42 }
43 invisible(a)
44 }