v2 / vlib / v / tests / comptime / comptime_if_sizeof_test.v
131 lines · 127 sloc · 1.61 KB · 3eb04e346c20d116198dbf05590d487e94cbacfe
Raw
1struct MyStruct {
2 a u16
3 b u8
4 c u32
5 d u64
6}
7
8fn test_comptime_if_sizeof() {
9 f[u16]()
10 g[MyStruct]()
11
12 x := MyStruct{}
13 // TODO: support struct.fieldname
14 //$if sizeof(x.a) == 2 {
15 // assert true
16 //} $else {
17 // assert false
18 //}
19 //
20 //$if sizeof(x.d) != 2 {
21 // assert false
22 //} $else {
23 // assert true
24 //}
25}
26
27fn f[T]() {
28 $if sizeof(T) == 2 {
29 assert true
30 } $else {
31 assert false
32 }
33 $if sizeof(T) != 2 {
34 assert false
35 } $else {
36 assert true
37 }
38 $if sizeof(T) < 1 {
39 assert false
40 } $else {
41 assert true
42 }
43 $if sizeof(T) < 3 {
44 assert true
45 } $else {
46 assert false
47 }
48 $if sizeof(T) > 1 {
49 assert true
50 } $else {
51 assert false
52 }
53 $if sizeof(T) > 2 {
54 assert false
55 } $else {
56 assert true
57 }
58 $if sizeof(T) <= 2 {
59 assert true
60 } $else {
61 assert false
62 }
63 $if sizeof(T) <= 1 {
64 assert false
65 } $else {
66 assert true
67 }
68 $if sizeof(T) >= 2 {
69 assert true
70 } $else {
71 assert false
72 }
73 $if sizeof(T) >= 3 {
74 assert false
75 } $else {
76 assert true
77 }
78}
79
80fn g[T]() {
81 $if sizeof(T) == 16 {
82 assert true
83 } $else {
84 assert false
85 }
86 $if sizeof(T) != 16 {
87 assert false
88 } $else {
89 assert true
90 }
91 $if sizeof(T) < 17 {
92 assert true
93 } $else {
94 assert false
95 }
96 $if sizeof(T) < 15 {
97 assert false
98 } $else {
99 assert true
100 }
101 $if sizeof(T) > 15 {
102 assert true
103 } $else {
104 assert false
105 }
106 $if sizeof(T) > 16 {
107 assert false
108 } $else {
109 assert true
110 }
111 $if sizeof(T) <= 16 {
112 assert true
113 } $else {
114 assert false
115 }
116 $if sizeof(T) <= 15 {
117 assert false
118 } $else {
119 assert true
120 }
121 $if sizeof(T) >= 16 {
122 assert true
123 } $else {
124 assert false
125 }
126 $if sizeof(T) >= 17 {
127 assert false
128 } $else {
129 assert true
130 }
131}
132