mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
tests: add a vlib/v/tests/known_errors/known_errors_test.v test runner
This commit is contained in:
parent
0497b885dc
commit
a1e9cae5d2
14
TESTS.md
14
TESTS.md
@ -83,6 +83,20 @@ This *test runner*, checks whether whole project folders, can be compiled, and r
|
|||||||
NB: Each project in these folders, should finish with an exit code of 0,
|
NB: Each project in these folders, should finish with an exit code of 0,
|
||||||
and it should output `OK` as its last stdout line.
|
and it should output `OK` as its last stdout line.
|
||||||
|
|
||||||
|
## `v vlib/v/tests/known_errors/known_errors_test.v`
|
||||||
|
This *test runner*, checks whether a known program, that was expected to compile,
|
||||||
|
but did NOT, due to a buggy checker, parser or cgen, continues to fail.
|
||||||
|
The negative programs are collected in the `vlib/v/tests/known_errors/testdata/` folder.
|
||||||
|
Each of them should FAIL to compile, due to a known/confirmed compiler bug/limitation.
|
||||||
|
|
||||||
|
The intended use of this, is for providing samples, that currently do NOT compile,
|
||||||
|
but that a future compiler improvement WILL be able to compile, and to
|
||||||
|
track, whether they were not fixed incidentally, due to an unrelated
|
||||||
|
change/improvement. For example, code that triggers generating invalid C code can go here,
|
||||||
|
and later when a bug is fixed, can be moved to a proper _test.v or .vv/.out pair, outside of
|
||||||
|
the `vlib/v/tests/known_errors/testdata/` folder.
|
||||||
|
|
||||||
|
|
||||||
## Test building of actual V programs (examples, tools, V itself)
|
## Test building of actual V programs (examples, tools, V itself)
|
||||||
|
|
||||||
* `v build-tools`
|
* `v build-tools`
|
||||||
|
36
vlib/v/tests/known_errors/known_errors_test.v
Normal file
36
vlib/v/tests/known_errors/known_errors_test.v
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
import os
|
||||||
|
|
||||||
|
const vexe = @VEXE
|
||||||
|
|
||||||
|
const vroot = os.dir(vexe)
|
||||||
|
|
||||||
|
const testdata_folder = 'vlib/v/tests/known_errors/testdata'
|
||||||
|
|
||||||
|
fn test_known_errors_testdata_folder_exists() ? {
|
||||||
|
os.chdir(vroot) ?
|
||||||
|
assert os.is_dir(testdata_folder)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn test_known_failures_are_still_failures() ? {
|
||||||
|
mut oks := []string{}
|
||||||
|
mut files := os.walk_ext(testdata_folder, '.v')
|
||||||
|
files << os.walk_ext(testdata_folder, '.vv')
|
||||||
|
for f in files {
|
||||||
|
cmd := '${os.quoted_path(vexe)} ${os.quoted_path(f)}'
|
||||||
|
println('known compilation failure: $cmd')
|
||||||
|
res := os.execute(cmd)
|
||||||
|
if res.exit_code == 0 {
|
||||||
|
oks << cmd
|
||||||
|
println(' unexpectedly COMPILED: $cmd')
|
||||||
|
} else {
|
||||||
|
assert true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
println('Summary: $files.len files, $oks.len unexpectedly succeeded.')
|
||||||
|
if oks.len != 0 {
|
||||||
|
for cmd in oks {
|
||||||
|
println(' expected to fail, but SUCCEEDED command: $cmd')
|
||||||
|
}
|
||||||
|
assert false
|
||||||
|
}
|
||||||
|
}
|
18
vlib/v/tests/known_errors/testdata/dereference_mut_interface_in_loop.vv
vendored
Normal file
18
vlib/v/tests/known_errors/testdata/dereference_mut_interface_in_loop.vv
vendored
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
module main
|
||||||
|
|
||||||
|
import rand
|
||||||
|
import rand.wyrand
|
||||||
|
import rand.splitmix64
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
mut wyrand_rng := &rand.PRNG(&wyrand.WyRandRNG{})
|
||||||
|
mut splitmix_rng := &rand.PRNG(&splitmix64.SplitMix64RNG{})
|
||||||
|
|
||||||
|
mut generators := [wyrand_rng, splitmix_rng]
|
||||||
|
for mut rng in generators {
|
||||||
|
seed_len := rng.block_size() / 32
|
||||||
|
// NB: `seed_len := (*rng).block_size() / 32` does compile
|
||||||
|
dump(seed_len)
|
||||||
|
println(rng.string(15))
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user