@@ -98,6 +98,31 @@ public void test_condition_conditional_and() {
9898 assertOutputStates (evaluateCondition ("local1 && local2" ), 1 , 2 , 0 );
9999 }
100100
101+ @ Test
102+ public void test_condition_bitwise_and () {
103+ // evaluation
104+ assertThat (evaluateCondition ("false & false" ).isAlwaysFalse ()).isTrue ();
105+ assertThat (evaluateCondition ("false & true" ).isAlwaysFalse ()).isTrue ();
106+ assertThat (evaluateCondition ("false & local2" ).isAlwaysFalse ()).isTrue ();
107+ assertThat (evaluateCondition ("true & false" ).isAlwaysFalse ()).isTrue ();
108+ assertThat (evaluateCondition ("true & true" ).isAlwaysTrue ()).isTrue ();
109+ assertThat (evaluateCondition ("true & local2" ).isUnknown ()).isTrue ();
110+ assertThat (evaluateCondition ("local1 & false" ).isAlwaysFalse ()).isTrue ();
111+ assertThat (evaluateCondition ("local1 & true" ).isUnknown ()).isTrue ();
112+ assertThat (evaluateCondition ("local1 & local" ).isUnknown ()).isTrue ();
113+
114+ // number of spawned states
115+ assertOutputStates (evaluateCondition ("false & false" ), 0 , 1 , 0 );
116+ assertOutputStates (evaluateCondition ("false & true" ), 0 , 1 , 0 );
117+ assertOutputStates (evaluateCondition ("false & local2" ), 0 , 1 , 0 );
118+ assertOutputStates (evaluateCondition ("true & false" ), 0 , 1 , 0 );
119+ assertOutputStates (evaluateCondition ("true & true" ), 1 , 0 , 0 );
120+ assertOutputStates (evaluateCondition ("true & local2" ), 1 , 1 , 0 );
121+ assertOutputStates (evaluateCondition ("local1 & false" ), 0 , 2 , 0 );
122+ assertOutputStates (evaluateCondition ("local1 & true" ), 1 , 1 , 0 );
123+ assertOutputStates (evaluateCondition ("local1 & local2" ), 1 , 2 , 0 );
124+ }
125+
101126 @ Test
102127 public void test_condition_conditional_or () {
103128 // evaluation
@@ -124,7 +149,57 @@ public void test_condition_conditional_or() {
124149 }
125150
126151 @ Test
127- public void test_expression_conditional_and () {
152+ public void test_condition_bitwise_or () {
153+ // evaluation
154+ assertThat (evaluateCondition ("false | false" ).isAlwaysFalse ()).isTrue ();
155+ assertThat (evaluateCondition ("false | true" ).isAlwaysTrue ()).isTrue ();
156+ assertThat (evaluateCondition ("false | local2" ).isUnknown ()).isTrue ();
157+ assertThat (evaluateCondition ("true | false" ).isAlwaysTrue ()).isTrue ();
158+ assertThat (evaluateCondition ("true | true" ).isAlwaysTrue ()).isTrue ();
159+ assertThat (evaluateCondition ("true | local2" ).isAlwaysTrue ()).isTrue ();
160+ assertThat (evaluateCondition ("local1 | false" ).isUnknown ()).isTrue ();
161+ assertThat (evaluateCondition ("local1 | true" ).isAlwaysTrue ()).isTrue ();
162+ assertThat (evaluateCondition ("local1 | local" ).isUnknown ()).isTrue ();
163+
164+ // number of spawned states
165+ assertOutputStates (evaluateCondition ("false | false" ), 0 , 1 , 0 );
166+ assertOutputStates (evaluateCondition ("false | true" ), 1 , 0 , 0 );
167+ assertOutputStates (evaluateCondition ("false | local2" ), 1 , 1 , 0 );
168+ assertOutputStates (evaluateCondition ("true | false" ), 1 , 0 , 0 );
169+ assertOutputStates (evaluateCondition ("true | true" ), 1 , 0 , 0 );
170+ assertOutputStates (evaluateCondition ("true | local2" ), 1 , 0 , 0 );
171+ assertOutputStates (evaluateCondition ("local1 | false" ), 1 , 1 , 0 );
172+ assertOutputStates (evaluateCondition ("local1 | true" ), 2 , 0 , 0 );
173+ assertOutputStates (evaluateCondition ("local1 | local2" ), 2 , 1 , 0 );
174+ }
175+
176+ @ Test
177+ public void test_condition_xor () {
178+ // evaluation
179+ assertThat (evaluateCondition ("false ^ false" ).isAlwaysFalse ()).isTrue ();
180+ assertThat (evaluateCondition ("false ^ true" ).isAlwaysTrue ()).isTrue ();
181+ assertThat (evaluateCondition ("false ^ local2" ).isUnknown ()).isTrue ();
182+ assertThat (evaluateCondition ("true ^ false" ).isAlwaysTrue ()).isTrue ();
183+ assertThat (evaluateCondition ("true ^ true" ).isAlwaysFalse ()).isTrue ();
184+ assertThat (evaluateCondition ("true ^ local2" ).isUnknown ()).isTrue ();
185+ assertThat (evaluateCondition ("local1 ^ false" ).isUnknown ()).isTrue ();
186+ assertThat (evaluateCondition ("local1 ^ true" ).isUnknown ()).isTrue ();
187+ assertThat (evaluateCondition ("local1 ^ local" ).isUnknown ()).isTrue ();
188+
189+ // number of spawned states
190+ assertOutputStates (evaluateCondition ("false ^ false" ), 0 , 1 , 0 );
191+ assertOutputStates (evaluateCondition ("false ^ true" ), 1 , 0 , 0 );
192+ assertOutputStates (evaluateCondition ("false ^ local2" ), 1 , 1 , 0 );
193+ assertOutputStates (evaluateCondition ("true ^ false" ), 1 , 0 , 0 );
194+ assertOutputStates (evaluateCondition ("true ^ true" ), 0 , 1 , 0 );
195+ assertOutputStates (evaluateCondition ("true ^ local2" ), 1 , 1 , 0 );
196+ assertOutputStates (evaluateCondition ("local1 ^ false" ), 1 , 1 , 0 );
197+ assertOutputStates (evaluateCondition ("local1 ^ true" ), 1 , 1 , 0 );
198+ assertOutputStates (evaluateCondition ("local1 ^ local2" ), 2 , 2 , 0 );
199+ }
200+
201+ @ Test
202+ public void test_expression_and () {
128203 assertThat (evaluateExpression ("false && false" )).isSameAs (FALSE );
129204 assertThat (evaluateExpression ("false && true" )).isSameAs (FALSE );
130205 assertThat (evaluateExpression ("false && local2" )).isSameAs (FALSE );
@@ -134,10 +209,20 @@ public void test_expression_conditional_and() {
134209 assertThat (evaluateExpression ("local1 && false" )).isSameAs (FALSE );
135210 assertThat (evaluateExpression ("local1 && true" )).isSameAs (UNKNOWN );
136211 assertThat (evaluateExpression ("local1 && local" )).isSameAs (UNKNOWN );
212+
213+ assertThat (evaluateExpression ("false & false" )).isSameAs (FALSE );
214+ assertThat (evaluateExpression ("false & true" )).isSameAs (FALSE );
215+ assertThat (evaluateExpression ("false & local2" )).isSameAs (FALSE );
216+ assertThat (evaluateExpression ("true & false" )).isSameAs (FALSE );
217+ assertThat (evaluateExpression ("true & true" )).isSameAs (TRUE );
218+ assertThat (evaluateExpression ("true & local2" )).isSameAs (UNKNOWN );
219+ assertThat (evaluateExpression ("local1 & false" )).isSameAs (FALSE );
220+ assertThat (evaluateExpression ("local1 & true" )).isSameAs (UNKNOWN );
221+ assertThat (evaluateExpression ("local1 & local" )).isSameAs (UNKNOWN );
137222 }
138223
139224 @ Test
140- public void test_expression_conditional_or () {
225+ public void test_expression_or () {
141226 assertThat (evaluateExpression ("false || false" )).isSameAs (FALSE );
142227 assertThat (evaluateExpression ("false || true" )).isSameAs (TRUE );
143228 assertThat (evaluateExpression ("false || local2" )).isSameAs (UNKNOWN );
@@ -147,6 +232,29 @@ public void test_expression_conditional_or() {
147232 assertThat (evaluateExpression ("local1 || false" )).isSameAs (UNKNOWN );
148233 assertThat (evaluateExpression ("local1 || true" )).isSameAs (TRUE );
149234 assertThat (evaluateExpression ("local1 || local" )).isSameAs (UNKNOWN );
235+
236+ assertThat (evaluateExpression ("false | false" )).isSameAs (FALSE );
237+ assertThat (evaluateExpression ("false | true" )).isSameAs (TRUE );
238+ assertThat (evaluateExpression ("false | local2" )).isSameAs (UNKNOWN );
239+ assertThat (evaluateExpression ("true | false" )).isSameAs (TRUE );
240+ assertThat (evaluateExpression ("true | true" )).isSameAs (TRUE );
241+ assertThat (evaluateExpression ("true | local2" )).isSameAs (TRUE );
242+ assertThat (evaluateExpression ("local1 | false" )).isSameAs (UNKNOWN );
243+ assertThat (evaluateExpression ("local1 | true" )).isSameAs (TRUE );
244+ assertThat (evaluateExpression ("local1 | local" )).isSameAs (UNKNOWN );
245+ }
246+
247+ @ Test
248+ public void test_expression_xor () {
249+ assertThat (evaluateExpression ("false ^ false" )).isSameAs (FALSE );
250+ assertThat (evaluateExpression ("false ^ true" )).isSameAs (TRUE );
251+ assertThat (evaluateExpression ("false ^ local2" )).isSameAs (UNKNOWN );
252+ assertThat (evaluateExpression ("true ^ false" )).isSameAs (TRUE );
253+ assertThat (evaluateExpression ("true ^ true" )).isSameAs (FALSE );
254+ assertThat (evaluateExpression ("true ^ local2" )).isSameAs (UNKNOWN );
255+ assertThat (evaluateExpression ("local1 ^ false" )).isSameAs (UNKNOWN );
256+ assertThat (evaluateExpression ("local1 ^ true" )).isSameAs (UNKNOWN );
257+ assertThat (evaluateExpression ("local1 ^ local" )).isSameAs (UNKNOWN );
150258 }
151259
152260 @ Test
0 commit comments