import checkers.interning.quals.*;
import java.util.*;
public class ComplexComparison {
void testInterned() {
@Interned String a = "foo";
@Interned String b = "bar";
if (a != null && b != null && a == b) {
System.out.println("yes");
} else {
System.out.println("no");
}
}
void testInternedDueToFlow() {
String c = "foo";
String d = "bar";
if (c != null && d != null && c == d) {
System.out.println("yes");
} else {
System.out.println("no");
}
}
void testNotInterned() {
String e = new String("foo");
String f = new String("bar");
//:: (not.interned)
if (e != null && f != null && e == f) {
System.out.println("yes");
} else {
System.out.println("no");
}
}
/* @ pure */ public class DoubleArrayComparatorLexical implements Comparator<double[]> {
/**
* Lexically compares o1 and o2 as double arrays.
*
* @return positive if o1 > 02, 0 if 01 == 02, negative if 01 < 02
*/
public int compare(double[] a1, double[] a2) {
// Heuristic: permit "arg1 == arg2" in a test in the first statement
// of a "Comparator.compare" method, if the body just returns 0.
if (a1 == a2)
return 0;
int len = Math.min(a1.length, a2.length);
for (int i=0; i<len; i++) {
if (a1[i] != a2[i]) {
return ((a1[i] > a2[i]) ? 1 : -1);
}
}
return a1.length - a2.length;
}
}
class C {
@Override
public boolean equals(Object other) {
// Heuristic: permit "this == arg1" in a test in the first statement
// of a "Comparator.compare" method, if the body just returns true.
if (this == other) {
return true;
}
return super.equals(other);
}
}
}