# 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 two compilation targets: `riscv32imac-unknown-none-elf`
and `thumbv7em-none-eabi`. You can build 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 a `nRF52-dk` you can run the integration tests as follows.
The pins P0.03 and P0.04 need to be connected (on a nRF52-DK). Then do the following:

- connect your device to your computer
- open a console, e.g. `tockloader listen`
- run the tests `./run_hardware_test.sh

The desired test output is:

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

```
[test-results]
heap_test = "Heap works."
formatting =  works
should_be_one = 1
gpio_works = true
trait_obj_value_usize = 1
trait_obj_value_string = string
callbacks_work = true
all_tests_run = true
```
