\begin{slide}{Übung zum Testen}

Die folgende Methode soll binäre Suche implementieren:

\begin{itemize}
\item wenn (Vorbedingung) $\forall k: x[k] \le x[k+1]$,
\item dann (Nachbedingung) gilt für den Rückgabewert $p$
  von \verb|binsearch(x,i)|:

  falls $i$ in $x[..]$ vorkommt, \\
  dann $x[p]=i$, sonst $p=-1$.
\end{itemize}

\begin{verbatim}
public static int binsearch (int [] x, int i) {
    int n = x.length;
    int low = 0;
    int high = n;
    while (low < high) {
        int mid = (low + high) / 2;
        if (i < x[mid]) {
            high = mid;
        } else if (i > x[mid]) {
            low = mid;
        } else {
            return mid;
        }
    }
    return -1;
}
\end{verbatim}

Aufgaben:
\begin{itemize}
\item
  Legen Sie eine Klasse an, die \verb|binsearch| enthält.
\item
  Legen Sie einen JUnit-Testcase an 
  (Eclipse: File $\to$ New $\to$ JUnit Test Case)
  mit etwa diesem Code:
\begin{verbatim}
int [] x = { 3, 4, 6, 8, 9 };
int p = binsearch (x, 4);
assertTrue (p == ???);
\end{verbatim}
\item
  Finden Sie Argumente, für die sich die Methode fehlerhaft verhält.
\item
  Reparieren Sie die Methode.
\item 
  Zusatz: Vergleichen Sie mit der entsprechenden Methode
  aus der Java-Standard-Bibliothek (welche Klasse? welcher Name?)
  Sie benötigen dazu ein komplettes JDK (mit Quelltexten).
\end{itemize}


\end{slide}
