1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00
v/vlib/compiler/tests/repl/repl_test.v

91 lines
2.5 KiB
V
Raw Normal View History

module main
2019-08-18 18:21:48 +03:00
import os
import compiler.tests.repl.runner
import benchmark
2020-01-20 19:06:36 +03:00
import sync
fn test_the_v_compiler_can_be_invoked() {
2020-03-03 17:02:50 +03:00
vexec := runner.full_path_to_v(5)
println('vexecutable: $vexec')
assert vexec != ''
2020-03-06 20:53:29 +03:00
vcmd := '"$vexec" -version'
2019-12-30 07:23:54 +03:00
r := os.exec(vcmd) or {
panic(err)
}
// println('"$vcmd" exit_code: $r.exit_code | output: $r.output')
assert r.exit_code == 0
vcmd_error := '"$vexec" nonexisting.v'
2019-12-30 07:23:54 +03:00
r_error := os.exec(vcmd_error) or {
panic(err)
}
// println('"$vcmd_error" exit_code: $r_error.exit_code | output: $r_error.output')
assert r_error.exit_code == 1
2020-03-06 20:53:29 +03:00
assert r_error.output == "V error: nonexisting.v doesn't exist"
}
2020-01-20 19:06:36 +03:00
struct Session {
mut:
options runner.RunnerOptions
bmark benchmark.Benchmark
2020-01-20 19:06:36 +03:00
}
fn test_all_v_repl_files() {
2020-01-20 19:06:36 +03:00
mut session := &Session{
options: runner.new_options()
bmark: benchmark.new_benchmark()
}
// warmup, and ensure that the vrepl is compiled in single threaded mode if it does not exist
2020-03-08 17:57:47 +03:00
runner.run_repl_file(os.cache_dir(), session.options.vexec, 'vlib/compiler/tests/repl/nothing.repl') or {
2020-01-20 19:06:36 +03:00
panic(err)
}
session.bmark.set_total_expected_steps(session.options.files.len)
mut pool_repl := sync.new_pool_processor({
callback: worker_repl
})
pool_repl.set_shared_context(session)
2020-01-20 19:06:36 +03:00
$if windows {
// See: https://docs.microsoft.com/en-us/cpp/build/reference/fs-force-synchronous-pdb-writes?view=vs-2019
pool_repl.set_max_jobs(1)
2020-01-20 19:06:36 +03:00
}
pool_repl.work_on_items(session.options.files)
2020-01-20 19:06:36 +03:00
session.bmark.stop()
println(session.bmark.total_message('total time spent running REPL files'))
}
fn worker_repl(p mut sync.PoolProcessor, idx int, thread_id int) voidptr {
2020-03-08 17:57:47 +03:00
cdir := os.cache_dir()
mut session := &Session(p.get_shared_context())
mut tls_bench := &benchmark.Benchmark(p.get_thread_context(idx))
if isnil(tls_bench) {
tls_bench = benchmark.new_benchmark_pointer()
tls_bench.set_total_expected_steps(session.bmark.nexpected_steps)
p.set_thread_context(idx, tls_bench)
}
tls_bench.cstep = idx
2020-03-09 04:23:34 +03:00
tfolder := os.join_path(cdir, 'vrepl_tests_$idx')
if os.is_dir(tfolder) {
os.rmdir_all(tfolder)
}
os.mkdir(tfolder) or {
panic(err)
}
file := p.get_string_item(idx)
session.bmark.step()
tls_bench.step()
fres := runner.run_repl_file(tfolder, session.options.vexec, file) or {
session.bmark.fail()
tls_bench.fail()
os.rmdir_all(tfolder)
eprintln(tls_bench.step_message_fail(err))
assert false
return sync.no_result
}
session.bmark.ok()
tls_bench.ok()
os.rmdir_all(tfolder)
println(tls_bench.step_message_ok(fres))
assert true
return sync.no_result
}