package jadx.samples;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
public class TestCF3 extends AbstractTest {
public String f = "str//ing";
private boolean enabled;
private void setEnabled(boolean b) {
this.enabled = b;
}
private int next() {
return 1;
}
private int exc() throws Exception {
return 1;
}
public void testSwitchInLoop() throws Exception {
while (true) {
int n = next();
switch (n) {
case 0:
setEnabled(false);
break;
case 1:
setEnabled(true);
return;
}
}
}
private void testIfInLoop() {
int j = 0;
for (int i = 0; i < f.length(); i++) {
char ch = f.charAt(i);
if (ch == '/') {
j++;
if (j == 2) {
setEnabled(true);
return;
}
}
}
setEnabled(false);
}
public boolean testNestedLoops(List<String> l1, List<String> l2) {
Iterator<String> it1 = l1.iterator();
while (it1.hasNext()) {
String s1 = it1.next();
Iterator<String> it2 = l2.iterator();
while (it2.hasNext()) {
String s2 = it2.next();
if (s1.equals(s2)) {
if (s1.length() == 5) {
l2.add(s1);
} else {
l1.remove(s2);
}
}
}
}
if (l2.size() > 0) {
l1.clear();
}
return l1.size() == 0;
}
public boolean testNestedLoops2(List<String> list) {
int i = 0;
int j = 0;
while (i < list.size()) {
String s = list.get(i);
while (j < s.length()) {
j++;
}
i++;
}
return j > 10;
}
private int testLoops(int[] a, int b) {
int i = 0;
while (i < a.length && i < b) {
a[i]++;
i++;
}
while (i < a.length) {
a[i]--;
i++;
}
int sum = 0;
for (int e : a) {
sum += e;
}
return sum;
}
public static boolean testLabeledBreakContinue() {
String searchMe = "Look for a substring in me";
String substring = "sub";
boolean foundIt = false;
// int max = searchMe.length() - substring.length();
// test: for (int i = 0; i <= max; i++) {
// int n = substring.length();
// int j = i;
// int k = 0;
// while (n-- != 0) {
// if (searchMe.charAt(j++) != substring.charAt(k++)) {
// continue test;
// }
// }
// foundIt = true;
// break test;
// }
// System.out.println(foundIt ? "Found it" : "Didn't find it");
return foundIt;
}
public String testReturnInLoop(List<String> list) {
Iterator<String> it = list.iterator();
while (it.hasNext()) {
String ver = it.next();
if (ver != null) {
return ver;
}
}
return "error";
}
public String testReturnInLoop2(List<String> list) {
try {
Iterator<String> it = list.iterator();
while (it.hasNext()) {
String ver = it.next();
exc();
if (ver != null) {
return ver;
}
}
} catch (Exception e) {
setEnabled(false);
}
return "error";
}
public int testComplexIfInLoop(boolean a) {
int i = 0;
while (a && i < 10) {
i++;
}
return i;
}
public int testComplexIfInLoop2(int k) {
int i = k;
while (i > 5 && i < 10) {
i++;
}
return i;
}
public int testComplexIfInLoop3(int k) {
int i = k;
while (i > 5 && i < k * 3) {
if (k == 8) {
i++;
} else {
break;
}
}
return i;
}
private void f() {
try {
Thread.sleep(50);
} catch (InterruptedException e) {
// ignore
}
}
public long testInline() {
long l = System.nanoTime();
f();
return System.nanoTime() - l;
}
private int f2 = 1;
public void func() {
this.f2++;
}
public boolean testInline2() {
int a = this.f2;
func();
return a != this.f2;
}
@Override
public boolean testRun() throws Exception {
setEnabled(false);
testSwitchInLoop();
assertTrue(enabled);
setEnabled(false);
testIfInLoop();
assertTrue(enabled);
assertTrue(testNestedLoops(
new ArrayList<String>(Arrays.asList("a1", "a2")),
new ArrayList<String>(Arrays.asList("a1", "b2"))));
List<String> list1 = Arrays.asList(null, "a", "b");
assertEquals(testReturnInLoop(list1), "a");
assertEquals(testReturnInLoop2(list1), "a");
// TODO this line required to omit generic information because it create List<Object>
// List<String> list2 = Arrays.asList(null, null, null);
// assertEquals(testReturnInLoop(list2), "error");
// assertEquals(testReturnInLoop2(list2), "error");
// assertTrue(testLabeledBreakContinue());
assertEquals(testComplexIfInLoop(false), 0);
assertEquals(testComplexIfInLoop(true), 10);
assertEquals(testComplexIfInLoop2(2), 2);
assertEquals(testComplexIfInLoop2(6), 10);
assertEquals(testComplexIfInLoop3(2), 2);
assertEquals(testComplexIfInLoop3(6), 6);
assertEquals(testComplexIfInLoop3(8), 24);
assertEquals(testLoops(new int[]{1, 2, 3, 4, 5, 6}, 2), 19);
assertTrue(testInline() > 20);
assertTrue(testInline2());
return true;
}
public static void main(String[] args) throws Exception {
new TestCF3().testRun();
}
}