function tf=cosmo_isequaln(x,y)
% compares two input for equality with NaNs considered being equal
%
% tf=cosmo_isequaln(x,y)
%
% Inputs:
% x first input
% y second input, to be compared with first input
%
% Output:
% tf true if x and y are equal, with NaNs considered
% to be equal; false otherwise
%
% Examples:
% cosmo_isequaln(2,2)
% > true
% cosmo_isequaln(2,3)
% > false
% % using the builtin isequal, NaNs are considered not equal
% isequal(NaN,NaN)
% > false
% % using cosmo_isequaln, NaNs are considered to be equal to each other
% cosmo_isequaln(NaN,NaN)
% > true
% Notes:
% - in earlier versions of Matlab, isequaln did not exist;
% isequalwithequalnans was used instead. However isequaln will be
% deprecated in GNU Octave 4.2. This function is there included for
% compatibility with both old versions of Matlab and future versions of
% GNU Octave
%
% See also: isequaln, isequalwithequalnans
comparison_func=get_comparison_func();
tf=comparison_func(x,y);
function func=get_comparison_func()
persistent cached_comparison_func
if isempty(cached_comparison_func)
cached_comparison_func=find_comparison_func_helper();
end
func=cached_comparison_func;
function func=find_comparison_func_helper()
candidates_str={'isequaln','isequalwithequalnans'};
has_func=@(x)~isempty(which(x,'builtin'));
idx=find(cellfun(has_func,candidates_str),1,'first');
if ~isempty(idx)
func=str2func(candidates_str{idx});
return
end
error('No comparison function found from candidates: %s',...
cosmo_strjoin(candidates_str,', '));