Запишите один тесты

Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.

Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразуют Notebook MuPAD в Live скрипты MATLAB.

prog::test функция является основным инструментом тестирования в MuPAD®. Эта функция сравнивает фактический результат расчетов с ожидаемым результатом, который вы задаете. Например, создайте процедуру f:

f := proc(a:Type::Numeric, b:Type::Numeric)
begin
  if a = b or a > b then
    return(a)
  else
    return(b)
  end_if
end_proc:

Чтобы протестировать процедуру, используйте prog::test функция. Если тест не показывает проблем, prog::test возвращает пустой объект null() и ничего не распечатывает:

prog::test(f(I, I), I)

Если вызов процедуры, протестированный prog::test ошибки или если фактические результаты отличаются от ожидаемых результатов, prog::test информация о печати о выполнении теста. Например, если ваш тест сравнивает два различных комплексных числа, prog::test возвращает следующее сообщение:

prog::test(f(2*I, I), I)
Error in test 2
Input: f(2*I, I)
Expected:  I
Got:       TrapError = [1003, message("symbolic:kernel:NotBoolean")]
Near line: 1

Если ошибка ожидается, можно переписать тест с помощью TrapError опция:

prog::test(f(2*I, I), TrapError = 1003)

Когда вы вызываете prog::test, MuPAD оценивает фактический и ожидаемые результаты прежде, чем сравнить их:

prog::test(f(x^2 | x = 2, 5), 2*2)
Error in test 4
Input: f(x^2 | x = 2, 5)
Expected:  4
Got:       5
Near line: 1

Оценка фактических и ожидаемых результатов может занять много времени. Избегать долгих оценок, prog::test функция позволяет вам задать ограничение по времени для оценки теста. Чтобы ограничить время оценки для конкретного теста, используйте Timeout опция prog::test функция. Например, установите ограничение по времени 2 секундам:

prog::test(f([i! $ i = 1..1000000], [i! $ i = 1..1000000]),
                       [i! $ i = 1..1000000], Timeout = 2)
Error in test interactive
5
Input: f([i! $ i = 1..100000],
[i! $ i = 1..100001])
Expected: 
FAIL
Got:       TrapError = [1320,
"Error: Execution time exceeded"]
Timeout:
2.0 (5.106*prog::ntime())

В этом примере измерение ограничения по времени зависит от вашей аппаратной конфигурации. Протокол испытаний также показывает аппаратно-независимое время в терминах prog::ntime функция.

По умолчанию, prog::test тестирует строгое равенство между фактическим и ожидаемыми результатами. Тестирование равенства значений с плавающей точкой может сбить с толку, когда точность отображения отличается от внутренней точности. В этом случае различные числа с плавающей запятой могут выглядеть идентичными. Таким образом, со значениями по умолчанию DIGITS и Pref::outputDigits, приближение с плавающей точкой 1/3 и номера 0.3333333333 выглядит идентичным:

prog::test(float(1/3), 0.3333333333)
Error in test 5
Input: float(1/3)
Expected:  0.3333333333
Got:       0.3333333333
Near line: 1

Внутренне, MuPAD использует больше чем 10 цифр, чтобы аппроксимировать 1/3 числом с плавающей запятой. Система добавляет защитные цифры для увеличенной точности. Чтобы видеть, как много защитных цифр системное использование, увеличьте число выходных цифр с помощью Pref::outputDigits функция. Затем протестируйте равенство чисел снова:

Pref::outputDigits(20):
prog::test(float(1/3), 0.3333333333)
Error in test 6
Input: float(1/3)
Expected:  0.3333333333
Got:       0.33333333333333333304
Near line: 2

Когда вы тестируете равенство чисел с плавающей запятой, может быть полезно протестировать аппроксимированное равенство. Аппроксимированным оператором равенства в MuPAD является ~=. Соответствующей функцией является _approx. prog::test функция позволяет вам выбрать метод для сравнения фактического и ожидаемые результаты. Например, 1/3 приблизительно равен 0,3333333333 в точности с 10 цифрами по умолчанию:

prog::test(float(1/3), 0.3333333333, Method= `~=`)

Кроме того, использование Method опция позволяет вам задать больше чем одно приемлемое решение. Например, если вы случайным образом выбираете одно решение следующего уравнения, можно получить любое из его четырех допустимых решений:

i := random(1..4):
prog::test(solve(x^4 - 16 = 0, x)[i()],
      {-2, 2, -2*I, 2*I}, Method= _in)

Для дальнейших расчетов восстановите выходную точность по умолчанию:

Pref::outputDigits(UseDigits):
Для просмотра документации необходимо авторизоваться на сайте