project('comparison', 'c') # Compare equality of strings var1 = 'foo' var2 = 'bar' if var1 == var2 exe1 = executable('broken', 'broken.c') else exe1 = executable('prog1', 'prog.c') endif if var1 == var1 exe2 = executable('prog2', 'prog.c') else exe2 = executable('broken', 'broken.c') endif if var1 != var2 exe3 = executable('prog3', 'prog.c') else exe3 = executable('broken', 'broken.c') endif if var1 != var1 exe4 = executable('broken', 'broken.c') else exe4 = executable('prog4', 'prog.c') endif test('equalfalse', exe1) test('equaltrue', exe2) test('nequaltrue', exe3) test('nequalfalse', exe4) # Non-equality comparisons var3 = 3 var4 = 4 if var3 < var4 exe5 = executable('prog5', 'prog.c') else exe5 = executable('broken', 'broken.c') endif if var3 < var3 exe6 = executable('broken', 'broken.c') else exe6 = executable('prog6', 'prog.c') endif if var4 > var3 exe7 = executable('prog7', 'prog.c') else exe7 = executable('broken', 'broken.c') endif if var3 > var3 exe8 = executable('broken', 'broken.c') else exe8 = executable('prog8', 'prog.c') endif if var4 <= var3 exe9 = executable('broken', 'broken.c') else exe9 = executable('prog9', 'prog.c') endif if var3 <= var3 exe10 = executable('prog10', 'prog.c') else exe10 = executable('broken', 'broken.c') endif if var3 >= var4 exe11 = executable('broken', 'broken.c') else exe11 = executable('prog11', 'prog.c') endif if var3 >= var3 exe12 = executable('prog12', 'prog.c') else exe12 = executable('broken', 'broken.c') endif test('lttrue', exe5) test('ltfalse', exe6) test('gttrue', exe7) test('gtfalse', exe8) test('lefalse', exe9) test('letrue', exe10) test('gefalse', exe11) test('getrue', exe12) # Non-elementary type comparisons if exe1 == exe2 exe13 = executable('broken', 'broken.c') else exe13 = executable('prog13', 'prog.c') endif if exe1 == exe1 exe14 = executable('prog14', 'prog.c') else exe14 = executable('broken', 'broken.c') endif if exe1 != exe2 exe15 = executable('prog15', 'prog.c') else exe15 = executable('broken', 'broken.c') endif if exe1 != exe1 exe16 = executable('broken', 'broken.c') else exe16 = executable('prog16', 'prog.c') endif test('equalfalse', exe13) test('equaltrue', exe14) test('nequaltrue', exe15) test('nequalfalse', exe16) # Equality comparisons of different elementary types # (these all cause warnings currently, will become an error in future) assert([] != 'st', 'not equal') assert([] != 1, 'not equal') assert(2 != 'st', 'not equal') assert(not ([] == 'st'), 'not equal') assert(not ([] == 1), 'not equal') assert(not (2 == 'st'), 'not equal') # "in" and "not in" operators assert(1 in [1, 2], '''1 should be in [1, 2]''') assert(3 not in [1, 2], '''3 shouldn't be in [1, 2]''') assert(not (3 in [1, 2]), '''3 shouldn't be in [1, 2]''') assert('b' in ['a', 'b'], ''''b' should be in ['a', 'b']''') assert('c' not in ['a', 'b'], ''''c' shouldn't be in ['a', 'b']''') assert(exe1 in [exe1, exe2], ''''exe1 should be in [exe1, exe2]''') assert(exe3 not in [exe1, exe2], ''''exe3 shouldn't be in [exe1, exe2]''') assert('a' in {'a': 'b'}, '''1 should be in {'a': 'b'}''') assert('b' not in {'a': 'b'}, '''1 should be in {'a': 'b'}''')