# Automated tests TLDR: run `v test-all` locally, after making your changes, and before submitting PRs. ## Notes 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. ## `vlib/v/tests` General runnable tests for different features of the V compiler. * `vlib/v/tests/inout/compiler_test.v` Test output of running a V program matches an expected .out file. Check the source for how to test panics. * `vlib/v/gen/c/coutput_test.v` This tests whether the generated C source code matches all expectations, specified in *.c.must_have files, in the folder vlib/v/gen/c/testdata/ . Each `.c.must_have` file has to have a corresponding .vv file. Each `.c.must_have` file, consists of multiple lines. Each of these lines, *should* be present *at least once* in the output, when the .vv file is compiled with `-o -` . * `vlib/v/tests/run_project_folders_test.v` Tests whether whole project folders can be compiled, and run. NB: Each project in these folders, should finish with exit code 0, and it should output `OK` as its last stdout line. ## Test building of actual V programs (examples, tools, V itself) * `v build-tools` * `v build-examples` * `v build-vbinaries` ## vfmt tests In `vlib/v/fmt/` there are:: * `v vlib/v/fmt/fmt_test.v` This checks `.out` tests. * `v vlib/v/fmt/fmt_keep_test.v` This verifies that `_keep.v` files would be unchanged by `vfmt -w`. * `v vlib/v/fmt/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. ## Markdown * `v check-md -hide-warnings .` Ensure that all .md files in the project are formatted properly, and that the V code block examples in them can be compiled/formatted too. ## `.github/workflows/ci.yml` This runs various CI tests, e.g.: * `v vet vlib/v` - style checker * `v fmt -verify` on certain source files ## `v test-cleancode` Check that most .v files, are invariant of `v fmt` runs. ## `v test-self` Run `vlib` module tests, *including* the compiler tests. ## `v vlib/v/compiler_errors_test.v` This runs tests for: * `vlib/v/checker/tests/*.vv` * `vlib/v/parser/tests/*.vv` ### Special folders that compiler_errors_test.v will try to run/compile with specific options: vlib/v/checker/tests/globals_run/ - `-enable-globals run`; results stored in `.run.out` files, matching the .vv ones. ## `v test-all` Test and build *everything*. Usefull to verify *locally*, that the CI will most likely pass. Slowest, but most comprehensive. It works, by running these in succession: * `v test-cleancode` * `v test-self` * `v test-fmt` * `v build-tools` * `v build-examples` * `v check-md -hide-warnings .` * `v install nedpals.args`