import java.util.Arrays;
import org.checkerframework.checker.index.qual.*;

public class SearchIndexTests {
  public void test(short[] a, short instant) {
    int i = Arrays.binarySearch(a, instant);
    @SearchIndexFor("a") int z = i;
    // :: error: (assignment)
    @SearchIndexFor("a") int y = 7;
    @LTLengthOf("a") int x = i;
  }

  void test2(int[] a, @SearchIndexFor("#1") int xyz) {
    if (0 > xyz) {
      @NegativeIndexFor("a") int w = xyz;
      @NonNegative int y = ~xyz;
      @LTEqLengthOf("a") int z = ~xyz;
    }
  }

  void test3(int[] a, @SearchIndexFor("#1") int xyz) {
    if (-1 >= xyz) {
      @NegativeIndexFor("a") int w = xyz;
      @NonNegative int y = ~xyz;
      @LTEqLengthOf("a") int z = ~xyz;
    }
  }

  void test4(int[] a, @SearchIndexFor("#1") int xyz) {
    if (xyz < 0) {
      @NegativeIndexFor("a") int w = xyz;
      @NonNegative int y = ~xyz;
      @LTEqLengthOf("a") int z = ~xyz;
    }
  }

  void test5(int[] a, @SearchIndexFor("#1") int xyz) {
    if (xyz <= -1) {
      @NegativeIndexFor("a") int w = xyz;
      @NonNegative int y = ~xyz;
      @LTEqLengthOf("a") int z = ~xyz;
    }
  }

  void subtyping1(
      @SearchIndexFor({"#3", "#4"}) int x, @NegativeIndexFor("#3") int y, int[] a, int[] b) {
    // :: error: (assignment)
    @SearchIndexFor({"a", "b"}) int z = y;
    @SearchIndexFor("a") int w = y;
    @SearchIndexFor("b") int p = x;
    // :: error: (assignment)
    @NegativeIndexFor({"a", "b"}) int q = x;
  }
}
