# 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 the script `build_examples.sh`.

## Unit Testing and Linting

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

## 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: `PLATFORM=nrf52 cargo rtv7em 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
```
