assertВы можете использовать MATLAB
®assert для определения свойств входов первичных функций непосредственно в файле MATLAB.
Используйте assert для вызова стандартных функций MATLAB для указания класса, размера и сложности входов первичных функций.
assert ( isa ( param, 'class_name') )
Задает входной параметр param в class_name класса MATLAB. Например, чтобы задать класс ввода U в 32-битное целое число со знаком, вызовите:
... assert(isa(U,'embedded.fi')); ...
Примечание
Если для класса входного параметра задано значение fi, вы также должны установить его numerictype, см. раздел Задание числового типа ввода с фиксированной точкой. Также можно задать его fimath свойства см. в разделе Задание fimath ввода фиксированной точки.
Если для класса входного параметра задано значение struct, необходимо указать свойства каждого поля в структуре в порядке, в котором определяются поля в определении структуры.
assert ( isfi ( param ) ) assert ( isa ( param, 'embedded.fi' ) )
Задает входной параметр param в класс MATLAB fi(числовой объект с фиксированной точкой). Например, чтобы задать класс ввода U кому fi, позвоните:
... assert(isfi(U)); ...
... assert(isa(U,'embedded.fi')); ...
Примечание
Если для класса входного параметра задано значение fi, вы также должны установить его numerictype, см. раздел Задание числового типа ввода с фиксированной точкой. Также можно задать его fimath свойства см. в разделе Задание fimath ввода фиксированной точки.
assert ( isstruct ( param ) )
Задает входной параметр param в класс MATLAB struct (структура). Например, чтобы задать класс ввода U в struct, позвоните:
... assert(isstruct(U)); ...
или
... assert(isa(U,'struct')); ...
Примечание
Если для класса входного параметра задано значение struct, необходимо указать свойства каждого поля в структуре в порядке, в котором определяются поля в определении структуры.
assert(iscell( param)) assert(isa(param, 'cell'))
Задает входной параметр param в класс MATLAB cell (массив ячеек). Например, чтобы задать класс ввода C в cell, позвоните:
... assert(iscell(C)); ...
или
... assert(isa(C, 'cell')); ...
Сведения о задании свойств элементов массива ячеек см. в разделе Задание свойств массивов ячеек.
assert ( all ( size (param) == [dims ] ) )
Задает входной параметр param до размера, заданного размерами dims. Например, для задания размера входных данных U в матрицу 3 на 2, вызовите:
... assert(all(size(U)== [3 2])); ...
assert ( isscalar (param ) ) assert ( all ( size (param) == [ 1 ] ) )
Задание размера входного параметра param в скаляр. Например, для задания размера входных данных U для скаляра вызовите:
... assert(isscalar(U)); ...
... assert(all(size(U)== [1])); ...
assert ( isreal (param ) )
Указывает, что входной параметр param реально. Например, чтобы указать этот вход U является реальным, вызов:
... assert(isreal(U)); ...
assert ( ~isreal (param ) )
Указывает, что входной параметр param является сложным. Например, чтобы указать этот вход U является сложным, вызов:
... assert(~isreal(U)); ...
assert ( isequal ( numerictype ( fiparam ), T ) )
Устанавливает numerictype свойства fi входной параметр fiparam в numerictype объект T. Например, чтобы указать numerictype свойство ввода с фиксированной точкой U как подписанный numerictype объект T с длиной 32-разрядного слова и длиной 30-разрядной дроби используйте следующий код:
... % Define the numerictype object. T = numerictype(1, 32, 30); % Set the numerictype property of input U to T. assert(isequal(numerictype(U),T)); ...
assert ( isequal ( fimath ( fiparam ), F ) )
Устанавливает fimath свойства fi входной параметр fiparam в fimath объект F. Например, чтобы указать fimath свойство ввода с фиксированной точкой U для насыщения при переполнении целого числа используйте следующий код:
...
% Define the fimath object.
F = fimath('OverflowAction','Saturate');
% Set the fimath property of input U to F.
assert(isequal(fimath(U),F));
... assert ( function1 ( params ) && function2 ( params ) && function3 ( params ) && ... )
Задает класс, размер и сложность одного или нескольких входных данных с помощью одного assert вызов функции. Например, следующий код указывает, что ввод U является двойной, комплексной, 3 на 3 матрицей и входным V - 16-битное целое число без знака:
... assert(isa(U,'double') && ~isreal(U) && all(size(U) == [3 3]) && isa(V,'uint16')); ...
Следуйте этим правилам при использовании assert для задания свойств входов первичных функций:
Звонить assert функции в начале основной функции, перед любыми операциями управления потоком, такими как if операторы или вызовы подпрограмм.
Не звонить assert функции внутри условных конструкций, такие как if, for, while, и switch заявления.
Если для класса входного параметра задано значение fi:
Необходимо также установить его numerictype, см. раздел Задание числового типа ввода с фиксированной точкой.
Также можно задать его fimath свойства см. в разделе Задание fimath ввода фиксированной точки.
Если для класса входного параметра задано значение struct, необходимо указать класс, размер и сложность каждого поля в структуре в порядке, в котором определяются поля в определении структуры.
В следующем примере основная функция MATLAB emcsqrtfi принимает один вход с фиксированной точкой: x. Код задает следующие свойства для этого ввода:
| Собственность | Стоимость |
|---|---|
| класс | fi |
numerictype | numerictype объект T, как указано в основной функции |
fimath | fimath объект F, как указано в основной функции |
| размер | scalar (по умолчанию) |
| сложность | real (по умолчанию) |
function y = emcsqrtfi(x)
T = numerictype('WordLength',32,'FractionLength',23,...
'Signed',true);
F = fimath('SumMode','SpecifyPrecision',...
'SumWordLength',32,'SumFractionLength',23,...
'ProductMode','SpecifyPrecision',...
'ProductWordLength',32,'ProductFractionLength',23);
assert(isfi(x));
assert(isequal(numerictype(x),T));
assert(isequal(fimath(x),F));
y = sqrt(x);Определение класса MATLAB cell (массив ячеек), используйте один из следующих синтаксисов:
assert(iscell(param)) assert(isa( param, 'cell'))
Например, чтобы задать класс ввода C кому cell, использовать:
... assert(iscell(C)); ...
или
... assert(isa(C, 'cell')); ...
Можно также указать размер массива ячеек и свойства элементов массива ячеек. Количество указанных элементов определяет, является ли массив ячеек однородным или гетерогенным. См. раздел Генерация кода для массивов ячеек (кодер MATLAB).
Если указаны свойства только первого элемента, массив ячеек является однородным. Например, следующий код указывает, что C представляет собой однородный массив ячеек 1x3, элементы которого являются двойными 1x1.
...
assert(isa(C, 'cell'));
assert(all(size(C) == [1 3]));
assert(isa(C{1}, 'double'));
...При указании свойств каждого элемента массив ячеек является гетерогенным. Например, следующий код задает массив гетерогенных ячеек 1x2, первый элемент которого имеет значение 1x1 char, а второй элемент - значение 1x3 double.
...
assert(isa(C, 'cell'));
assert(all(size(C) == [1 2]));
assert(isa(C{1}, 'char'));
assert(all(size(C{2}) == [1 3]));
assert(isa(C{2}, 'double'));
...При указании нескольких элементов невозможно указать, что массив ячеек имеет переменный размер, даже если все элементы имеют одинаковые свойства. Например, следующий код задает массив ячеек переменного размера. Поскольку код определяет свойства первого и второго элементов, создание кода завершается неуспешно.
...
assert(isa(C, 'cell'));
assert(all(size(C) <= [1 2]));
assert(isa(C{1}, 'double'));
assert(isa(C{2}, 'double'));
...В предыдущем примере, если указан только первый элемент, можно указать, что массив ячеек имеет переменный размер. Например:
...
assert(isa(C, 'cell'));
assert(all(size(C) <= [1 2]));
assert(isa(C{1}, 'double'));
...Предположим, что вы определили S как следующая скалярная структура MATLAB:
S = struct('r',double(1),'i',fi(4,true,8,0));S и его поля при передаче в качестве входных данных для функции MATLAB:function y = fcn(S)
% Specify the class of the input as struct.
assert(isstruct(S));
% Specify the size of the fields r and i
% in the order in which you defined them.
T = numerictype('Wordlength', 8,'FractionLength', ...
0,'signed',true);
assert(isa(S.r,'double'));
assert(isfi(S.i) && isequal(numerictype(S.i),T));
y = S;Примечание
Единственный способ назвать поле в структуре - это задать хотя бы одно из его свойств. Поэтому в предыдущем примере assert функция указывает, что поле S.r имеет тип double, хотя double является значением по умолчанию.
Для массивов структуры необходимо выбрать репрезентативный элемент массива для указания свойств каждого поля. Например, предположим, что определено S как следующий массив структур MATLAB «1 на 2»:
S = struct('r',{double(1), double(2)},'i',...
{fi(4,1,8,0), fi(5,1,8,0)}); Следующий код определяет класс и размер каждого поля ввода структуры S с использованием первого элемента массива:
function y = fcn(S)
% Specify the class of the input S as struct.
assert(isstruct(S));
T = numerictype('Wordlength', 8,'FractionLength', ...
0,'signed',true);
% Specify the size of the fields r and i
% based on the first element of the array.
assert(all(size(S) == [1 2]));
assert(isa(S(1).r,'double'));
assert(isfi(S(1).i) && isequal(numerictype(S(1).i),T));
y = S;Примечание
Единственный способ назвать поле в структуре - это задать хотя бы одно из его свойств. Поэтому в приведенном выше примере assert функция указывает, что поле S(1).r имеет тип double, хотя double является значением по умолчанию.