BiSection Java тестовые входы - PullRequest
0 голосов
/ 18 марта 2020

У меня есть этот код для анализа. Это метод деления пополам.

Каковы входные данные, которые приведут к переходу на ветки 18 и 19 строки?

public class BiSectionExample {
    public double root(double d, double e, double f) throws IllegalArgumentException {
        double middle;
        if (d >= e) {
            System.out.println("1");
            throw new IllegalArgumentException("low must be lower than high");
        }

        System.out.println(d + " " + e + " " + f);
        while (e - d > f) {
            System.out.println("2");
            System.out.println("once");
            middle = (e + d) / 2;
            if (middle < e) {
                System.out.println("3");
                d = middle;
            } else {
                System.out.println("4"); // line 18
                e = middle; // line 19
            }
        }

        System.out.println((e + d) / 2);
        return (e + d) / 2;
    }
}

1 Ответ

0 голосов
/ 18 марта 2020

Если вы используете JUnit для тестирования, вы можете использовать повторный тест и вводить случайно сгенерированные значения, чтобы вероятность достижения линий была высокой. Также было бы полезно установить точку останова отладчика для строк, чтобы вы могли видеть, что было введено при достижении строк.

Но, пройдя тест вручную, я думаю, что в этом случае завершить невозможно потому что:

  • middle - это середина между e и d
  • для middle, превышающая e (в другом случае) d должно быть больше e
  • этот случай, по-видимому, недопустим из-за первого предложения if (которое в данном случае выдает исключение)

Возможно, возможно, если e и d - это одно и то же значение (поэтому middle равно e, а не smaler), но это также может привести к ошибке из-за двойной точности.

...