1project('comparison', 'c')
2
3# Compare equality of strings
4
5var1 = 'foo'
6var2 = 'bar'
7
8if var1 == var2
9  exe1 = executable('broken', 'broken.c')
10else
11  exe1 = executable('prog1', 'prog.c')
12endif
13
14if var1 == var1
15  exe2 = executable('prog2', 'prog.c')
16else
17  exe2 = executable('broken', 'broken.c')
18endif
19
20if var1 != var2
21  exe3 = executable('prog3', 'prog.c')
22else
23  exe3 = executable('broken', 'broken.c')
24endif
25
26if var1 != var1
27  exe4 = executable('broken', 'broken.c')
28else
29  exe4 = executable('prog4', 'prog.c')
30endif
31
32test('equalfalse', exe1)
33test('equaltrue', exe2)
34test('nequaltrue', exe3)
35test('nequalfalse', exe4)
36
37# Non-equality comparisons
38
39var3 = 3
40var4 = 4
41
42if var3 < var4
43  exe5 = executable('prog5', 'prog.c')
44else
45  exe5 = executable('broken', 'broken.c')
46endif
47
48if var3 < var3
49  exe6 = executable('broken', 'broken.c')
50else
51  exe6 = executable('prog6', 'prog.c')
52endif
53
54if var4 > var3
55  exe7 = executable('prog7', 'prog.c')
56else
57  exe7 = executable('broken', 'broken.c')
58endif
59
60if var3 > var3
61  exe8 = executable('broken', 'broken.c')
62else
63  exe8 = executable('prog8', 'prog.c')
64endif
65
66if var4 <= var3
67  exe9 = executable('broken', 'broken.c')
68else
69  exe9 = executable('prog9', 'prog.c')
70endif
71
72if var3 <= var3
73  exe10 = executable('prog10', 'prog.c')
74else
75  exe10 = executable('broken', 'broken.c')
76endif
77
78if var3 >= var4
79  exe11 = executable('broken', 'broken.c')
80else
81  exe11 = executable('prog11', 'prog.c')
82endif
83
84if var3 >= var3
85  exe12 = executable('prog12', 'prog.c')
86else
87  exe12 = executable('broken', 'broken.c')
88endif
89
90test('lttrue', exe5)
91test('ltfalse', exe6)
92test('gttrue', exe7)
93test('gtfalse', exe8)
94test('lefalse', exe9)
95test('letrue', exe10)
96test('gefalse', exe11)
97test('getrue', exe12)
98
99# Non-elementary type comparisons
100
101if exe1 == exe2
102  exe13 = executable('broken', 'broken.c')
103else
104  exe13 = executable('prog13', 'prog.c')
105endif
106
107if exe1 == exe1
108  exe14 = executable('prog14', 'prog.c')
109else
110  exe14 = executable('broken', 'broken.c')
111endif
112
113if exe1 != exe2
114  exe15 = executable('prog15', 'prog.c')
115else
116  exe15 = executable('broken', 'broken.c')
117endif
118
119if exe1 != exe1
120  exe16 = executable('broken', 'broken.c')
121else
122  exe16 = executable('prog16', 'prog.c')
123endif
124
125test('equalfalse', exe13)
126test('equaltrue', exe14)
127test('nequaltrue', exe15)
128test('nequalfalse', exe16)
129
130# Equality comparisons of different elementary types
131# (these all cause warnings currently, will become an error in future)
132
133assert([] != 'st', 'not equal')
134assert([] != 1, 'not equal')
135assert(2 != 'st', 'not equal')
136
137assert(not ([] == 'st'), 'not equal')
138assert(not ([] == 1), 'not equal')
139assert(not (2 == 'st'), 'not equal')
140
141# "in" and "not in" operators
142
143assert(1 in [1, 2], '''1 should be in [1, 2]''')
144assert(3 not in [1, 2], '''3 shouldn't be in [1, 2]''')
145assert(not (3 in [1, 2]), '''3 shouldn't be in [1, 2]''')
146
147assert('b' in ['a', 'b'], ''''b' should be in ['a', 'b']''')
148assert('c' not in ['a', 'b'], ''''c' shouldn't be in ['a', 'b']''')
149
150assert(exe1 in [exe1, exe2], ''''exe1 should be in [exe1, exe2]''')
151assert(exe3 not in [exe1, exe2], ''''exe3 shouldn't be in [exe1, exe2]''')
152
153assert('a' in {'a': 'b'}, '''1 should be in {'a': 'b'}''')
154assert('b' not in {'a': 'b'}, '''1 should be in {'a': 'b'}''')
155