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

tests: extract slow tests (prod, valgrind, inout, repl etc), from vlib/v/tests/ to vlib/v/slow_tests/ (#16892)

This commit is contained in:
Delyan Angelov 2023-01-09 23:47:03 +02:00 committed by GitHub
parent 33a99fe833
commit 6a32c81070
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
251 changed files with 291 additions and 270 deletions

View File

@ -51,7 +51,7 @@ This folder contains _test.v files, testing the different features of the V
compiler. Each of them will be compiled, and all the features in them have
to work (verified by assertions).
## `v vlib/v/tests/inout/compiler_test.v`
## `v vlib/v/slow_tests/inout/compiler_test.v`
This is a *test runner*, that checks whether the output of running a V program,
matches an expected .out file. You can also check for code that does panic
@ -59,7 +59,7 @@ using this test runner - just paste the start of the `panic()` output in the
corresponding .out file.
NB: these tests, expect to find a pair of `.vv` and `.out` files, in the folder:
vlib/v/tests/inout
vlib/v/slow_tests/inout
The test runner will run each `.vv` file, and will check that its output, matches
the contents of the `.out` file with the same base name. This is particularly useful
@ -77,7 +77,7 @@ 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 -` .
## `v vlib/v/tests/run_project_folders_test.v`
## `v vlib/v/slow_tests/run_project_folders_test.v`
This *test runner*, checks whether whole project folders, can be compiled, and run.
NB: Each project in these folders, should finish with an exit code of 0,

View File

@ -15,10 +15,10 @@ const vet_known_failing_windows = [
'vlib/v/gen/js/tests/testdata/compare_ints.v',
'vlib/v/gen/js/tests/testdata/hw.v',
'vlib/v/gen/js/tests/testdata/string_methods.v',
'vlib/v/tests/inout/vscript_using_generics_in_os.vsh',
'vlib/v/slow_tests/inout/vscript_using_generics_in_os.vsh',
'vlib/v/tests/project_with_modules_having_submodules/bin/main.vsh',
'vlib/v/tests/valgrind/simple_interpolation_script_mode.v',
'vlib/v/tests/valgrind/simple_interpolation_script_mode_more_scopes.v',
'vlib/v/slow_tests/valgrind/simple_interpolation_script_mode.v',
'vlib/v/slow_tests/valgrind/simple_interpolation_script_mode_more_scopes.v',
]
const vet_folders = [

View File

@ -80,7 +80,7 @@ const (
'vlib/v/gen/native/macho_test.v',
'vlib/v/gen/native/tests/native_test.v',
'vlib/v/pkgconfig/pkgconfig_test.v',
'vlib/v/tests/inout/compiler_test.v',
'vlib/v/slow_tests/inout/compiler_test.v',
'vlib/x/json2/json2_test.v',
]
skip_test_files = [
@ -102,11 +102,11 @@ const (
'vlib/v/live/live_test.v',
'vlib/v/parser/v_parser_test.v',
'vlib/v/scanner/scanner_test.v',
'vlib/v/tests/inout/compiler_test.v',
'vlib/v/tests/prod_test.v',
'vlib/v/tests/profile/profile_test.v',
'vlib/v/tests/repl/repl_test.v',
'vlib/v/tests/valgrind/valgrind_test.v',
'vlib/v/slow_tests/inout/compiler_test.v',
'vlib/v/slow_tests/prod_test.v',
'vlib/v/slow_tests/profile/profile_test.v',
'vlib/v/slow_tests/repl/repl_test.v',
'vlib/v/slow_tests/valgrind/valgrind_test.v',
]
skip_with_fsanitize_memory = [
'vlib/net/tcp_simple_client_server_test.v',
@ -159,7 +159,7 @@ const (
'do_not_remove',
]
skip_on_musl = [
'vlib/v/tests/profile/profile_test.v',
'vlib/v/slow_tests/profile/profile_test.v',
'vlib/gg/draw_fns_api_test.v',
'vlib/v/tests/skip_unused/gg_code.vv',
]

View File

@ -87,7 +87,7 @@ fn main() {
// vet_file vets the file read from `path`.
fn (mut vt Vet) vet_file(path string) {
if path.contains('/tests/') && !vt.opt.is_force {
if !vt.opt.is_force && (path.contains('/tests/') || path.contains('/slow_tests/')) {
// skip all /tests/ files, since usually their content is not
// important enough to be documented/vetted, and they may even
// contain intentionally invalid code.

View File

@ -3,6 +3,7 @@ builtin/linux_bare
builtin/wasm_bare
os/bare
v/tests/
v/slow_tests/
v/checker/tests/
v/gen/js/tests/
v/gen/native/tests/

View File

@ -14,7 +14,8 @@ const (
addr_ip_any = [4]u8{init: u8(0)}
)
fn new_ip6(port u16, addr [16]u8) Addr {
// new_ip6 creates a new Addr from the IP6 address family, based on the given port and addr
pub fn new_ip6(port u16, addr [16]u8) Addr {
a := Addr{
f: u8(AddrFamily.ip6)
addr: AddrData{
@ -29,7 +30,8 @@ fn new_ip6(port u16, addr [16]u8) Addr {
return a
}
fn new_ip(port u16, addr [4]u8) Addr {
// new_ip creates a new Addr from the IPv4 address family, based on the given port and addr
pub fn new_ip(port u16, addr [4]u8) Addr {
a := Addr{
f: u8(AddrFamily.ip)
addr: AddrData{
@ -56,6 +58,7 @@ fn temp_unix() !Addr {
return addrs[0]
}
// family returns the family/kind of the given address `a`
pub fn (a Addr) family() AddrFamily {
return unsafe { AddrFamily(a.f) }
}
@ -65,7 +68,8 @@ const (
max_ip6_len = 46
)
fn (a Ip) str() string {
// str returns a string representation of `a`
pub fn (a Ip) str() string {
buf := [net.max_ip_len]char{}
res := &char(C.inet_ntop(.ip, &a.addr, &buf[0], buf.len))
@ -80,7 +84,8 @@ fn (a Ip) str() string {
return '${saddr}:${port}'
}
fn (a Ip6) str() string {
// str returns a string representation of `a`
pub fn (a Ip6) str() string {
buf := [net.max_ip6_len]char{}
res := &char(C.inet_ntop(.ip6, &a.addr, &buf[0], buf.len))
@ -97,7 +102,8 @@ fn (a Ip6) str() string {
const aoffset = __offsetof(Addr, addr)
fn (a Addr) len() u32 {
// len returns the length in bytes of the address `a`, depending on its family
pub fn (a Addr) len() u32 {
match a.family() {
.ip {
return sizeof(Ip) + net.aoffset
@ -114,6 +120,7 @@ fn (a Addr) len() u32 {
}
}
// resolve_addrs converts the given `addr`, `family` and `@type` to a list of addresses
pub fn resolve_addrs(addr string, family AddrFamily, @type SocketType) ![]Addr {
match family {
.ip, .ip6, .unspec {
@ -143,6 +150,7 @@ pub fn resolve_addrs(addr string, family AddrFamily, @type SocketType) ![]Addr {
}
}
// resolve_addrs converts the given `addr` and `@type` to a list of addresses
pub fn resolve_addrs_fuzzy(addr string, @type SocketType) ![]Addr {
if addr.len == 0 {
return error('none')
@ -160,6 +168,7 @@ pub fn resolve_addrs_fuzzy(addr string, @type SocketType) ![]Addr {
return resolve_addrs(addr, .unix, @type)
}
// resolve_ipaddrs converts the given `addr`, `family` and `typ` to a list of addresses
pub fn resolve_ipaddrs(addr string, family AddrFamily, typ SocketType) ![]Addr {
address, port := split_address(addr)!
@ -238,7 +247,8 @@ pub fn resolve_ipaddrs(addr string, family AddrFamily, typ SocketType) ![]Addr {
return addresses
}
fn (a Addr) str() string {
// str returns a string representation of the address `a`
pub fn (a Addr) str() string {
match unsafe { AddrFamily(a.f) } {
.ip {
unsafe {
@ -261,6 +271,7 @@ fn (a Addr) str() string {
}
}
// addr_from_socket_handle returns an address, based on the given integer socket `handle`
pub fn addr_from_socket_handle(handle int) Addr {
addr := Addr{
addr: AddrData{

View File

@ -29,7 +29,7 @@ fn test_header_adds_multiple() {
fn test_header_get() {
mut h := new_header(key: .dnt, value: 'one')
h.add_custom('dnt', 'two')?
h.add_custom('dnt', 'two')!
dnt := h.get_custom('dnt') or { '' }
exact := h.get_custom('dnt', exact: true) or { '' }
assert dnt == 'one'
@ -42,7 +42,7 @@ fn test_header_set() {
value: 'two'
)
assert h.values(.dnt) == ['one', 'two']
h.set_custom('DNT', 'three')?
h.set_custom('DNT', 'three')!
assert h.values(.dnt) == ['three']
}
@ -67,8 +67,8 @@ fn test_header_delete_not_existing() {
fn test_custom_header() {
mut h := new_header()
h.add_custom('AbC', 'dEf')?
h.add_custom('aBc', 'GhI')?
h.add_custom('AbC', 'dEf')!
h.add_custom('aBc', 'GhI')!
assert h.custom_values('AbC', exact: true) == ['dEf']
assert h.custom_values('aBc', exact: true) == ['GhI']
assert h.custom_values('ABC') == ['dEf', 'GhI']
@ -77,13 +77,13 @@ fn test_custom_header() {
h.delete_custom('AbC')
h.delete_custom('aBc')
h.add_custom('abc', 'def')?
h.add_custom('abc', 'def')!
assert h.custom_values('abc') == ['def']
assert h.custom_values('ABC') == ['def']
assert h.keys() == ['abc']
h.delete_custom('abc')
h.add_custom('accEPT', '*/*')?
h.add_custom('accEPT', '*/*')!
assert h.custom_values('ACCept') == ['*/*']
assert h.values(.accept) == ['*/*']
assert h.keys() == ['accEPT']
@ -91,7 +91,7 @@ fn test_custom_header() {
fn test_contains_custom() {
mut h := new_header()
h.add_custom('Hello', 'world')?
h.add_custom('Hello', 'world')!
assert h.contains_custom('hello')
assert h.contains_custom('HELLO')
assert h.contains_custom('Hello', exact: true)
@ -101,7 +101,7 @@ fn test_contains_custom() {
fn test_get_custom() {
mut h := new_header()
h.add_custom('Hello', 'world')?
h.add_custom('Hello', 'world')!
assert h.get_custom('hello')? == 'world'
assert h.get_custom('HELLO')? == 'world'
assert h.get_custom('Hello', exact: true)? == 'world'
@ -117,15 +117,15 @@ fn test_get_custom() {
fn test_starting_with() {
mut h := new_header()
h.add_custom('Hello-1', 'world')?
h.add_custom('Hello-21', 'world')?
h.add_custom('Hello-1', 'world')!
h.add_custom('Hello-21', 'world')!
assert h.starting_with('Hello-')? == 'Hello-1'
assert h.starting_with('Hello-2')? == 'Hello-21'
}
fn test_custom_values() {
mut h := new_header()
h.add_custom('Hello', 'world')?
h.add_custom('Hello', 'world')!
assert h.custom_values('hello') == ['world']
assert h.custom_values('HELLO') == ['world']
assert h.custom_values('Hello', exact: true) == ['world']
@ -135,7 +135,7 @@ fn test_custom_values() {
fn test_coerce() {
mut h := new_header()
h.add_custom('accept', 'foo')?
h.add_custom('accept', 'foo')!
h.add(.accept, 'bar')
assert h.values(.accept) == ['foo', 'bar']
assert h.keys().len == 2
@ -147,7 +147,7 @@ fn test_coerce() {
fn test_coerce_canonicalize() {
mut h := new_header()
h.add_custom('accept', 'foo')?
h.add_custom('accept', 'foo')!
h.add(.accept, 'bar')
assert h.values(.accept) == ['foo', 'bar']
assert h.keys().len == 2
@ -159,9 +159,9 @@ fn test_coerce_canonicalize() {
fn test_coerce_custom() {
mut h := new_header()
h.add_custom('Hello', 'foo')?
h.add_custom('hello', 'bar')?
h.add_custom('HELLO', 'baz')?
h.add_custom('Hello', 'foo')!
h.add_custom('hello', 'bar')!
h.add_custom('HELLO', 'baz')!
assert h.custom_values('hello') == ['foo', 'bar', 'baz']
assert h.keys().len == 3
@ -172,8 +172,8 @@ fn test_coerce_custom() {
fn test_coerce_canonicalize_custom() {
mut h := new_header()
h.add_custom('foo-BAR', 'foo')?
h.add_custom('FOO-bar', 'bar')?
h.add_custom('foo-BAR', 'foo')!
h.add_custom('FOO-bar', 'bar')!
assert h.custom_values('foo-bar') == ['foo', 'bar']
assert h.keys().len == 2
@ -184,8 +184,8 @@ fn test_coerce_canonicalize_custom() {
fn test_render_version() {
mut h := new_header()
h.add_custom('accept', 'foo')?
h.add_custom('Accept', 'bar')?
h.add_custom('accept', 'foo')!
h.add_custom('Accept', 'bar')!
h.add(.accept, 'baz')
s1_0 := h.render(version: .v1_0)
@ -206,8 +206,8 @@ fn test_render_version() {
fn test_render_coerce() {
mut h := new_header()
h.add_custom('accept', 'foo')?
h.add_custom('Accept', 'bar')?
h.add_custom('accept', 'foo')!
h.add_custom('Accept', 'bar')!
h.add(.accept, 'baz')
h.add(.host, 'host')
@ -232,8 +232,8 @@ fn test_render_coerce() {
fn test_render_canonicalize() {
mut h := new_header()
h.add_custom('accept', 'foo')?
h.add_custom('Accept', 'bar')?
h.add_custom('accept', 'foo')!
h.add_custom('Accept', 'bar')!
h.add(.accept, 'baz')
h.add(.host, 'host')
@ -258,8 +258,8 @@ fn test_render_canonicalize() {
fn test_render_coerce_canonicalize() {
mut h := new_header()
h.add_custom('accept', 'foo')?
h.add_custom('Accept', 'bar')?
h.add_custom('accept', 'foo')!
h.add_custom('Accept', 'bar')!
h.add(.accept, 'baz')
h.add(.host, 'host')
@ -285,8 +285,8 @@ fn test_render_coerce_canonicalize() {
fn test_str() {
mut h := new_header()
h.add(.accept, 'text/html')
h.add_custom('Accept', 'image/jpeg')?
h.add_custom('X-custom', 'Hello')?
h.add_custom('Accept', 'image/jpeg')!
h.add_custom('X-custom', 'Hello')!
// key order is not guaranteed
assert h.str() == 'Accept: text/html\r\nAccept: image/jpeg\r\nX-custom: Hello\r\n'
@ -308,7 +308,7 @@ fn test_custom_header_from_map() {
h := new_custom_header_from_map({
'Server': 'VWeb'
'foo': 'bar'
})?
})!
assert h.contains_custom('server')
assert h.contains_custom('foo')
assert h.get_custom('server') or { '' } == 'VWeb'
@ -323,7 +323,7 @@ fn test_header_join() {
h2 := new_custom_header_from_map({
'Server': 'VWeb'
'foo': 'bar'
})?
})!
h3 := h1.join(h2)
// h1 is unchanged
assert h1.contains(.accept)

View File

@ -30,17 +30,17 @@ fn one_shot_echo_server(mut l net.TcpListener, ch_started chan int) ? {
new_conn.close() or {}
}
fn echo(address string) ? {
mut c := net.dial_tcp(address)?
fn echo(address string) ! {
mut c := net.dial_tcp(address)!
defer {
c.close() or {}
}
println('local: ' + c.addr()?.str())
println(' peer: ' + c.peer_addr()?.str())
println('local: ' + c.addr()!.str())
println(' peer: ' + c.peer_addr()!.str())
data := 'Hello from vlib/net!'
c.write_string(data)?
c.write_string(data)!
mut buf := []u8{len: 4096}
read := c.read(mut buf) or { panic(err) }
assert read == data.len
@ -105,6 +105,6 @@ fn test_bind() {
$if !network ? {
return
}
mut conn := net.dial_tcp_with_bind('vlang.io:80', '127.0.0.1:0')?
conn.close()?
mut conn := net.dial_tcp_with_bind('vlang.io:80', '127.0.0.1:0')!
conn.close()!
}

View File

@ -36,8 +36,8 @@ fn test_escape_unescape() {
}
fn test_parse_query() {
q1 := urllib.parse_query('format=%22%25l%3A+%25c+%25t%22')?
q2 := urllib.parse_query('format="%l:+%c+%t"')?
q1 := urllib.parse_query('format=%22%25l%3A+%25c+%25t%22')!
q2 := urllib.parse_query('format="%l:+%c+%t"')!
// dump(q1)
// dump(q2)
assert q1.get('format') == '"%l: %c %t"'
@ -45,21 +45,21 @@ fn test_parse_query() {
}
fn test_parse_query_orders() {
query_one := urllib.parse_query('https://someapi.com/endpoint?gamma=zalibaba&tau=1&alpha=alibaba&signature=alibaba123')?
query_one := urllib.parse_query('https://someapi.com/endpoint?gamma=zalibaba&tau=1&alpha=alibaba&signature=alibaba123')!
qvalues := query_one.values()
assert qvalues == ['zalibaba', '1', 'alibaba', 'alibaba123']
}
fn test_parse_missing_host() {
// issue #10311
url := urllib.parse('http:///')?
url := urllib.parse('http:///')!
assert url.str() == 'http://///'
}
// testing the case where the key as a null value
// e.g ?key=
fn test_parse_none_value() {
query_one := urllib.parse_query('gamma=zalibaba&tau=1&alpha=alibaba&signature=')?
query_one := urllib.parse_query('gamma=zalibaba&tau=1&alpha=alibaba&signature=')!
qvalues := query_one.values()
qvalues_map := query_one.to_map()
assert qvalues == ['zalibaba', '1', 'alibaba']
@ -75,7 +75,7 @@ fn test_parse_none_value() {
// e.g https://www.vlang.dev?alibaba
fn test_parse_empty_query_one() {
query_str := 'alibaba'
query_one := urllib.parse_query(query_str)?
query_one := urllib.parse_query(query_str)!
qvalues := query_one.values()
qvalues_map := query_one.to_map()
query_encode := query_one.encode()
@ -90,7 +90,7 @@ fn test_parse_empty_query_one() {
// e.g https://www.vlang.dev?
fn test_parse_empty_query_two() {
query_str := ''
query_one := urllib.parse_query(query_str)?
query_one := urllib.parse_query(query_str)!
qvalues := query_one.values()
qvalues_map := query_one.to_map()
query_encode := query_one.encode()

View File

@ -1,4 +1,4 @@
import v.tests.assembly.util
import v.slow_tests.assembly.util
fn test_inline_asm() {
a, mut b := i64(10), i64(0)

View File

@ -0,0 +1,20 @@
struct Struct {
struct_name string
}
struct Interface {
interface_name string
}
type Info = Interface | Struct
fn main() {
mut info := Info{}
info = Struct{
struct_name: 'Foo'
}
s := info as Struct
println(s.struct_name)
i := info as Interface // wrong
println(i.interface_name)
}

View File

@ -15,9 +15,9 @@ fn main() {
t := Test1{}
t.test(fn [t] (t1 Test) {
println('$t, $t1')
println('${t}, ${t1}')
t.test(fn [t] (t2 Test) {
println('$t, $t2')
println('${t}, ${t2}')
})
})
}

View File

@ -20,7 +20,7 @@ fn test_all() {
vroot := os.dir(vexe)
os.chdir(vroot) or {}
diff_cmd := diff.find_working_diff_command() or { '' }
dir := 'vlib/v/tests/inout'
dir := 'vlib/v/slow_tests/inout'
files := os.ls(dir) or { panic(err) }
tests := files.filter(it.ends_with('.vv') || it.ends_with('.vsh'))
if tests.len == 0 {

View File

@ -0,0 +1,5 @@
$if vinix {
println('vinix')
} $else {
println('others')
}

View File

@ -0,0 +1,32 @@
[vlib/v/slow_tests/inout/dump_expression.vv:5] 1: 1
[vlib/v/slow_tests/inout/dump_expression.vv:10] 'a': a
[vlib/v/slow_tests/inout/dump_expression.vv:34] a: Aa{
log: &log.Logger(log.Log{
level: disabled
output_label: ''
ofile: os.File{
cfile: 0
fd: 0
is_opened: false
}
output_target: console
output_file_name: ''
})
}
[vlib/v/slow_tests/inout/dump_expression.vv:35] p: Point{
x: 1
y: 2
z: 3
}
[vlib/v/slow_tests/inout/dump_expression.vv:36] p_mut: Point{
x: 1
y: 2
z: 3
}
[vlib/v/slow_tests/inout/dump_expression.vv:37] p_ptr: &Point{
x: 1
y: 2
z: 3
}
[vlib/v/slow_tests/inout/dump_expression.vv:48] os.file_name(vfile): dump_expression.vv
[vlib/v/slow_tests/inout/dump_expression.vv:51] f.read(mut buf): 10

View File

@ -27,7 +27,9 @@ fn dump_of_struct() {
mut p_mut := Point{1, 2, 3}
p_ptr := &Point{1, 2, 3}
l := &log.Log{}
a := Aa{log:l}
a := Aa{
log: l
}
dump(a)
mut x1 := dump(p)

View File

@ -0,0 +1 @@
[vlib/v/slow_tests/inout/dump_generic_fn_mut_arg.vv:11] t: &Reptile{}

View File

@ -0,0 +1,6 @@
[vlib/v/slow_tests/inout/dump_generic_interface_ref_arg.vv:30] mi.in_(): 1.0
[vlib/v/slow_tests/inout/dump_generic_interface_ref_arg.vv:31] mi.out(): 2.0
[vlib/v/slow_tests/inout/dump_generic_interface_ref_arg.vv:36] in_put.in_(): 1.0
[vlib/v/slow_tests/inout/dump_generic_interface_ref_arg.vv:37] in_put.out(): 2.0
[vlib/v/slow_tests/inout/dump_generic_interface_ref_arg.vv:39] in_put.in_(): 1.0
[vlib/v/slow_tests/inout/dump_generic_interface_ref_arg.vv:40] in_put.out(): 2.0

View File

@ -0,0 +1 @@
[vlib/v/slow_tests/inout/dump_match_expr.vv:3] ast.MatchExpr: 1

View File

@ -0,0 +1,4 @@
[vlib/v/slow_tests/inout/dump_multiple_ptr.vv:3] i: 42
[vlib/v/slow_tests/inout/dump_multiple_ptr.vv:5] ir: &42
[vlib/v/slow_tests/inout/dump_multiple_ptr.vv:7] irr: &&42
[vlib/v/slow_tests/inout/dump_multiple_ptr.vv:9] irrr: &&&42

View File

@ -0,0 +1,23 @@
[vlib/v/slow_tests/inout/dump_nested_generic_fn_call_ref_arg.vv:19] '${T.name} $input': int 1
[vlib/v/slow_tests/inout/dump_nested_generic_fn_call_ref_arg.vv:26] '${T.name} $input': int 1
[vlib/v/slow_tests/inout/dump_nested_generic_fn_call_ref_arg.vv:36] next(1): 0.0
[vlib/v/slow_tests/inout/dump_nested_generic_fn_call_ref_arg.vv:19] '${T.name} $input': f64 1.0
[vlib/v/slow_tests/inout/dump_nested_generic_fn_call_ref_arg.vv:26] '${T.name} $input': f64 1.0
[vlib/v/slow_tests/inout/dump_nested_generic_fn_call_ref_arg.vv:37] next(1.0): 64.0
[vlib/v/slow_tests/inout/dump_nested_generic_fn_call_ref_arg.vv:19] '${T.name} $input': f64 11.1
[vlib/v/slow_tests/inout/dump_nested_generic_fn_call_ref_arg.vv:26] '${T.name} $input': f64 11.1
[vlib/v/slow_tests/inout/dump_nested_generic_fn_call_ref_arg.vv:38] next(11.1): 64.0
[vlib/v/slow_tests/inout/dump_nested_generic_fn_call_ref_arg.vv:15] '${T.name} $input': Score Score{
ave: 23.4
}
[vlib/v/slow_tests/inout/dump_nested_generic_fn_call_ref_arg.vv:26] '${T.name} $input': Score Score{
ave: 23.4
}
[vlib/v/slow_tests/inout/dump_nested_generic_fn_call_ref_arg.vv:42] next(ave): 23.4
[vlib/v/slow_tests/inout/dump_nested_generic_fn_call_ref_arg.vv:15] '${T.name} $input': &Score &Score{
ave: 23.4
}
[vlib/v/slow_tests/inout/dump_nested_generic_fn_call_ref_arg.vv:26] '${T.name} $input': &Score &Score{
ave: 23.4
}
[vlib/v/slow_tests/inout/dump_nested_generic_fn_call_ref_arg.vv:43] next(&ave): 23.4

View File

@ -12,18 +12,18 @@ pub fn (s &Score) ave() f64 {
fn next[T](input T) f64 {
$if T is Average {
dump('${T.name} $input')
dump('${T.name} ${input}')
ret := next2[T](input)
return ret
} $else {
dump('${T.name} $input')
dump('${T.name} ${input}')
ret := next2[T](input)
return ret
}
}
fn next2[T](input T) f64 {
dump('${T.name} $input')
dump('${T.name} ${input}')
$if T is Average {
return input.ave()
} $else $if T is f64 {

View File

@ -0,0 +1,2 @@
[vlib/v/slow_tests/inout/dump_nil_voidptr.vv:11] a: &nil
[vlib/v/slow_tests/inout/dump_nil_voidptr.vv:13] a: &nil

View File

@ -3,7 +3,7 @@ fn get_nil() ?&int {
}
fn get_voidptr() ?&int {
return voidptr(0)
return unsafe { nil }
}
fn main() {

View File

@ -0,0 +1 @@
[vlib/v/slow_tests/inout/dump_none.vv:2] none: none

View File

@ -0,0 +1,3 @@
[vlib/v/slow_tests/inout/dump_shared_arg.vv:12] inst: &AtomicStruct{
a: 1
}

View File

@ -0,0 +1 @@
[vlib/v/slow_tests/inout/dump_sumtype_of_fntype.vv:10] main.MyFnSumtype(main.f): MyFnSumtype(fn (int) v.ast.Expr)

View File

@ -13,7 +13,9 @@ struct Aaa {
fn main() {
col := Color.green
a := Aaa{color: col}
a := Aaa{
color: col
}
orange := Color.orange
println(orange)
println(Color.yellow)

View File

@ -1,5 +1,5 @@
fn main() {
g := go print([1, 2, 3])
g := spawn print([1, 2, 3])
g.wait()
println('')
g2 := spawn print([4, 5, 6])

View File

@ -0,0 +1,7 @@
fn main() {
areas := ['game', 'web', 'tools', 'science', 'systems', 'embedded']
for i := 0; i < areas.len; i++ {
area := areas[i]
println('Hello, ${area} developers!')
}
}

View File

@ -2,4 +2,4 @@
module: main
function: buggy_function()
message: panicing...
file: vlib/v/tests/inout/panic_with_cg.vv:3
file: vlib/v/slow_tests/inout/panic_with_cg.vv:2

View File

@ -1,4 +1,3 @@
fn buggy_function() {
panic('panicing...')
}

View File

@ -8,5 +8,5 @@ fn main() {
b := Byte(`a`)
println(b)
println(b.str())
println('$b')
println('${b}')
}

View File

@ -5,6 +5,6 @@ fn main() {
fn proc[T](input T) {
$if T is &u8 {
println('T is $T.name')
println('T is ${T.name}')
}
}

View File

@ -13,7 +13,7 @@ fn abc(a Any) {
}
if a is map[string]string {
for k, v in a {
println('> k: $k | v: $v')
println('> k: ${k} | v: ${v}')
}
}
println(@FN)

Some files were not shown because too many files have changed in this diff Show More