repl: add some timing statistics when running REPL test files
parent
d4a30d022b
commit
35f927e64e
|
@ -0,0 +1 @@
|
||||||
|
run
|
|
@ -1,24 +1,9 @@
|
||||||
import os
|
import os
|
||||||
|
import compiler.tests.repl.runner
|
||||||
fn full_path_to_v() string {
|
|
||||||
vname := if os.user_os() == 'windows' { 'v.exe' } else { 'v' }
|
|
||||||
vexec := os.dir(os.dir(os.dir(os.dir( os.executable() )))) + os.PathSeparator + vname
|
|
||||||
return vexec
|
|
||||||
}
|
|
||||||
|
|
||||||
fn test_the_v_compiler_can_be_invoked() {
|
fn test_the_v_compiler_can_be_invoked() {
|
||||||
vexec := full_path_to_v()
|
vexec := runner.full_path_to_v()
|
||||||
println('vexecutable: $vexec')
|
println('vexecutable: $vexec')
|
||||||
/*
|
|
||||||
args := os.args
|
|
||||||
vreal := os.realpath('v')
|
|
||||||
myself := os.realpath( os.executable() )
|
|
||||||
wd := os.getwd() + os.PathSeparator
|
|
||||||
println('args are: $args')
|
|
||||||
println('vreal : $vreal')
|
|
||||||
println('myself : $myself')
|
|
||||||
println('wd : $wd')
|
|
||||||
*/
|
|
||||||
assert vexec != ''
|
assert vexec != ''
|
||||||
|
|
||||||
vcmd := '$vexec --version'
|
vcmd := '$vexec --version'
|
||||||
|
@ -33,35 +18,19 @@ fn test_the_v_compiler_can_be_invoked() {
|
||||||
assert r_error.output == '`nonexisting.v` does not exist'
|
assert r_error.output == '`nonexisting.v` does not exist'
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_the_v_repl() {
|
fn test_all_v_repl_files() {
|
||||||
test_files := os.walk_ext('.', '.repl')
|
options := runner.new_options()
|
||||||
wd := os.getwd() + os.PathSeparator
|
global_start_time := runner.now()
|
||||||
vexec := full_path_to_v()
|
for file in options.files {
|
||||||
|
sticks := runner.now()
|
||||||
for file in test_files {
|
fres := runner.run_repl_file(options.wd, options.vexec, file) or {
|
||||||
fcontent := os.read_file(file) or {
|
|
||||||
assert false
|
assert false
|
||||||
break
|
eprintln( runner.tdiff_in_ms(err, sticks) )
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
assert true
|
||||||
|
println( runner.tdiff_in_ms(fres, sticks) )
|
||||||
|
}
|
||||||
|
println( runner.tdiff_in_ms('<=== total time spent running REPL files', global_start_time) )
|
||||||
}
|
}
|
||||||
content := fcontent.replace('\r', '')
|
|
||||||
input := content.all_before('===output===\n')
|
|
||||||
output := content.all_after('===output===\n')
|
|
||||||
|
|
||||||
input_temporary_filename := 'input_temporary_filename.txt'
|
|
||||||
os.write_file(input_temporary_filename, input)
|
|
||||||
defer { os.rm(input_temporary_filename) }
|
|
||||||
r := os.exec('$vexec runrepl < $input_temporary_filename') or {
|
|
||||||
assert false
|
|
||||||
break
|
|
||||||
}
|
|
||||||
result := r.output.replace('\r','').replace('>>> ', '').replace('>>>', '').replace('... ', '').all_after('Use Ctrl-C or `exit` to exit\n').replace(wd, '' )
|
|
||||||
assert result == output
|
|
||||||
if result != output {
|
|
||||||
println(file)
|
|
||||||
println('Got : |$result|')
|
|
||||||
println('Expected : |$output|')
|
|
||||||
} else {
|
|
||||||
println('Repl file $file is OK')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
module main
|
||||||
|
|
||||||
|
import compiler.tests.repl.runner
|
||||||
|
import log
|
||||||
|
|
||||||
|
fn main(){
|
||||||
|
logger := &log.Log{log.DEBUG, 'terminal'}
|
||||||
|
options := runner.new_options()
|
||||||
|
global_start_time := runner.now()
|
||||||
|
for file in options.files {
|
||||||
|
stime := runner.now()
|
||||||
|
fres := runner.run_repl_file(options.wd, options.vexec, file) or {
|
||||||
|
logger.error( runner.tdiff_in_ms(err, stime) )
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
logger.info( runner.tdiff_in_ms(fres, stime) )
|
||||||
|
}
|
||||||
|
logger.info( runner.tdiff_in_ms('<=== total time spent running REPL files', global_start_time) )
|
||||||
|
}
|
|
@ -0,0 +1,83 @@
|
||||||
|
module runner
|
||||||
|
|
||||||
|
import os
|
||||||
|
import time
|
||||||
|
|
||||||
|
struct RunnerOptions {
|
||||||
|
pub:
|
||||||
|
wd string
|
||||||
|
vexec string
|
||||||
|
files []string
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn full_path_to_v() string {
|
||||||
|
vname := if os.user_os() == 'windows' { 'v.exe' } else { 'v' }
|
||||||
|
vexec := os.dir(os.dir(os.dir(os.dir( os.executable() )))) + os.PathSeparator + vname
|
||||||
|
/*
|
||||||
|
args := os.args
|
||||||
|
vreal := os.realpath('v')
|
||||||
|
myself := os.realpath( os.executable() )
|
||||||
|
wd := os.getwd() + os.PathSeparator
|
||||||
|
println('args are: $args')
|
||||||
|
println('vreal : $vreal')
|
||||||
|
println('myself : $myself')
|
||||||
|
println('wd : $wd')
|
||||||
|
*/
|
||||||
|
return vexec
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn run_repl_file(wd string, vexec string, file string) string? {
|
||||||
|
fcontent := os.read_file(file) or { return error('Could not read file $file') }
|
||||||
|
content := fcontent.replace('\r', '')
|
||||||
|
input := content.all_before('===output===\n')
|
||||||
|
output := content.all_after('===output===\n')
|
||||||
|
|
||||||
|
input_temporary_filename := 'input_temporary_filename.txt'
|
||||||
|
os.write_file(input_temporary_filename, input)
|
||||||
|
|
||||||
|
r := os.exec('$vexec runrepl < $input_temporary_filename') or {
|
||||||
|
os.rm(input_temporary_filename)
|
||||||
|
return error('Could not execute "$vexec runrepl < $input_temporary_filename" ')
|
||||||
|
}
|
||||||
|
os.rm(input_temporary_filename)
|
||||||
|
|
||||||
|
result := r.output.replace('\r','').replace('>>> ', '').replace('>>>', '').replace('... ', '').all_after('Use Ctrl-C or `exit` to exit\n').replace(wd, '' )
|
||||||
|
|
||||||
|
if result != output {
|
||||||
|
return error('Difference found in REPL file: $file
|
||||||
|
====> Got :
|
||||||
|
|$result|
|
||||||
|
====> Expected :
|
||||||
|
|$output|
|
||||||
|
')
|
||||||
|
} else {
|
||||||
|
return 'Repl file $file is OK'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn new_options() RunnerOptions {
|
||||||
|
wd := os.getwd() + os.PathSeparator
|
||||||
|
vexec := full_path_to_v()
|
||||||
|
mut files := []string
|
||||||
|
if os.args.len > 1 {
|
||||||
|
files = os.args.right(1)
|
||||||
|
} else {
|
||||||
|
files = os.walk_ext('.', '.repl')
|
||||||
|
}
|
||||||
|
return RunnerOptions {
|
||||||
|
wd: wd
|
||||||
|
vexec: vexec
|
||||||
|
files: files
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn now() i64 {
|
||||||
|
return time.ticks()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn tdiff_in_ms(s string, sticks i64) string {
|
||||||
|
eticks := time.ticks()
|
||||||
|
tdiff := (eticks - sticks)
|
||||||
|
return '${tdiff:6d} ms | $s'
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
customer
|
Loading…
Reference in New Issue