---
title: "Development"
output:
  prettydoc::html_pretty:
    theme: tactile
    highlight: vignette
vignette: >
  %\VignetteIndexEntry{Development}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  out.width = "100%",
  dpi = 120
)
```

```{r setup, include=FALSE}
# Keep examples reproducible in newer R versions and set seed
RNGversion("3.6.0")
set.seed(12345)
```

## Setup `clugenr` development

Clone the package, `cd` into to the package's folder and start R:

```plaintext
$ git clone https://github.com/clugen/clugenr.git
$ cd clugenr
```

Developing `clugenr` requires [devtools], thus make sure it's installed before
continuing. Open an R prompt at the `clugenr` folder and install `clugenr`'s
development dependencies:

```R
devtools::install_dev_deps()
```

The package can be tested as follows:

```R
devtools::test()
```

There are four levels of testing, by increasing thoroughness (and slowness):
`cran`, `ci`, `normal` and `full`. The first two run by default on CRAN and CI
environments, respectively. The third one, `normal`, is the default mode when
running the tests locally, and may take some time (10-20 minutes). The last one,
`full` is more thorough and can take a few hours. It's possible to define the
tests thoroughness by setting the `CLUGENR_TEST_MODE` environment variable. For
example, to simulate how tests would run in CRAN as follows:

```R
Sys.setenv(CLUGENR_TEST_MODE = "cran")
devtools::test()
Sys.unsetenv("CLUGENR_TEST_MODE")
```

The following instruction updates the documentation, then builds and checks the
package locally:

```R
devtools::check()
```

It's also possible to define the environment in which to run the tests when
performing the check:

```R
Sys.setenv(CLUGENR_TEST_MODE = "ci")
devtools::check()
Sys.unsetenv("CLUGENR_TEST_MODE")
```

Create or update the generated documentation in `man/`, file collation and
`NAMESPACE`:

```R
devtools::document()
```

Build `clugenr`'s website (requires [pkgdown], [ggplot2], [patchwork] and
[rgl]):

```R
pkgdown::build_site()
# Can also be done with devtools::build_site()
# In either case add option `preview = F` to avoid opening the browser
```

Install the package locally with:

```R
devtools::install()
```

Check that it works:

```{r, out.width = "100%", dpi = 200}
library(clugenr)
x <- clugen(2, 5, 800, c(-1, 1), 0.6, c(4, 6), 5, 0.4, 0.5)
plot(x$points, col = x$clusters, xlab = "x", ylab = "y", asp = 1)
```

## Code style

To contribute to `clugenr`, follow the [tidyverse style guide]. Some highlights
include, but are not limited to:

* File encoding: UTF-8
* Indentation: 2 spaces (no tabs)
* Line size limit: 80 chars
* Newlines: Unix style, i.e. LF or `\n`

[devtools]: https://devtools.r-lib.org/
[pkgdown]: https://pkgdown.r-lib.org/
[ggplot2]: https://ggplot2.tidyverse.org/
[patchwork]: https://patchwork.data-imaginist.com/index.html
[rgl]: https://dmurdoch.github.io/rgl/
[tidyverse style guide]: https://style.tidyverse.org/index.html
