Matlab 相等性的单元测试,包括NaN
我正在使用Matlab 相等性的单元测试,包括NaN,matlab,unit-testing,equality,Matlab,Unit Testing,Equality,我正在使用matlab.unittest框架进行一些测试。我需要与确实相同的数组进行比较。但是,它们包含一些NaN值(在相同的位置)。现在,如果发出命令isequal(NaN,NaN),结果将为false,因为NaN根据定义不相等。这意味着当使用verifyEqual命令时,我的测试失败 当两个数组确实相同但包含一些NaN值时,如何使用单元测试框架测试两个数组的相等性?编辑 目前,时间表确实使用了isequal而不是isequaln。然而,我们正在研究在未来版本的MATLAB中,默认情况下使用i
matlab.unittest
框架进行一些测试。我需要与确实相同的数组进行比较。但是,它们包含一些NaN
值(在相同的位置)。现在,如果发出命令isequal(NaN,NaN)
,结果将为false,因为NaN
根据定义不相等。这意味着当使用verifyEqual
命令时,我的测试失败
当两个数组确实相同但包含一些NaN
值时,如何使用单元测试框架测试两个数组的相等性?编辑
目前,时间表确实使用了isequal
而不是isequaln
。然而,我们正在研究在未来版本的MATLAB中,默认情况下使用isequal
优于isequal
同时,您当前的解决方案也会起作用,但以下两种方法可能会让您获得更好的诊断:
>> testCase.verifyEqual(timetable2table(actual), timetable2table(actual));
Interactive verification failed.
---------------------
Framework Diagnostic:
---------------------
verifyEqual failed.
--> Path to failure: <Value>.Data
--> The values are not equal using "isequaln".
--> Failure table:
Index Actual Expected Error RelativeError
_____ ______ ________ _____ _____________
1 50 20 30 1.5
2 50 20 30 1.5
Actual double:
50
50
Expected double:
20
20
Actual Value:
2×2 table
Time Data
____________________ ____
20-Oct-2017 00:00:00 50
21-Oct-2017 00:00:00 50
Expected Value:
2×2 table
Time Data
____________________ ____
20-Oct-2017 00:00:00 20
21-Oct-2017 00:00:00 20
>>
import matlab.unittest.diagnostics.Diagnostic;
>> testCase.verifyReturnsTrue(@() isequaln(actual, expected),...
Diagnostic.join(actual, expected))
Interactive verification failed.
----------------
Test Diagnostic:
----------------
2×1 timetable
Time Data
____________________ ____
20-Oct-2017 00:00:00 50
21-Oct-2017 00:00:00 50
----------------
Test Diagnostic:
----------------
2×1 timetable
Time Data
____________________ ____
20-Oct-2017 00:00:00 20
21-Oct-2017 00:00:00 20
---------------------
Framework Diagnostic:
---------------------
verifyReturnsTrue failed.
--> The function handle did not evaluate to "true".
--> Returned value:
logical
0
Evaluated Function:
function_handle with value:
@()isequaln(actual,expected)
>>
/EDIT
根据您使用的数据类型(以及MATLAB的哪个版本)verifyEqual
应该为您提供所需的数据类型
这些数组是double类型的吗?如果是这样的话,verifyEqual
应该是您所需要的全部(并且将为您提供比解决方法更好的诊断)
如果
verifyEqual
不起作用,您能告诉我您使用的是哪个版本的MATLAB以及verifyEqual
调用不符合您的要求吗?怎么样?或者如果您需要元素级比较:a==b |(isnan(a)&isnan(b))
@Zepisequaln
正在使用命令行生成正确的结果。但是,我需要将此测试合并到单元测试类中。现在,我正在使用verifyEqual
,例如testCase.verifyEqual(实际的,预期的)
-不确定如何合并isequaln
!我从未使用过matlab.unittest,但看起来这个肮脏的解决方法可以工作:testCase.verifyEqual(isequaln(a,b),true)
改进:testCase.verifyTrue(isequaln(a,b))
我正在将时间表与2017a进行比较。我认为verifyEqual适用于数组(和表?),但不适用于时间表。
import matlab.unittest.diagnostics.Diagnostic;
>> testCase.verifyReturnsTrue(@() isequaln(actual, expected),...
Diagnostic.join(actual, expected))
Interactive verification failed.
----------------
Test Diagnostic:
----------------
2×1 timetable
Time Data
____________________ ____
20-Oct-2017 00:00:00 50
21-Oct-2017 00:00:00 50
----------------
Test Diagnostic:
----------------
2×1 timetable
Time Data
____________________ ____
20-Oct-2017 00:00:00 20
21-Oct-2017 00:00:00 20
---------------------
Framework Diagnostic:
---------------------
verifyReturnsTrue failed.
--> The function handle did not evaluate to "true".
--> Returned value:
logical
0
Evaluated Function:
function_handle with value:
@()isequaln(actual,expected)
>>