1 // RUN: %check_clang_tidy %s readability-operators-representation %t -- -config="{CheckOptions: {\
2 // RUN: readability-operators-representation.BinaryOperators: '&&;&=;&;|;~;!;!=;||;|=;^;^=', \
3 // RUN: readability-operators-representation.OverloadedOperators: '&&;&=;&;|;~;!;!=;||;|=;^;^='}}" --
4 
testAllTokensToAlternative(int a,int b)5 void testAllTokensToAlternative(int a, int b) {
6   int value = 0;
7 
8   value = a or b;
9   // CHECK-MESSAGES: :[[@LINE-1]]:13: warning: 'or' is an alternative token spelling, consider using a traditional token '||' for consistency [readability-operators-representation]
10   // CHECK-FIXES: {{^  }}value = a || b;{{$}}
11 
12   value = a and b;
13   // CHECK-MESSAGES: :[[@LINE-1]]:13: warning: 'and' is an alternative token spelling, consider using a traditional token '&&' for consistency [readability-operators-representation]
14   // CHECK-FIXES: {{^  }}value = a && b;{{$}}
15 
16   value = a bitor b;
17   // CHECK-MESSAGES: :[[@LINE-1]]:13: warning: 'bitor' is an alternative token spelling, consider using a traditional token '|' for consistency [readability-operators-representation]
18   // CHECK-FIXES: {{^  }}value = a | b;{{$}}
19 
20   value = a bitand b;
21   // CHECK-MESSAGES: :[[@LINE-1]]:13: warning: 'bitand' is an alternative token spelling, consider using a traditional token '&' for consistency [readability-operators-representation]
22   // CHECK-FIXES: {{^  }}value = a & b;{{$}}
23 
24   value = not a;
25   // CHECK-MESSAGES: :[[@LINE-1]]:11: warning: 'not' is an alternative token spelling, consider using a traditional token '!' for consistency [readability-operators-representation]
26   // CHECK-FIXES: {{^  }}value = ! a;{{$}}
27 
28   value = a xor b;
29   // CHECK-MESSAGES: :[[@LINE-1]]:13: warning: 'xor' is an alternative token spelling, consider using a traditional token '^' for consistency [readability-operators-representation]
30   // CHECK-FIXES: {{^  }}value = a ^ b;{{$}}
31 
32   value = compl b;
33   // CHECK-MESSAGES: :[[@LINE-1]]:11: warning: 'compl' is an alternative token spelling, consider using a traditional token '~' for consistency [readability-operators-representation]
34   // CHECK-FIXES: {{^  }}value = ~ b;{{$}}
35 
36   value and_eq b;
37   // CHECK-MESSAGES: :[[@LINE-1]]:9: warning: 'and_eq' is an alternative token spelling, consider using a traditional token '&=' for consistency [readability-operators-representation]
38   // CHECK-FIXES: {{^  }}value &= b;{{$}}
39 
40   value or_eq b;
41   // CHECK-MESSAGES: :[[@LINE-1]]:9: warning: 'or_eq' is an alternative token spelling, consider using a traditional token '|=' for consistency [readability-operators-representation]
42   // CHECK-FIXES: {{^  }}value |= b;{{$}}
43 
44   value = a not_eq b;
45   // CHECK-MESSAGES: :[[@LINE-1]]:13: warning: 'not_eq' is an alternative token spelling, consider using a traditional token '!=' for consistency [readability-operators-representation]
46   // CHECK-FIXES: {{^  }}value = a != b;{{$}}
47 
48   value xor_eq a;
49   // CHECK-MESSAGES: :[[@LINE-1]]:9: warning: 'xor_eq' is an alternative token spelling, consider using a traditional token '^=' for consistency [readability-operators-representation]
50   // CHECK-FIXES: {{^  }}value ^= a;{{$}}
51 }
52 
53 struct Class {
54   bool operator!() const;
55   Class operator~() const;
56   bool operator&&(const Class&) const;
57   Class operator&(const Class&) const;
58   bool operator||(const Class&) const;
59   Class operator|(const Class&) const;
60   Class operator^(const Class&) const;
61   Class& operator&=(const Class&) const;
62   Class& operator|=(const Class&) const;
63   Class& operator^=(const Class&) const;
64   bool operator!=(const Class&) const;
65 };
66 
testAllTokensToAlternative(Class a,Class b)67 void testAllTokensToAlternative(Class a, Class b) {
68   int value = 0;
69   Class clval;
70 
71   value = a or b;
72   // CHECK-MESSAGES: :[[@LINE-1]]:13: warning: 'or' is an alternative token spelling, consider using a traditional token '||' for consistency [readability-operators-representation]
73   // CHECK-FIXES: {{^  }}value = a || b;{{$}}
74 
75   value = a and b;
76   // CHECK-MESSAGES: :[[@LINE-1]]:13: warning: 'and' is an alternative token spelling, consider using a traditional token '&&' for consistency [readability-operators-representation]
77   // CHECK-FIXES: {{^  }}value = a && b;{{$}}
78 
79   clval = a bitor b;
80   // CHECK-MESSAGES: :[[@LINE-1]]:13: warning: 'bitor' is an alternative token spelling, consider using a traditional token '|' for consistency [readability-operators-representation]
81   // CHECK-FIXES: {{^  }}clval = a | b;{{$}}
82 
83   clval = a bitand b;
84   // CHECK-MESSAGES: :[[@LINE-1]]:13: warning: 'bitand' is an alternative token spelling, consider using a traditional token '&' for consistency [readability-operators-representation]
85   // CHECK-FIXES: {{^  }}clval = a & b;{{$}}
86 
87   value = not a;
88   // CHECK-MESSAGES: :[[@LINE-1]]:11: warning: 'not' is an alternative token spelling, consider using a traditional token '!' for consistency [readability-operators-representation]
89   // CHECK-FIXES: {{^  }}value = ! a;{{$}}
90 
91   clval = a xor b;
92   // CHECK-MESSAGES: :[[@LINE-1]]:13: warning: 'xor' is an alternative token spelling, consider using a traditional token '^' for consistency [readability-operators-representation]
93   // CHECK-FIXES: {{^  }}clval = a ^ b;{{$}}
94 
95   clval = compl b;
96   // CHECK-MESSAGES: :[[@LINE-1]]:11: warning: 'compl' is an alternative token spelling, consider using a traditional token '~' for consistency [readability-operators-representation]
97   // CHECK-FIXES: {{^  }}clval = ~ b;{{$}}
98 
99   clval and_eq b;
100   // CHECK-MESSAGES: :[[@LINE-1]]:9: warning: 'and_eq' is an alternative token spelling, consider using a traditional token '&=' for consistency [readability-operators-representation]
101   // CHECK-FIXES: {{^  }}clval &= b;{{$}}
102 
103   clval or_eq b;
104   // CHECK-MESSAGES: :[[@LINE-1]]:9: warning: 'or_eq' is an alternative token spelling, consider using a traditional token '|=' for consistency [readability-operators-representation]
105   // CHECK-FIXES: {{^  }}clval |= b;{{$}}
106 
107   value = a not_eq b;
108   // CHECK-MESSAGES: :[[@LINE-1]]:13: warning: 'not_eq' is an alternative token spelling, consider using a traditional token '!=' for consistency [readability-operators-representation]
109   // CHECK-FIXES: {{^  }}value = a != b;{{$}}
110 
111   clval xor_eq a;
112   // CHECK-MESSAGES: :[[@LINE-1]]:9: warning: 'xor_eq' is an alternative token spelling, consider using a traditional token '^=' for consistency [readability-operators-representation]
113   // CHECK-FIXES: {{^  }}clval ^= a;{{$}}
114 }
115 
116 struct ClassO {};
117 
118 ClassO& operator&=(ClassO&, const ClassO&);
119 ClassO& operator|=(ClassO&, const ClassO&);
120 ClassO& operator^=(ClassO&, const ClassO&);
121 bool operator!=(const ClassO&, const ClassO&);
122 bool operator&&(const ClassO&, const ClassO&);
123 bool operator||(const ClassO&, const ClassO&);
124 bool operator!(const ClassO&);
125 ClassO operator&(const ClassO&, const ClassO&);
126 ClassO operator|(const ClassO&, const ClassO&);
127 ClassO operator^(const ClassO&, const ClassO&);
128 ClassO operator~(const ClassO&);
129 
testAllTokensToAlternative(ClassO a,ClassO b)130 void testAllTokensToAlternative(ClassO a, ClassO b) {
131   int value = 0;
132   ClassO clval;
133 
134   value = a or b;
135   // CHECK-MESSAGES: :[[@LINE-1]]:13: warning: 'or' is an alternative token spelling, consider using a traditional token '||' for consistency [readability-operators-representation]
136   // CHECK-FIXES: {{^  }}value = a || b;{{$}}
137 
138   value = a and b;
139   // CHECK-MESSAGES: :[[@LINE-1]]:13: warning: 'and' is an alternative token spelling, consider using a traditional token '&&' for consistency [readability-operators-representation]
140   // CHECK-FIXES: {{^  }}value = a && b;{{$}}
141 
142   clval = a bitor b;
143   // CHECK-MESSAGES: :[[@LINE-1]]:13: warning: 'bitor' is an alternative token spelling, consider using a traditional token '|' for consistency [readability-operators-representation]
144   // CHECK-FIXES: {{^  }}clval = a | b;{{$}}
145 
146   clval = a bitand b;
147   // CHECK-MESSAGES: :[[@LINE-1]]:13: warning: 'bitand' is an alternative token spelling, consider using a traditional token '&' for consistency [readability-operators-representation]
148   // CHECK-FIXES: {{^  }}clval = a & b;{{$}}
149 
150   value = not a;
151   // CHECK-MESSAGES: :[[@LINE-1]]:11: warning: 'not' is an alternative token spelling, consider using a traditional token '!' for consistency [readability-operators-representation]
152   // CHECK-FIXES: {{^  }}value = ! a;{{$}}
153 
154   clval = a xor b;
155   // CHECK-MESSAGES: :[[@LINE-1]]:13: warning: 'xor' is an alternative token spelling, consider using a traditional token '^' for consistency [readability-operators-representation]
156   // CHECK-FIXES: {{^  }}clval = a ^ b;{{$}}
157 
158   clval = compl b;
159   // CHECK-MESSAGES: :[[@LINE-1]]:11: warning: 'compl' is an alternative token spelling, consider using a traditional token '~' for consistency [readability-operators-representation]
160   // CHECK-FIXES: {{^  }}clval = ~ b;{{$}}
161 
162   clval and_eq b;
163   // CHECK-MESSAGES: :[[@LINE-1]]:9: warning: 'and_eq' is an alternative token spelling, consider using a traditional token '&=' for consistency [readability-operators-representation]
164   // CHECK-FIXES: {{^  }}clval &= b;{{$}}
165 
166   clval or_eq b;
167   // CHECK-MESSAGES: :[[@LINE-1]]:9: warning: 'or_eq' is an alternative token spelling, consider using a traditional token '|=' for consistency [readability-operators-representation]
168   // CHECK-FIXES: {{^  }}clval |= b;{{$}}
169 
170   value = a not_eq b;
171   // CHECK-MESSAGES: :[[@LINE-1]]:13: warning: 'not_eq' is an alternative token spelling, consider using a traditional token '!=' for consistency [readability-operators-representation]
172   // CHECK-FIXES: {{^  }}value = a != b;{{$}}
173 
174   clval xor_eq a;
175   // CHECK-MESSAGES: :[[@LINE-1]]:9: warning: 'xor_eq' is an alternative token spelling, consider using a traditional token '^=' for consistency [readability-operators-representation]
176   // CHECK-FIXES: {{^  }}clval ^= a;{{$}}
177 }
178