Imported Upstream version 2.9.0
[debian/cc1111] / support / regression / tests / bug-905492.c
1 /* bug-905492.c
2
3    the standard guarantees left-to-right evaluation,
4    if the first operand is unequal 0 (resp. 0), the second isn't evaluated.
5 */
6
7 #include <testfwk.h>
8
9 char a;
10
11 char
12 inc_a(char c)
13 {
14   a += 1;
15   return c;
16 }
17
18 void
19 testLeftRightAndOr(void)
20 {
21   volatile char c;
22
23   a = 0; c = inc_a(0) || inc_a(0); ASSERT(a == 2);
24   a = 0; c = inc_a(0) || inc_a(1); ASSERT(a == 2);
25   a = 0; c = inc_a(1) || inc_a(0); ASSERT(a == 1);
26   a = 0; c = inc_a(1) || inc_a(1); ASSERT(a == 1);
27
28   a = 0; c = inc_a(0) && inc_a(0); ASSERT(a == 1);
29   a = 0; c = inc_a(0) && inc_a(1); ASSERT(a == 1);
30   a = 0; c = inc_a(1) && inc_a(0); ASSERT(a == 2);
31   a = 0; c = inc_a(1) && inc_a(1); ASSERT(a == 2);
32 }