Add test documentation
This commit is contained in:
parent
c57f2d6973
commit
e972dfe220
42
tools/tests/README.md
Normal file
42
tools/tests/README.md
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
# Testing Collapse OS
|
||||||
|
|
||||||
|
This folder contains Collapse OS' automated testing suite. To run, it needs
|
||||||
|
`tools/emul` to be built. You can run all tests with `make`.
|
||||||
|
|
||||||
|
## zasm
|
||||||
|
|
||||||
|
This folder tests zasm's assembling capabilities by assembling test source files
|
||||||
|
and compare the results with expected binaries. These binaries used to be tested
|
||||||
|
with a golden standard assembler, scas, but at some point compatibility with
|
||||||
|
scas was broken, so we test against previously generated binaries, making those
|
||||||
|
tests essentially regression tests.
|
||||||
|
|
||||||
|
Those reference binaries sometimes change, especially when we update code in
|
||||||
|
core libraries because some tests include them. In this case, we have to update
|
||||||
|
binaries to the new expected value by being extra careful not to introduce a
|
||||||
|
regression in test references.
|
||||||
|
|
||||||
|
## unit
|
||||||
|
|
||||||
|
Those tests target specific routines to test and test them using
|
||||||
|
`tools/emul/runbin` which:
|
||||||
|
|
||||||
|
1. Loads the specified binary
|
||||||
|
2. Runs it until it halts
|
||||||
|
3. Verifies that `A` is zero. If it's not, we're in error and we display the
|
||||||
|
value of `A`.
|
||||||
|
|
||||||
|
Test source code has no harnessing and is written in a very "hands on" approach.
|
||||||
|
At the moment, debugging a test failure is a bit tricky because the error code
|
||||||
|
often doesn't tell us much.
|
||||||
|
|
||||||
|
The convention is to keep a `testNum` counter variable around and call
|
||||||
|
`nexttest` after each success so that we can easily have an idea of where we
|
||||||
|
fail.
|
||||||
|
|
||||||
|
Then, if you need to debug the cause of a failure, well, you're on your own.
|
||||||
|
However, there are tricks.
|
||||||
|
|
||||||
|
1. Run `unit/runtests.sh <name of file to test>` to target a specific test unit.
|
||||||
|
2. Insert a `halt` to see the value of `A` at any given moment: it will be your
|
||||||
|
reported error code (if 0, runbin will report a success).
|
Loading…
Reference in New Issue
Block a user