1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
import org.checkerframework.checker.index.qual.*;
class Polymorphic3 {
// Identity functions
@PolyIndex int identity(@PolyIndex int a) {
return a;
}
// UpperBound tests
void ubc_id(
int[] a,
int[] b,
@LTLengthOf("#1") int ai,
@LTEqLengthOf("#1") int al,
@LTLengthOf({"#1", "#2"}) int abi,
@LTEqLengthOf({"#1", "#2"}) int abl) {
int[] c;
@LTLengthOf("a") int ai1 = identity(ai);
// :: error: (assignment.type.incompatible)
@LTLengthOf("b") int ai2 = identity(ai);
@LTEqLengthOf("a") int al1 = identity(al);
// :: error: (assignment.type.incompatible)
@LTLengthOf("a") int al2 = identity(al);
@LTLengthOf({"a", "b"}) int abi1 = identity(abi);
// :: error: (assignment.type.incompatible)
@LTLengthOf({"a", "b", "c"}) int abi2 = identity(abi);
@LTEqLengthOf({"a", "b"}) int abl1 = identity(abl);
// :: error: (assignment.type.incompatible)
@LTEqLengthOf({"a", "b", "c"}) int abl2 = identity(abl);
}
// LowerBound tests
void lbc_id(@NonNegative int n, @Positive int p, @GTENegativeOne int g) {
@NonNegative int an = identity(n);
// :: error: (assignment.type.incompatible)
@Positive int bn = identity(n);
@GTENegativeOne int ag = identity(g);
// :: error: (assignment.type.incompatible)
@NonNegative int bg = identity(g);
@Positive int ap = identity(p);
}
}
|