This is an automated email from the ASF dual-hosted git repository.
paleolimbot pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-nanoarrow.git
The following commit(s) were added to refs/heads/main by this push:
new 01c6638 [R] Add R package skeleton (#30)
01c6638 is described below
commit 01c66380a4358cf390b4d609794fdac2f2ebfb45
Author: Dewey Dunnington <[email protected]>
AuthorDate: Wed Aug 24 13:13:28 2022 -0300
[R] Add R package skeleton (#30)
* boilerplate pkg
* rstudio garbage ignore
* better description
* slightly more realistic boilerplate
* add R package to docs
* finish adding R package to docs
* maybe fix pages build
* maybe fix pkgdown build
* maybe fix pkgdown dest dir
---
.asf.yaml | 1 +
.github/workflows/docs.yaml | 19 ++-
.gitignore | 1 +
docs/README.md | 6 +-
docs/source/conf.py | 3 +
r/.Rbuildignore | 8 ++
r/.gitignore | 4 +
r/DESCRIPTION | 26 ++++
r/LICENSE.md | 194 ++++++++++++++++++++++++++++++
r/NAMESPACE | 4 +
r/R/nanoarrow-package.R | 20 +++
r/README.Rmd | 30 +++++
r/README.md | 24 ++++
r/_pkgdown.yml | 4 +
r/man/nanoarrow-package.Rd | 28 +++++
r/man/nanoarrow_version.Rd | 19 +++
r/nanoarrow.Rproj | 22 ++++
r/src/.gitignore | 3 +
r/src/init.c | 15 +++
r/src/version.c | 11 ++
r/tests/testthat.R | 12 ++
r/tests/testthat/test-nanoarrow-package.R | 4 +
22 files changed, 454 insertions(+), 4 deletions(-)
diff --git a/.asf.yaml b/.asf.yaml
index 6ec378c..385899b 100644
--- a/.asf.yaml
+++ b/.asf.yaml
@@ -24,6 +24,7 @@ github:
features:
issues: true
ghp_branch: gh-pages
+ ghp_path: ~
notifications:
commits: [email protected]
diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml
index 4ed86dc..7fed010 100644
--- a/.github/workflows/docs.yaml
+++ b/.github/workflows/docs.yaml
@@ -15,10 +15,19 @@ jobs:
steps:
- uses: actions/checkout@v2
- - name: Set up Python
- uses: actions/setup-python@v2
+ - uses: r-lib/actions/setup-pandoc@v2
+ - uses: r-lib/actions/setup-r@v2
+ with:
+ use-public-rspm: true
+ - uses: r-lib/actions/setup-r-dependencies@v2
+ with:
+ extra-packages: any::pkgdown, local::.
+ needs: website
+ working-directory: r
+ - uses: actions/setup-python@v2
with:
python-version: 3.9
+
- name: Install dependencies
run: |
sudo apt-get install doxygen
@@ -30,10 +39,14 @@ jobs:
cd src/apidoc
doxygen
- - name: Build documentation
+ - name: Run sphinx
run: |
cd docs
sphinx-build source _build/html
+
+ - name: Run pkgdown
+ run: pkgdown::build_site_github_pages("r", dest_dir =
"../docs/_build/html/r", new_process = FALSE, install = FALSE)
+ shell: Rscript {0}
- name: Upload built documentation
if: success() && github.ref != 'refs/heads/main'
diff --git a/.gitignore b/.gitignore
index 754d9b5..f6c1673 100644
--- a/.gitignore
+++ b/.gitignore
@@ -21,3 +21,4 @@ arrow-hpp
.DS_Store
CMakeUserPresets.json
.vscode
+.Rproj.user
diff --git a/docs/README.md b/docs/README.md
index 3744b90..9a4855a 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -19,7 +19,7 @@
# Building nanoarrow documentation
-Building the nanoarrow documentation requires [Python](https://python.org),
[R](https://r-project.org), and [Doxygen](https://doxygen.nl). In addition,
several Python and R packages are required. You can install the Python
dependencies using `pip install -r requirements.txt` in this directory; you can
install the R dependencies using `R -e 'install.packages("pkgdown")`.
+Building the nanoarrow documentation requires [Python](https://python.org),
[R](https://r-project.org), [Doxygen](https://doxygen.nl), and
[pandoc](https://pandoc.org/). In addition, several Python and R packages are
required. You can install the Python dependencies using `pip install -r
requirements.txt` in this directory; you can install the R dependencies using
`R -e 'install.packages("pkgdown")`.
```bash
git clone https://github.com/apache/arrow-nanoarrow.git
@@ -30,5 +30,9 @@ pushd ../src/apidoc
doxygen
popd
+# Run sphinx to generate the main site
sphinx-build source _build/html
+
+# Run pkgdown to generate R package documentation
+R -e 'pkgdown::build_site("../r")'
```
diff --git a/docs/source/conf.py b/docs/source/conf.py
index 7e50903..14ac742 100644
--- a/docs/source/conf.py
+++ b/docs/source/conf.py
@@ -72,6 +72,9 @@ html_theme = 'pydata_sphinx_theme'
html_theme_options = {
"show_toc_level": 2,
"use_edit_page_button": True,
+ "external_links": [
+ {"name": "R API", "url": "r/index.html"},
+ ],
}
html_context = {
diff --git a/r/.Rbuildignore b/r/.Rbuildignore
new file mode 100644
index 0000000..c11fc72
--- /dev/null
+++ b/r/.Rbuildignore
@@ -0,0 +1,8 @@
+^nanoarrow\.Rproj$
+^\.Rproj\.user$
+^LICENSE\.md$
+^_pkgdown\.yml$
+^docs$
+^pkgdown$
+^\.\./docs/_build/html$
+^README\.Rmd$
diff --git a/r/.gitignore b/r/.gitignore
new file mode 100644
index 0000000..c87782a
--- /dev/null
+++ b/r/.gitignore
@@ -0,0 +1,4 @@
+.Rproj.user
+.Rhistory
+docs
+../docs/_build/html
diff --git a/r/DESCRIPTION b/r/DESCRIPTION
new file mode 100644
index 0000000..3e7363c
--- /dev/null
+++ b/r/DESCRIPTION
@@ -0,0 +1,26 @@
+Package: nanoarrow
+Title: An R Interface to the 'nanoarrow' C Library
+Version: 0.0.0.9000
+Authors@R: c(
+ person(given = "Dewey",
+ family = "Dunnington",
+ role = c("aut", "cre"),
+ email = "[email protected]",
+ comment = c(ORCID = "0000-0002-9415-4582")),
+ person("Apache Arrow", email = "[email protected]", role = c("aut",
"cph"))
+ )
+Description: Provides an R interface to the 'nanoarrow' C library and the
+ 'Apache Arrow' application binary interface. Functions to import and
+ export 'ArrowArray', 'ArrowSchema', and 'ArrowArrayStream' C structures
+ to and from R objects are provided alongside helpers to facilitate zero-copy
+ data transfer among R bindings to libraries implementing the 'Arrow' C
+ data interface.
+License: Apache License (>= 2)
+Encoding: UTF-8
+Roxygen: list(markdown = TRUE)
+RoxygenNote: 7.2.1
+URL: https://github.com/apache/arrow-nanoarrow
+BugReports: https://github.com/apache/arrow-nanoarrow/issues
+Suggests:
+ testthat (>= 3.0.0)
+Config/testthat/edition: 3
diff --git a/r/LICENSE.md b/r/LICENSE.md
new file mode 100644
index 0000000..b62a9b5
--- /dev/null
+++ b/r/LICENSE.md
@@ -0,0 +1,194 @@
+Apache License
+==============
+
+_Version 2.0, January 2004_
+_<<http://www.apache.org/licenses/>>_
+
+### Terms and Conditions for use, reproduction, and distribution
+
+#### 1. Definitions
+
+“License” shall mean the terms and conditions for use, reproduction, and
+distribution as defined by Sections 1 through 9 of this document.
+
+“Licensor” shall mean the copyright owner or entity authorized by the copyright
+owner that is granting the License.
+
+“Legal Entity” shall mean the union of the acting entity and all other entities
+that control, are controlled by, or are under common control with that entity.
+For the purposes of this definition, “control” means **(i)** the power, direct
or
+indirect, to cause the direction or management of such entity, whether by
+contract or otherwise, or **(ii)** ownership of fifty percent (50%) or more of
the
+outstanding shares, or **(iii)** beneficial ownership of such entity.
+
+“You” (or “Your”) shall mean an individual or Legal Entity exercising
+permissions granted by this License.
+
+“Source” form shall mean the preferred form for making modifications, including
+but not limited to software source code, documentation source, and
configuration
+files.
+
+“Object” form shall mean any form resulting from mechanical transformation or
+translation of a Source form, including but not limited to compiled object
code,
+generated documentation, and conversions to other media types.
+
+“Work” shall mean the work of authorship, whether in Source or Object form,
made
+available under the License, as indicated by a copyright notice that is
included
+in or attached to the work (an example is provided in the Appendix below).
+
+“Derivative Works” shall mean any work, whether in Source or Object form, that
+is based on (or derived from) the Work and for which the editorial revisions,
+annotations, elaborations, or other modifications represent, as a whole, an
+original work of authorship. For the purposes of this License, Derivative Works
+shall not include works that remain separable from, or merely link (or bind by
+name) to the interfaces of, the Work and Derivative Works thereof.
+
+“Contribution” shall mean any work of authorship, including the original
version
+of the Work and any modifications or additions to that Work or Derivative Works
+thereof, that is intentionally submitted to Licensor for inclusion in the Work
+by the copyright owner or by an individual or Legal Entity authorized to submit
+on behalf of the copyright owner. For the purposes of this definition,
+“submitted” means any form of electronic, verbal, or written communication sent
+to the Licensor or its representatives, including but not limited to
+communication on electronic mailing lists, source code control systems, and
+issue tracking systems that are managed by, or on behalf of, the Licensor for
+the purpose of discussing and improving the Work, but excluding communication
+that is conspicuously marked or otherwise designated in writing by the
copyright
+owner as “Not a Contribution.”
+
+“Contributor” shall mean Licensor and any individual or Legal Entity on behalf
+of whom a Contribution has been received by Licensor and subsequently
+incorporated within the Work.
+
+#### 2. Grant of Copyright License
+
+Subject to the terms and conditions of this License, each Contributor hereby
+grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
+irrevocable copyright license to reproduce, prepare Derivative Works of,
+publicly display, publicly perform, sublicense, and distribute the Work and
such
+Derivative Works in Source or Object form.
+
+#### 3. Grant of Patent License
+
+Subject to the terms and conditions of this License, each Contributor hereby
+grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
+irrevocable (except as stated in this section) patent license to make, have
+made, use, offer to sell, sell, import, and otherwise transfer the Work, where
+such license applies only to those patent claims licensable by such Contributor
+that are necessarily infringed by their Contribution(s) alone or by combination
+of their Contribution(s) with the Work to which such Contribution(s) was
+submitted. If You institute patent litigation against any entity (including a
+cross-claim or counterclaim in a lawsuit) alleging that the Work or a
+Contribution incorporated within the Work constitutes direct or contributory
+patent infringement, then any patent licenses granted to You under this License
+for that Work shall terminate as of the date such litigation is filed.
+
+#### 4. Redistribution
+
+You may reproduce and distribute copies of the Work or Derivative Works thereof
+in any medium, with or without modifications, and in Source or Object form,
+provided that You meet the following conditions:
+
+* **(a)** You must give any other recipients of the Work or Derivative Works a
copy of
+this License; and
+* **(b)** You must cause any modified files to carry prominent notices stating
that You
+changed the files; and
+* **(c)** You must retain, in the Source form of any Derivative Works that You
distribute,
+all copyright, patent, trademark, and attribution notices from the Source form
+of the Work, excluding those notices that do not pertain to any part of the
+Derivative Works; and
+* **(d)** If the Work includes a “NOTICE” text file as part of its
distribution, then any
+Derivative Works that You distribute must include a readable copy of the
+attribution notices contained within such NOTICE file, excluding those notices
+that do not pertain to any part of the Derivative Works, in at least one of the
+following places: within a NOTICE text file distributed as part of the
+Derivative Works; within the Source form or documentation, if provided along
+with the Derivative Works; or, within a display generated by the Derivative
+Works, if and wherever such third-party notices normally appear. The contents
of
+the NOTICE file are for informational purposes only and do not modify the
+License. You may add Your own attribution notices within Derivative Works that
+You distribute, alongside or as an addendum to the NOTICE text from the Work,
+provided that such additional attribution notices cannot be construed as
+modifying the License.
+
+You may add Your own copyright statement to Your modifications and may provide
+additional or different license terms and conditions for use, reproduction, or
+distribution of Your modifications, or for any such Derivative Works as a
whole,
+provided Your use, reproduction, and distribution of the Work otherwise
complies
+with the conditions stated in this License.
+
+#### 5. Submission of Contributions
+
+Unless You explicitly state otherwise, any Contribution intentionally submitted
+for inclusion in the Work by You to the Licensor shall be under the terms and
+conditions of this License, without any additional terms or conditions.
+Notwithstanding the above, nothing herein shall supersede or modify the terms
of
+any separate license agreement you may have executed with Licensor regarding
+such Contributions.
+
+#### 6. Trademarks
+
+This License does not grant permission to use the trade names, trademarks,
+service marks, or product names of the Licensor, except as required for
+reasonable and customary use in describing the origin of the Work and
+reproducing the content of the NOTICE file.
+
+#### 7. Disclaimer of Warranty
+
+Unless required by applicable law or agreed to in writing, Licensor provides
the
+Work (and each Contributor provides its Contributions) on an “AS IS” BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
+including, without limitation, any warranties or conditions of TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are
+solely responsible for determining the appropriateness of using or
+redistributing the Work and assume any risks associated with Your exercise of
+permissions under this License.
+
+#### 8. Limitation of Liability
+
+In no event and under no legal theory, whether in tort (including negligence),
+contract, or otherwise, unless required by applicable law (such as deliberate
+and grossly negligent acts) or agreed to in writing, shall any Contributor be
+liable to You for damages, including any direct, indirect, special, incidental,
+or consequential damages of any character arising as a result of this License
or
+out of the use or inability to use the Work (including but not limited to
+damages for loss of goodwill, work stoppage, computer failure or malfunction,
or
+any and all other commercial damages or losses), even if such Contributor has
+been advised of the possibility of such damages.
+
+#### 9. Accepting Warranty or Additional Liability
+
+While redistributing the Work or Derivative Works thereof, You may choose to
+offer, and charge a fee for, acceptance of support, warranty, indemnity, or
+other liability obligations and/or rights consistent with this License.
However,
+in accepting such obligations, You may act only on Your own behalf and on Your
+sole responsibility, not on behalf of any other Contributor, and only if You
+agree to indemnify, defend, and hold each Contributor harmless for any
liability
+incurred by, or claims asserted against, such Contributor by reason of your
+accepting any such warranty or additional liability.
+
+_END OF TERMS AND CONDITIONS_
+
+### APPENDIX: How to apply the Apache License to your work
+
+To apply the Apache License to your work, attach the following boilerplate
+notice, with the fields enclosed by brackets `[]` replaced with your own
+identifying information. (Don't include the brackets!) The text should be
+enclosed in the appropriate comment syntax for the file format. We also
+recommend that a file or class name and description of purpose be included on
+the same “printed page” as the copyright notice for easier identification
within
+third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/r/NAMESPACE b/r/NAMESPACE
new file mode 100644
index 0000000..0ac46ae
--- /dev/null
+++ b/r/NAMESPACE
@@ -0,0 +1,4 @@
+# Generated by roxygen2: do not edit by hand
+
+export(nanoarrow_version)
+useDynLib(nanoarrow, .registration = TRUE)
diff --git a/r/R/nanoarrow-package.R b/r/R/nanoarrow-package.R
new file mode 100644
index 0000000..c9d331c
--- /dev/null
+++ b/r/R/nanoarrow-package.R
@@ -0,0 +1,20 @@
+#' @keywords internal
+"_PACKAGE"
+
+## usethis namespace: start
+#' @useDynLib nanoarrow, .registration = TRUE
+## usethis namespace: end
+NULL
+
+#' Underlying 'nanoarrow' C library version
+#'
+#' @return A string identifying the version of nanoarrow this package
+#' was compiled against.
+#' @export
+#'
+#' @examples
+#' nanoarrow_version()
+#'
+nanoarrow_version <- function() {
+ .Call(nanoarrow_c_version)
+}
diff --git a/r/README.Rmd b/r/README.Rmd
new file mode 100644
index 0000000..dccd413
--- /dev/null
+++ b/r/README.Rmd
@@ -0,0 +1,30 @@
+---
+output: github_document
+---
+
+<!-- README.md is generated from README.Rmd. Please edit that file -->
+
+```{r, include = FALSE}
+knitr::opts_chunk$set(
+ collapse = TRUE,
+ comment = "#>",
+ fig.path = "man/figures/README-",
+ out.width = "100%"
+)
+```
+
+# nanoarrow
+
+<!-- badges: start -->
+<!-- badges: end -->
+
+The goal of nanoarrow is to provide minimal useful bindings to the [Arrow C
Data](https://arrow.apache.org/docs/format/CDataInterface.html) and [Arrow C
Stream](https://arrow.apache.org/docs/format/CStreamInterface.html) interfaces
using the [nanoarrow C library](https://apache.github.io/arrow-nanoarrow/).
+
+## Installation
+
+You can install the development version of nanoarrow from
[GitHub](https://github.com/) with:
+
+``` r
+# install.packages("remotes")
+remotes::install_github("apache/arrow-nanoarrow/r")
+```
diff --git a/r/README.md b/r/README.md
new file mode 100644
index 0000000..aaa2e4a
--- /dev/null
+++ b/r/README.md
@@ -0,0 +1,24 @@
+
+<!-- README.md is generated from README.Rmd. Please edit that file -->
+
+# nanoarrow
+
+<!-- badges: start -->
+<!-- badges: end -->
+
+The goal of nanoarrow is to provide minimal useful bindings to the
+[Arrow C Data](https://arrow.apache.org/docs/format/CDataInterface.html)
+and [Arrow C
+Stream](https://arrow.apache.org/docs/format/CStreamInterface.html)
+interfaces using the [nanoarrow C
+library](https://apache.github.io/arrow-nanoarrow/).
+
+## Installation
+
+You can install the development version of nanoarrow from
+[GitHub](https://github.com/) with:
+
+``` r
+# install.packages("remotes")
+remotes::install_github("apache/arrow-nanoarrow/r")
+```
diff --git a/r/_pkgdown.yml b/r/_pkgdown.yml
new file mode 100644
index 0000000..291b245
--- /dev/null
+++ b/r/_pkgdown.yml
@@ -0,0 +1,4 @@
+url: ~
+template:
+ bootstrap: 5
+destination: ../docs/_build/html/r
diff --git a/r/man/nanoarrow-package.Rd b/r/man/nanoarrow-package.Rd
new file mode 100644
index 0000000..6ea9267
--- /dev/null
+++ b/r/man/nanoarrow-package.Rd
@@ -0,0 +1,28 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/nanoarrow-package.R
+\docType{package}
+\name{nanoarrow-package}
+\alias{nanoarrow}
+\alias{nanoarrow-package}
+\title{nanoarrow: An R Interface to the 'nanoarrow' C Library}
+\description{
+Provides an R interface to the 'nanoarrow' C library and the 'Apache Arrow'
application binary interface. Functions to import and export 'ArrowArray',
'ArrowSchema', and 'ArrowArrayStream' C structures to and from R objects are
provided alongside helpers to facilitate zero-copy data transfer among R
bindings to libraries implementing the 'Arrow' C data interface.
+}
+\seealso{
+Useful links:
+\itemize{
+ \item \url{https://github.com/apache/arrow-nanoarrow}
+ \item Report bugs at \url{https://github.com/apache/arrow-nanoarrow/issues}
+}
+
+}
+\author{
+\strong{Maintainer}: Dewey Dunnington \email{[email protected]}
(\href{https://orcid.org/0000-0002-9415-4582}{ORCID})
+
+Authors:
+\itemize{
+ \item Apache Arrow \email{[email protected]} [copyright holder]
+}
+
+}
+\keyword{internal}
diff --git a/r/man/nanoarrow_version.Rd b/r/man/nanoarrow_version.Rd
new file mode 100644
index 0000000..109d964
--- /dev/null
+++ b/r/man/nanoarrow_version.Rd
@@ -0,0 +1,19 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/nanoarrow-package.R
+\name{nanoarrow_version}
+\alias{nanoarrow_version}
+\title{Underlying 'nanoarrow' C library version}
+\usage{
+nanoarrow_version()
+}
+\value{
+A string identifying the version of nanoarrow this package
+was compiled against.
+}
+\description{
+Underlying 'nanoarrow' C library version
+}
+\examples{
+nanoarrow_version()
+
+}
diff --git a/r/nanoarrow.Rproj b/r/nanoarrow.Rproj
new file mode 100644
index 0000000..69fafd4
--- /dev/null
+++ b/r/nanoarrow.Rproj
@@ -0,0 +1,22 @@
+Version: 1.0
+
+RestoreWorkspace: No
+SaveWorkspace: No
+AlwaysSaveHistory: Default
+
+EnableCodeIndexing: Yes
+UseSpacesForTab: Yes
+NumSpacesForTab: 2
+Encoding: UTF-8
+
+RnwWeave: Sweave
+LaTeX: pdfLaTeX
+
+AutoAppendNewline: Yes
+StripTrailingWhitespace: Yes
+LineEndingConversion: Posix
+
+BuildType: Package
+PackageUseDevtools: Yes
+PackageInstallArgs: --no-multiarch --with-keep.source
+PackageRoxygenize: rd,collate,namespace
diff --git a/r/src/.gitignore b/r/src/.gitignore
new file mode 100644
index 0000000..22034c4
--- /dev/null
+++ b/r/src/.gitignore
@@ -0,0 +1,3 @@
+*.o
+*.so
+*.dll
diff --git a/r/src/init.c b/r/src/init.c
new file mode 100644
index 0000000..ba5de52
--- /dev/null
+++ b/r/src/init.c
@@ -0,0 +1,15 @@
+#define R_NO_REMAP
+#include <R.h>
+#include <Rinternals.h>
+
+SEXP nanoarrow_c_version();
+
+static const R_CallMethodDef CallEntries[] = {
+ {"nanoarrow_c_version", (DL_FUNC) &nanoarrow_c_version, 0},
+ {NULL, NULL, 0}
+};
+
+void R_init_nanoarrow(DllInfo *dll) {
+ R_registerRoutines(dll, NULL, CallEntries, NULL, NULL);
+ R_useDynamicSymbols(dll, FALSE);
+}
diff --git a/r/src/version.c b/r/src/version.c
new file mode 100644
index 0000000..72c2a48
--- /dev/null
+++ b/r/src/version.c
@@ -0,0 +1,11 @@
+#define R_NO_REMAP
+#include <R.h>
+#include <Rinternals.h>
+
+#ifndef NANOARROW_VERSION_STR
+#define NANOARROW_VERSION_STR "dev"
+#endif
+
+SEXP nanoarrow_c_version() {
+ return Rf_mkString(NANOARROW_VERSION_STR);
+}
diff --git a/r/tests/testthat.R b/r/tests/testthat.R
new file mode 100644
index 0000000..223f6a3
--- /dev/null
+++ b/r/tests/testthat.R
@@ -0,0 +1,12 @@
+# This file is part of the standard setup for testthat.
+# It is recommended that you do not modify it.
+#
+# Where should you do additional test configuration?
+# Learn more about the roles of various files in:
+# * https://r-pkgs.org/tests.html
+# * https://testthat.r-lib.org/reference/test_package.html#special-files
+
+library(testthat)
+library(nanoarrow)
+
+test_check("nanoarrow")
diff --git a/r/tests/testthat/test-nanoarrow-package.R
b/r/tests/testthat/test-nanoarrow-package.R
new file mode 100644
index 0000000..7bd3313
--- /dev/null
+++ b/r/tests/testthat/test-nanoarrow-package.R
@@ -0,0 +1,4 @@
+
+test_that("nanoarrow_version() works", {
+ expect_vector(nanoarrow_version(), character(1))
+})