v2 / vlib / v / tests / generics / generic_fn_infer_test.v
49 lines · 41 sloc · 766 bytes · 6488041a749df9762348d019c4223908c476f2e2
Raw
1fn call[T](v T) {
2}
3
4fn simple[T](p T) T {
5 return p
6}
7
8fn bit_not_op_generic[T]() T {
9 x := ~T(0)
10 return x
11}
12
13fn test_infer() {
14 call(3)
15 i := 4
16 r := simple(i)
17 assert r == 4
18}
19
20fn test_explicit_calls_should_also_work() {
21 call[int](2)
22 assert true
23 simple[int](5)
24 assert true
25 x := bit_not_op_generic[u32]()
26 assert x == u32(4294967295)
27}
28
29fn get_type_name[T](x T) string {
30 return T.name
31}
32
33fn test_literal() {
34 assert get_type_name(1) == 'int'
35 assert get_type_name(1.0) == 'f64'
36}
37
38//
39fn choose4[T](a T, b T, c T, d T) T {
40 // Note: a similar construct is used in prime31's via engine
41 return a
42}
43
44fn test_calling_generic_fn_with_many_params() {
45 x := choose4(1, 2, 3, 4)
46 assert x == 1
47 y := choose4[string]('abc', 'xyz', 'def', 'ghi')
48 assert y == 'abc'
49}
50