40 lines
1.7 KiB
Markdown
40 lines
1.7 KiB
Markdown
Software Testcases
|
|
==================
|
|
|
|
A smorgasbord of software testcases for various features and cases that aren't well-covered by upstream tests such as `riscv-arch-test`, the `riscv-test` end-to-end debug tests or `riscv-formal`. Each test consists of one C file.
|
|
|
|
Some tests have an expected text output associated with them -- the test passes if this text output matches, and `main()` exits with a zero return code. Other tests are completely self-checking, reporting pass/fail only with the return code from `main()`. This means there is _no point_ running these tests if the processor is in a fundamentally broken state (e.g. doesn't pass ISA compliance) and can't be trusted to check itself.
|
|
|
|
For example, `hellow.c`:
|
|
|
|
```c
|
|
#include "tb_cxxrtl_io.h"
|
|
|
|
/*EXPECTED-OUTPUT***************************************************************
|
|
|
|
Hello world from Hazard3 + CXXRTL!
|
|
|
|
*******************************************************************************/
|
|
|
|
int main() {
|
|
tb_puts("Hello world from Hazard3 + CXXRTL!\n");
|
|
return 0;
|
|
}
|
|
```
|
|
|
|
The contents of the `EXPECTED-OUTPUT` comment is simply compared with the logged text from `tb_puts`, `tb_printf` etc. Tests might log a range of output here, such as `mcause` values in exceptions.
|
|
|
|
To run the tests:
|
|
|
|
```bash
|
|
./runtests
|
|
```
|
|
|
|
This will first rebuild the simulator (`../tb_cxxrtl/`) if needed, then build and run all the software testcases, then print out a summary of test pass/fail status. The `./run_tests` executable itself returns a successful exit code if and only if all tests passed. A VCD trace and printf log will be created for each test, with the same name as the test, for debugging failures.
|
|
|
|
To clean up the junk:
|
|
|
|
```bash
|
|
./cleantests
|
|
```
|