# Automated tests

In the `v` repo there are several different tests. The main types are:

* `_test.v` tests - check that `test_` functions succeed. These can be 
run per directory or individually.
* `.out` tests - run a `.vv` file and check the output matches the 
contents of the `.out` file with the same base name. This is 
particularly useful for checking that errors are printed.

Tip: use `v -cc tcc` when compiling tests for speed.

## `v test-compiler`

This builds and tests:

* `vc` repo
* `_test.v` files
* examples
* `v install` a module

Some of these can be invoked separately.

## `vlib/v/compiler_errors_test.v`

This runs tests for:
* `checker/tests/*.vv`
* `parser/tests/*.vv`

## `vlib/v/tests`

General runnable program tests.

## Actual code

* `v build-examples`
* `v build-tools`

## `v test-fixed`

Test `vlib`.

## vfmt tests

In `vlib/v/fmt/` there's:

* `fmt_test.v`

This checks `.out` tests.

* `fmt_keep_test.v`

This verifies that `_keep.v` files would be unchanged by `vfmt -w`.

* `fmt_vlib_test.v`

This checks all source files are formatted and prints a summary. This 
is not required.

* `v test-fmt`

Test all files in the current directory are formatted.

## `.github/workflows/ci.yml`

This runs various CI tests, e.g.:

* `v vet vlib/v` - style checker
* `v fmt -verify` on certain source files