package com.puppycrawl.tools.checkstyle.checks.metrics;
// Advise: for lack of ambiguity try to make all factors prime numbers
public class InputNPathComplexity {
//NP = 5
void testIfWithExpression() {
// NP = (if-range=1) + 1 + (expr=3) = 5
if (true && true || (true || true)) { }
}
//NP = 5
void testIfElseWithExpression() {
// NP = (if-range=1) + (else-range=1) + (expr=3) = 5
if (true && true || (true || true)) { }
else { }
}
//NP = 4
int testSimpleSwitch() {
int a = 0;
// NP = (case-range[1]=1) + (case-range[2]=1) + (case-range[3]=1)
// + (default-range=1) + (expr=0) = 4
switch(a) {
case 1:
break;
case 2:
case 3:
break;
}
return a;
}
//NP = 4
void testSimpleSwitchWithDefault() {
int a = 0;
// NP = (case-range[1]=1) + (case-range[2]=1) + (case-range[3]=1)
// + (default-range=1) + (expr=0) = 4
switch(a) {
case 1:
break;
case 2:
case 3:
break;
default:
break;
}
}
//NP = 6
void testSwitchWithExpression() {
int a = 0;
// NP = (case-range[1]=1) + (case-range[2]=1) + (case-range[3]=1)
// + (default-range=1) + (expr=2) = 6
switch(true ? a : a) {
case 1:
break;
case 2:
case 3:
break;
default:
break;
}
}
//NP = 15
void testComplexSwitch() {
int a = 0;
// NP = (case-range[1]=2) + (case-range[2]=5*2) + (case-range[3]=2)
// + (default-range=1) + (expr=0) = 15
switch(a) {
case 1:
// NP(case-range) = (if-range=1) + 1 + (expr=0) = 2
if (true) { }
break;
case 2:
// NP(case-range) = (if-range=1) + (else-range=1) + (expr=3) = 5
if (true && true || (true || true)) { }
else { }
// NP(case-range) = (if-range=1) + 1 + (expr=0) = 2
if (true) { }
case 3:
// NP(case-range) = (if-range=1) + 1 + (expr=0) = 2
if (true) { }
break;
default:
break;
}
}
// NP = 11
void testComplexIfElse() {
// NP = (if-range=1) + (else-range=9) + (expr=1) = 11
if (true && true) { }
// NP(else-range) = (if-range=1) + (else-range=6) + (expr=2) = 9
else if (true || true || true) { }
// NP(else-range) = (if-range=1) + 1 + (expr=4) = 6
else if (true && true && true || true || true) { }
}
// NP = 8
boolean testComplexReturn() {
// NP = (if-range=3) + (else-range=4) + (expr=1) = 8
if (true && true) {
// NP(if-range) = 3
return true && true || (true && true);
} else {
// NP(else-range) = (expr(1)=0) + (expr(2)=1) + (expr(3)=1) + 2 = 4
return true ? true && true : true || true;
}
}
// NP = (for-statement[1]=2) * (for-statement[2]=3)
// * (for-statement[3]=4) * (for-statement[4]=5) = 120
void testForCyclesComplex() {
// NP(for-statement) = (for-range=1) + (expr(1)=0) + (expr(2)=0) + (expr(3)=0) + 1 = 2
for (int i = 0; i < 10; i++);
// NP(for-statement) = (for-range=1) + (expr(1)=0) + (expr(2)=1) + (expr(3)=0) + 1 = 3
for (int i = 0; i < 10 && true; i++);
// NP(for-statement) = (for-range=1) + (expr(1)=2) + (expr(2)=0) + (expr(3)=0) + 1 = 4
for (int i = true ? 0 : 0; i < 10; i++);
// NP(for-statement) = (for-range=1) + (expr(1)=0) + (expr(2)=1+2) + (expr(3)=0) + 1 = 5
for (int i = 0; true ? i < 10 : true || true; i++);
}
// NP = (while-statement[1]=2) * (while-statement[2]=3) = 6
boolean testWhileCyclesComplex() {
int a = 0;
// NP(while-statement) = (while-range=1) + (expr=0) + 1 = 2
while (a != 0) { }
// NP(while-statement) = (while-range=1) + (expr=1) + 1 = 3
while (a != 0 && a == 0) { return a == 0 || a == 0; }
return true;
}
// NP = (do-statement[1]=6) * (do-statement[2]=3) = 21
void testDoWhileCyclesComplex() {
int a = 0;
// NP(do-statement) = (do-range=1) + (expr=1) + 1 = 3
do { } while (a < 10 && true);
// NP(do-statement) =
// (do-range=3) + ((expr(1)=0) + (expr(2)=0) + (expr(3)=1) + 2) + 1 = 7
do {
// NP(do-range) = (do-range=1) + (expr=1) + 1 = 3
do { } while (a < 10 || true);
} while (true ? a > 10 : (a < 10 || true));
}
// NP = (question-statement[1]=5) * (question-statement[2]=7) = 35
void testComplexTernaryOperator() {
// NP(question-statement) = (expr(1)=0) + (expr(2)=2) + (expr(3)=1+2) + 2 = 7
boolean a = true ? (true ? true : true) : (false ? (true || false) : true);
// NP(question-statement) = (expr(1)=0) + (expr(2)=2) + (expr(3)=1) + 2 = 5;
boolean b = true ? (true ? true : true) : true || true;
}
// NP = (if-expression[1]=5) * (if-expression[2]=5) = 25
void testSimpleTernaryBadFormatting() {
// NP(if-expression) = (if-range=2) + 1 + (expr=2) = 5
if(
true ? true : true
) { boolean a = true ? true
: true;
}
// NP(if-expression) = (if-range=2) + 1 + (expr=2) = 5
if(
true ? true : true) { boolean b = true ? true : true;
}
}
//Calculation for try-catch is wrong now
//See issue #3814 https://github.com/checkstyle/checkstyle/issues/3814
void testTryCatch() {
try {
}
catch (Exception e) {
}
}
}