v2 / vlib / v / tests / aliases / alias_primitive_operator_overloading_test.v
70 lines · 53 sloc · 1.06 KB · 6488041a749df9762348d019c4223908c476f2e2
Raw
1type Alias = u8
2
3fn new_alias() Alias {
4 return 0
5}
6
7fn (a Alias) add(b Alias) Alias {
8 return new_alias()
9}
10
11fn (a Alias) mul(b Alias) Alias {
12 return new_alias()
13}
14
15fn (a Alias) + (b Alias) Alias {
16 return a.add(b)
17}
18
19fn (a Alias) * (b Alias) Alias {
20 return a.mul(b)
21}
22
23fn test_alias_primitive_operator_overloading() {
24 a := new_alias()
25 b := new_alias()
26
27 c := a + b
28 d := a.add(b)
29 assert typeof(c).name == 'Alias'
30 assert typeof(d).name == 'Alias'
31
32 e := a * b
33 f := a.mul(b)
34 assert typeof(e).name == 'Alias'
35 assert typeof(f).name == 'Alias'
36}
37
38type AF_ARRAY = voidptr
39
40fn (a AF_ARRAY) add(b AF_ARRAY) AF_ARRAY {
41 mut y := AF_ARRAY(0)
42 return y
43}
44
45fn (a AF_ARRAY) mul(b AF_ARRAY) AF_ARRAY {
46 mut y := AF_ARRAY(0)
47 return y
48}
49
50fn (a AF_ARRAY) + (b AF_ARRAY) AF_ARRAY {
51 return a.add(b)
52}
53
54fn (a AF_ARRAY) * (b AF_ARRAY) AF_ARRAY {
55 return a.mul(b)
56}
57
58fn test_alias_voidptr_operator_overloading() {
59 a := AF_ARRAY(0)
60 b := AF_ARRAY(0)
61
62 c := a + b
63 y := a * a
64
65 assert c == a.add(b)
66 assert y == a.mul(a)
67
68 assert typeof(c).name == 'AF_ARRAY'
69 assert typeof(y).name == 'AF_ARRAY'
70}
71