v/vlib/v/tests/generic_fn_returning_type_w...

41 lines
789 B
V

struct BuildData {
x int
}
struct Tensor {
x int
}
fn new_tensor<T>(data BuildData) Tensor {
println('data: $data')
x := T(data.x)
println(x)
return Tensor{data.x}
}
fn test_generic_function_returning_type_starting_with_t() {
ft := new_tensor<f64>(x: 123)
println(ft)
assert typeof(ft).name == 'Tensor'
assert '$ft' == 'Tensor{\n x: 123\n}'
//
it := new_tensor<int>(x: 456)
println(it)
assert typeof(it).name == 'Tensor'
assert '$it' == 'Tensor{\n x: 456\n}'
}
// the following verifies that returning a generic type T
// works at the same time as returning a type starting with T
fn new_t<T>(o T) T {
x := T(o)
return x
}
fn test_generic_function_returning_t_type() {
f := new_t<f64>(1.23)
i := new_t<int>(456)
assert '$f' == '1.23'
assert '$i' == '456'
}