Add flag to CompareWorkspaces
so users can specify NaN == NaN
behavior
#38075
+459
−144
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description of work
Summary of work
Adds a flag to set whether
NaN
values should be considered equal to theCompareWorkspaces
algorithm.Purpose of work
When
CompareWorkspaces
was originally written, it was written so that if two workspaces hadNaN
for a value, the twoNaN
values would compare as equal. This is contrary to the IEEE 745 specification, which says thatNaN
compares false against everything, including otherNaN
s, so thatNaN == NaN
should evaluate as false.In attempting to fix this, it was found there are at least a few tests relying on the old behavior of comparing
NaN
s. Therefore, this provides a flag toCompareWorkspaces
so that users can elect forNaN
s to be considered equal.Further detail of work
Within
CompareWorkspaces
, the methods to check if two values are within a tolerance have been replaced to rely on theFloatingPointComparison
operators, with a check to returntrue
if both values areNaN
and theNaNsEqual
flag was set totrue
.The
CheckAllData
flag will now work on two type of peaks workspaces.More tests were added for
CompareWorkspaces
andFloatingPointComparison
, to handle more cases involvingNaN
s or extreme numbers.A few cppcheck suppressions were removed.
Also, some comments were added in some parts of the code. These places were found using a search for
abs(
andfabs(
within the code for possible replacements withwithinAbsoluteDifference
. While not suitable for replacements, they could lead to improvements in the code.To test:
New tests were added to
CompareWorkspacesTest.h
TableColumnTest.h
FloatPointComparisonTest.h
covering several situations with
NaN
s and also with extreme values.These tests should be convincing that the behavior of
NaN
s with and without the flag is as expected.Reviewer
Please comment on the points listed below (full description).
Your comments will be used as part of the gatekeeper process, so please comment clearly on what you have checked during your review. If changes are made to the PR during the review process then your final comment will be the most important for gatekeepers. In this comment you should make it clear why any earlier review is still valid, or confirm that all requested changes have been addressed.
Code Review
Functional Tests
Does everything look good? Mark the review as Approve. A member of
@mantidproject/gatekeepers
will take care of it.Gatekeeper
If you need to request changes to a PR then please add a comment and set the review status to "Request changes". This will stop the PR from showing up in the list for other gatekeepers.