1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00
v/vlib/v/tests/generics_with_generics_fn_type_parameter_test.v
2021-05-11 11:14:58 +03:00

68 lines
1.2 KiB
V

fn neg(a int) int {
return -a
}
fn indirect_call(func fn (int) int, a int) int {
println(typeof(func).name)
assert typeof(func).name == typeof(neg).name
return func(a)
}
fn generic_call<T>(func T, a int) int {
println(T.name)
assert T.name == typeof(neg).name
return func(a)
}
fn generic_indirect_call<T>(func T, a int) int {
println(T.name)
assert T.name == typeof(neg).name
return indirect_call(func, a)
}
fn indirect_call_v2(func fn (int) int, a int) int {
f := func
assert typeof(f).name == typeof(neg).name
return f(a)
}
fn generic_call_v2<T>(func T, a int) int {
f := func
assert typeof(f).name == typeof(neg).name
return f(a)
}
fn generic_indirect_call_v2<T>(func T, a int) int {
f := func
assert typeof(f).name == typeof(neg).name
return indirect_call_v2(f, a)
}
fn test_generics_with_generics_fn_type_parameter() {
mut ret := 0
ret = indirect_call(neg, 2)
println(ret)
assert ret == -2
ret = generic_call(neg, 3)
println(ret)
assert ret == -3
ret = generic_indirect_call(neg, 4)
println(ret)
assert ret == -4
ret = indirect_call_v2(neg, 5)
println(ret)
assert ret == -5
ret = generic_call_v2(neg, 6)
println(ret)
assert ret == -6
ret = generic_indirect_call_v2(neg, 7)
println(ret)
assert ret == -7
}