Блокноты 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):