# PR Workflow

We use the bors-ng bot to merge PRs. In short, when someone replies `bors r+`,
your PR has been scheduled for final tests and will be automatically merged. If
a maintainer replies `bors delegate+`, then you have been granted the authority
to merge your own PR (usually this will happen if there are some trivial
changes required). For a full list of bors commands,
[see the bors documentation](https://bors.tech/documentation/).

# Tests

Our aim is to provide a number of tests to be safe from regression. Currently,
the unit tests and the linting is automated, however, the integration tests
have to be run manually.

## Compilation

`libtock-rs` currently has the following compilation targets

- `riscv32imac-unknown-none-elf`
- `riscv32imc-unknown-none-elf`
- `thumbv7em-none-eabi`

You can trigger a test build of the library and the examples using `make test`.

## Unit Testing and Linting

There a a number of tests which run in our travis-ci environment. You can run them
using `make test`.

## Integration tests

If you have an nRF52 DK you can run the integration tests as follows.
The pins P0.03 and P0.04 need to be connected (on an nRF52 DK). Then do the following:

- connect your device to your computer
- open a console, e.g. `tockloader listen`
- run the tests: `make flash-nrf52 EXAMPLE=libtock_test FEATURES=alloc`

The expected output on the UART console will be as follows.

```
[      OK ] Console
[      OK ] static mut
[      OK ] Dynamic dispatch
[      OK ] Formatting
[      OK ] Heap
[      OK ] Drivers only instantiable once
[      OK ] Callbacks
[      OK ] GPIO initialization
[      OK ] GPIO activation
[      OK ] GPIO read/write
[      OK ] Test suite finished with state SUCCESS
```
