Tests: Difference between revisions

877 bytes added ,  10 September 2021
slight rearrangement to incorporate the "%!test fail" syntax for including errors and warnings in test blocks.
(→‎Shared functions: "between" is only for two)
(slight rearrangement to incorporate the "%!test fail" syntax for including errors and warnings in test blocks.)
Line 89: Line 89:
=== Assert ===
=== Assert ===


{{codeline|%!assert}} lines are the simplest tests to write and also the most
{{codeline|%!assert}} lines are the simplest one-line tests to write and also
common:
the most common:


<syntaxhighlight lang="Octave">
<syntaxhighlight lang="Octave">
Line 101: Line 101:
an Octave function that throws an error when two arguments fail to compare.
an Octave function that throws an error when two arguments fail to compare.


=== Test ===
=== Error / Warning ===
 
It is also important to test that a function performs its checks correctly
and throws errors (or warnings) when it receives garbage.  This can be done with
{{codeline|error}} (or {{codeline|warning}}) blocks:
 
<syntaxhighlight lang="Octave">
%!error foo ()  # test that causes any error
%!error <BAR must be a positive integer> foo (-1.5)  # test that throws specific error message
%!error id=Octave:invalid-fun-call foo ()  # test that throws specific error id
 
%!warning foo ()  # test that causes any warning
%!warning <negative values might give inaccurate results> foo (-1.5)  # test that triggers a specific warning message
%!warning id=BAR:possibly-inaccurate-result foo (-1.5)  # test that triggers a specific warning id
</syntaxhighlight>
 
These are actually shorthand versions of
{{codeline|%!test fail ("foo()", "error message")}} and {{codeline|%!test fail ("foo()", "warning", "warning message")}}, where {{codeline|%!fail}} returns true if the supplied code returns an error or warning.
 
=== Test Blocks===


While single {{codeline|%!assert}} lines are the most common used tests, {{codeline|%!test}} blocks offer more features and flexibility.  The code within {{codeline|%!test}} blocks is simply processed through the Octave interpreter.  If the code generates an error, the test is said to fail.  Often {{codeline|%!test}} blocks end with a call to {{codeline|assert}}:
While single {{codeline|%!assert}}, {{codeline|%!error}}, and {{codeline|%!warning}} lines are the most common used tests, {{codeline|%!test}} blocks offer more features and flexibility.  The code within {{codeline|%!test}} blocks is simply processed through the Octave interpreter.  If the code generates an error, the test is said to fail.  Often {{codeline|%!test}} blocks end with a call to {{codeline|assert}}:


<syntaxhighlight lang="Octave">
<syntaxhighlight lang="Octave">
Line 124: Line 143:
</syntaxhighlight>
</syntaxhighlight>


=== Error / Warning ===
==== Test for failure ====
 
If a warning or error message cannot be tested with one of the single-line tests mentioned above, the {{codeline|fail}} function can be used within a test block verify expected error and warning functionality such as:
It is also important to test that a function performs its checks correctly
and throws errors (or warnings) when it receives garbage.  This can be done with
{{codeline|error}} (or {{codeline|warning}}) blocks:


<syntaxhighlight lang="Octave">
<syntaxhighlight lang="Octave">
%!error foo ()  # test that causes any error
%!test
%!error <BAR must be a positive integer> foo (-1.5)  # test that throws specific error message
%! a = [1 2 3];
%!error id=Octave:invalid-fun-call foo () # test that throws specific error id
%! b = [1 2];
%! fail ("a + b", "nonconformant arguments")


%!warning foo ()  # test that causes any warning
%!test
%!warning <negative values might give inaccurate results> foo (-1.5)  # test that triggers a specific warning message
%! a = 111;
%!warning id=BAR:possibly-inaccurate-result foo (-1.5)  # test that triggers a specific warning id
%! b = 112;
%! fail ("['foo', a, b]", "warning", "implicit conversion from numeric to char")
</syntaxhighlight>
</syntaxhighlight>
The tests above pass if the errors/warnings occur as expected.


=== Shared functions ===
=== Shared functions ===
Line 161: Line 181:
%! endfor
%! endfor
</syntaxhighlight>
</syntaxhighlight>


[[Category:Testing]]
[[Category:Testing]]
[[Category:Development]]
[[Category:Development]]
154

edits