1*1c25a3bfSNAKAMURA Takumi 2*1c25a3bfSNAKAMURA Takumi 3*1c25a3bfSNAKAMURA Takumi 4*1c25a3bfSNAKAMURA Takumi 5*1c25a3bfSNAKAMURA Takumi #define COND1 (a == b) 6*1c25a3bfSNAKAMURA Takumi #define COND2 (a != b) 7*1c25a3bfSNAKAMURA Takumi #define COND3 (COND1 && COND2) 8*1c25a3bfSNAKAMURA Takumi #define COND4 (COND3 ? COND2 : COND1) // BRCOV: | Branch ([[@LINE]]:15): [True: 1, False: [[#min(C,2)]]] 9*1c25a3bfSNAKAMURA Takumi #define MACRO1 COND3 10*1c25a3bfSNAKAMURA Takumi #define MACRO2 MACRO1 11*1c25a3bfSNAKAMURA Takumi #define MACRO3 MACRO2 12*1c25a3bfSNAKAMURA Takumi 13*1c25a3bfSNAKAMURA Takumi #include <stdlib.h> 14*1c25a3bfSNAKAMURA Takumi 15*1c25a3bfSNAKAMURA Takumi // CHECK: |{{ +}}[[#min(C,3)]]|bool func( 16*1c25a3bfSNAKAMURA Takumi bool func(int a, int b) { 17*1c25a3bfSNAKAMURA Takumi bool c = COND1 && COND2; // BRCOV: | | | Branch ([[@LINE-12]]:15): [True: 1, False: [[#min(C,2)]]] 18*1c25a3bfSNAKAMURA Takumi // BRCOV: | | | Branch ([[@LINE-12]]:15): [True: 0, False: 1] 19*1c25a3bfSNAKAMURA Takumi bool d = COND3; // BRCOV: | | | | | Branch ([[@LINE-14]]:15): [True: 1, False: [[#min(C,2)]]] 20*1c25a3bfSNAKAMURA Takumi // BRCOV: | | | | | Branch ([[@LINE-14]]:15): [True: 0, False: 1] 21*1c25a3bfSNAKAMURA Takumi bool e = MACRO1; // BRCOV: | | | | | | | Branch ([[@LINE-16]]:15): [True: 1, False: [[#min(C,2)]]] 22*1c25a3bfSNAKAMURA Takumi // BRCOV: | | | | | | | Branch ([[@LINE-16]]:15): [True: 0, False: 1] 23*1c25a3bfSNAKAMURA Takumi bool f = MACRO2; // BRCOV: | | | | | | | | | Branch ([[@LINE-18]]:15): [True: 1, False: [[#min(C,2)]]] 24*1c25a3bfSNAKAMURA Takumi // BRCOV: | | | | | | | | | Branch ([[@LINE-18]]:15): [True: 0, False: 1] 25*1c25a3bfSNAKAMURA Takumi bool g = MACRO3; // BRCOV: | | | | | | | | | | | Branch ([[@LINE-20]]:15): [True: 1, False: [[#min(C,2)]]] 26*1c25a3bfSNAKAMURA Takumi // BRCOV: | | | | | | | | | | | Branch ([[@LINE-20]]:15): [True: 0, False: 1] 27*1c25a3bfSNAKAMURA Takumi return c && d && e && f && g; 28*1c25a3bfSNAKAMURA Takumi // BRCOV: | Branch ([[@LINE-1]]:10): [True: 0, False: [[#min(C,3)]]] 29*1c25a3bfSNAKAMURA Takumi // BRCOV: | Branch ([[@LINE-2]]:15): [True: 0, False: 0] 30*1c25a3bfSNAKAMURA Takumi // BRCOV: | Branch ([[@LINE-3]]:20): [True: 0, False: 0] 31*1c25a3bfSNAKAMURA Takumi // BRCOV: | Branch ([[@LINE-4]]:25): [True: 0, False: 0] 32*1c25a3bfSNAKAMURA Takumi // BRCOV: | Branch ([[@LINE-5]]:30): [True: 0, False: 0] 33*1c25a3bfSNAKAMURA Takumi } 34*1c25a3bfSNAKAMURA Takumi 35*1c25a3bfSNAKAMURA Takumi 36*1c25a3bfSNAKAMURA Takumi bool func2(int a, int b) { 37*1c25a3bfSNAKAMURA Takumi bool h = MACRO3 || COND4; // BRCOV: | | | | | | | | | | | Branch ([[@LINE-32]]:15): [True: 1, False: [[#min(C,2)]]] 38*1c25a3bfSNAKAMURA Takumi // BRCOV: | | | | | | | | | | | Branch ([[@LINE-32]]:15): [True: 0, False: 1] 39*1c25a3bfSNAKAMURA Takumi // BRCOV: | | | | | | | Branch ([[@LINE-34]]:15): [True: 1, False: [[#min(C,2)]]] 40*1c25a3bfSNAKAMURA Takumi // BRCOV: | | | | | | | Branch ([[@LINE-34]]:15): [True: 0, False: 1] 41*1c25a3bfSNAKAMURA Takumi // BRCOV: | | | Branch ([[@LINE-33]]:15): [True: 1, False: [[#min(C,2)]]] 42*1c25a3bfSNAKAMURA Takumi return h; 43*1c25a3bfSNAKAMURA Takumi } 44*1c25a3bfSNAKAMURA Takumi 45*1c25a3bfSNAKAMURA Takumi 46*1c25a3bfSNAKAMURA Takumi int main(int argc, char *argv[]) 47*1c25a3bfSNAKAMURA Takumi { 48*1c25a3bfSNAKAMURA Takumi func(atoi(argv[1]), atoi(argv[2])); 49*1c25a3bfSNAKAMURA Takumi func2(atoi(argv[1]), atoi(argv[2])); 50*1c25a3bfSNAKAMURA Takumi (void)0; 51*1c25a3bfSNAKAMURA Takumi return 0; 52*1c25a3bfSNAKAMURA Takumi } 53