Improve floating point comparisons in unit tests
authorTeemu Murtola <teemu.murtola@gmail.com>
Sun, 23 Feb 2014 19:42:17 +0000 (21:42 +0200)
committerGerrit Code Review <gerrit@gerrit.gromacs.org>
Thu, 27 Feb 2014 21:38:26 +0000 (22:38 +0100)
commit15eb6d13841f0ed77d8951edb7e7db9a7885aeb4
tree1fa9a8b9572ab9f17a90242628f40f129fab6c84
parentf2777b4a4bb67ad250317b7cbd1362c0e60e1cbb
Improve floating point comparisons in unit tests

Improve basic floating point comparison support:
- Replace EXPECT_NEAR_TOL with a more flexible alternative that allows
  specifying various tolerances.
- Some Doxygen improvements in testasserts.h.

Additionally, make the reference data framework use the new approach:
- Add a tolerance setting to the reference data framework, and make the
  default tolerance a lot stricter.
- Store the reference data with enough precision to allow lossless
  roundtrips.  This makes them more difficult to inspect visually with
  the XSLT files, but that can be addressed separately.
- Run FFT tests with GMX_FFT_FLAG_CONSERVATIVE to make the results with
  FFTW have less variance.  The 3D FFT tests were already using this,
  but others weren't.  Set the tolerance for the FFT tests based on a
  bit of testing of what works.  It should now pass even without the
  conservative flag, at least most of the time.  The tolerance is still
  lower than what it was earlier even for single, and a lot stricter for
  double.
- Regenerated all reference values from a double-precision build.
  For the FFT tests, used fftpack without optimizations.

Change-Id: I187dd9be20fd17cc8b3e779dcd9dbad34043bb00
97 files changed:
cmake/legacy_and_external.supp
src/gromacs/analysisdata/tests/refdata/AbstractAverageHistogramTest_ResamplesAtDoubleBinWidth.xml
src/gromacs/analysisdata/tests/refdata/AbstractAverageHistogramTest_ResamplesAtDoubleBinWidthWithIntegerBins.xml
src/gromacs/analysisdata/tests/refdata/AverageModuleTest_BasicTest.xml
src/gromacs/analysisdata/tests/refdata/AverageModuleTest_CanCustomizeXAxis.xml
src/gromacs/analysisdata/tests/refdata/AverageModuleTest_HandlesDataSetAveraging.xml
src/gromacs/analysisdata/tests/refdata/AverageModuleTest_HandlesMultipleDataSets.xml
src/gromacs/analysisdata/tests/refdata/AverageModuleTest_HandlesMultipointData.xml
src/gromacs/analysisdata/tests/refdata/BinAverageModuleTest_ComputesCorrectly.xml
src/gromacs/analysisdata/tests/refdata/BinAverageModuleTest_ComputesCorrectlyWithAll.xml
src/gromacs/analysisdata/tests/refdata/BinAverageModuleTest_HandlesMultipleDataSets.xml
src/gromacs/analysisdata/tests/refdata/FrameAverageModuleTest_BasicTest.xml
src/gromacs/analysisdata/tests/refdata/FrameAverageModuleTest_HandlesMultipleDataSets.xml
src/gromacs/analysisdata/tests/refdata/LifetimeModuleTest_BasicTest.xml
src/gromacs/analysisdata/tests/refdata/LifetimeModuleTest_CumulativeTest.xml
src/gromacs/analysisdata/tests/refdata/LifetimeModuleTest_HandlesMultipleDataSets.xml
src/gromacs/analysisdata/tests/refdata/SimpleHistogramModuleTest_ComputesCorrectly.xml
src/gromacs/analysisdata/tests/refdata/SimpleHistogramModuleTest_ComputesCorrectlyWithAll.xml
src/gromacs/analysisdata/tests/refdata/WeightedHistogramModuleTest_ComputesCorrectly.xml
src/gromacs/analysisdata/tests/refdata/WeightedHistogramModuleTest_ComputesCorrectlyWithAll.xml
src/gromacs/analysisdata/tests/refdata/WeightedHistogramModuleTest_HandlesMultipleDataSets.xml
src/gromacs/fft/tests/fft.cpp
src/gromacs/fft/tests/refdata/7_8_25_36_60_FFTTest1D_Complex_0.xml
src/gromacs/fft/tests/refdata/7_8_25_36_60_FFTTest1D_Complex_1.xml
src/gromacs/fft/tests/refdata/7_8_25_36_60_FFTTest1D_Complex_2.xml
src/gromacs/fft/tests/refdata/7_8_25_36_60_FFTTest1D_Complex_3.xml
src/gromacs/fft/tests/refdata/7_8_25_36_60_FFTTest1D_Complex_4.xml
src/gromacs/fft/tests/refdata/7_8_25_36_60_FFTTest1D_Real_0.xml
src/gromacs/fft/tests/refdata/7_8_25_36_60_FFTTest1D_Real_1.xml
src/gromacs/fft/tests/refdata/7_8_25_36_60_FFTTest1D_Real_2.xml
src/gromacs/fft/tests/refdata/7_8_25_36_60_FFTTest1D_Real_3.xml
src/gromacs/fft/tests/refdata/7_8_25_36_60_FFTTest1D_Real_4.xml
src/gromacs/fft/tests/refdata/FFFTest3D_Real5_6_9.xml
src/gromacs/fft/tests/refdata/FFTTest_Real2DLength18_15Test.xml
src/gromacs/fft/tests/refdata/ManyFFTTest_Complex1DLength48Multi5Test.xml
src/gromacs/fft/tests/refdata/ManyFFTTest_Real1DLength48Multi5Test.xml
src/gromacs/selection/tests/nbsearch.cpp
src/gromacs/selection/tests/refdata/PositionCalculationTest_ComputesAtomPositions.xml
src/gromacs/selection/tests/refdata/PositionCalculationTest_ComputesGroupCOGPositions.xml
src/gromacs/selection/tests/refdata/PositionCalculationTest_ComputesGroupCOMPositions.xml
src/gromacs/selection/tests/refdata/PositionCalculationTest_ComputesPositionMask.xml
src/gromacs/selection/tests/refdata/PositionCalculationTest_ComputesPositionsWithCompleteMax.xml
src/gromacs/selection/tests/refdata/PositionCalculationTest_ComputesPositionsWithCompleteWhole.xml
src/gromacs/selection/tests/refdata/PositionCalculationTest_ComputesResidueCOGPositions.xml
src/gromacs/selection/tests/refdata/PositionCalculationTest_ComputesResidueCOMPositions.xml
src/gromacs/selection/tests/refdata/PositionCalculationTest_HandlesIdenticalStaticCalculations.xml
src/gromacs/selection/tests/refdata/PositionCalculationTest_HandlesOverlappingStaticCalculations.xml
src/gromacs/selection/tests/refdata/SelectionCollectionDataTest_ComputesMassesAndCharges.xml
src/gromacs/selection/tests/refdata/SelectionCollectionDataTest_ComputesMassesAndChargesWithoutTopology.xml
src/gromacs/selection/tests/refdata/SelectionCollectionDataTest_HandlesArithmeticExpressions.xml
src/gromacs/selection/tests/refdata/SelectionCollectionDataTest_HandlesComplexNumericVariables.xml
src/gromacs/selection/tests/refdata/SelectionCollectionDataTest_HandlesConstantPositionInVariable.xml
src/gromacs/selection/tests/refdata/SelectionCollectionDataTest_HandlesConstantPositions.xml
src/gromacs/selection/tests/refdata/SelectionCollectionDataTest_HandlesCoordinateKeywords.xml
src/gromacs/selection/tests/refdata/SelectionCollectionDataTest_HandlesDistanceKeyword.xml
src/gromacs/selection/tests/refdata/SelectionCollectionDataTest_HandlesMergeModifier.xml
src/gromacs/selection/tests/refdata/SelectionCollectionDataTest_HandlesMinDistanceKeyword.xml
src/gromacs/selection/tests/refdata/SelectionCollectionDataTest_HandlesNumericComparisons.xml
src/gromacs/selection/tests/refdata/SelectionCollectionDataTest_HandlesNumericConstantsInVariables.xml
src/gromacs/selection/tests/refdata/SelectionCollectionDataTest_HandlesNumericVariables.xml
src/gromacs/selection/tests/refdata/SelectionCollectionDataTest_HandlesPermuteModifier.xml
src/gromacs/selection/tests/refdata/SelectionCollectionDataTest_HandlesPlusModifier.xml
src/gromacs/selection/tests/refdata/SelectionCollectionDataTest_HandlesPositionKeywords.xml
src/gromacs/selection/tests/refdata/SelectionCollectionDataTest_HandlesPositionVariables.xml
src/gromacs/selection/tests/refdata/SelectionCollectionDataTest_HandlesWithinConstantPositions.xml
src/gromacs/selection/tests/refdata/SelectionCollectionDataTest_HandlesWithinKeyword.xml
src/gromacs/trajectoryanalysis/tests/refdata/AngleModuleTest_ComputesDihedrals.xml
src/gromacs/trajectoryanalysis/tests/refdata/AngleModuleTest_ComputesMultipleAngles.xml
src/gromacs/trajectoryanalysis/tests/refdata/AngleModuleTest_ComputesPlaneZAxisAngles.xml
src/gromacs/trajectoryanalysis/tests/refdata/AngleModuleTest_ComputesSimpleAngles.xml
src/gromacs/trajectoryanalysis/tests/refdata/AngleModuleTest_ComputesVectorPairAngles.xml
src/gromacs/trajectoryanalysis/tests/refdata/AngleModuleTest_ComputesVectorPlanePairAngles.xml
src/gromacs/trajectoryanalysis/tests/refdata/AngleModuleTest_ComputesVectorSphereNormalZAxisAngles.xml
src/gromacs/trajectoryanalysis/tests/refdata/AngleModuleTest_ComputesVectorTimeZeroAngles.xml
src/gromacs/trajectoryanalysis/tests/refdata/AngleModuleTest_HandlesDynamicSelections.xml
src/gromacs/trajectoryanalysis/tests/refdata/AngleModuleTest_HandlesOneVsMultipleVectorAngles.xml
src/gromacs/trajectoryanalysis/tests/refdata/AngleModuleTest_HandlesOneVsMultipleVectorGroupsAngles.xml
src/gromacs/trajectoryanalysis/tests/refdata/DistanceModuleTest_ComputesDistances.xml
src/gromacs/trajectoryanalysis/tests/refdata/DistanceModuleTest_ComputesMultipleDistances.xml
src/gromacs/trajectoryanalysis/tests/refdata/DistanceModuleTest_HandlesDynamicSelections.xml
src/gromacs/trajectoryanalysis/tests/refdata/FreeVolumeModuleTest_ComputesFreeVolume.xml
src/gromacs/trajectoryanalysis/tests/refdata/FreeVolumeModuleTest_ComputesFreeVolumeSelection.xml
src/gromacs/trajectoryanalysis/tests/refdata/SelectModuleTest_BasicTest.xml
src/gromacs/trajectoryanalysis/tests/refdata/SelectModuleTest_HandlesMaxPDBOutput.xml
src/gromacs/trajectoryanalysis/tests/refdata/SelectModuleTest_HandlesPDBOutputWithNonPDBInput.xml
src/gromacs/trajectoryanalysis/tests/refdata/SelectModuleTest_HandlesPDBOutputWithPDBInput.xml
src/gromacs/trajectoryanalysis/tests/refdata/SelectModuleTest_HandlesSelectedPDBOutput.xml
src/gromacs/trajectoryanalysis/tests/refdata/SelectModuleTest_NormalizesSizes.xml
src/gromacs/trajectoryanalysis/tests/refdata/SelectModuleTest_WritesResidueIndices.xml
src/gromacs/trajectoryanalysis/tests/refdata/SelectModuleTest_WritesResidueNumbers.xml
src/testutils/refdata.cpp
src/testutils/refdata.h
src/testutils/testasserts.cpp [new file with mode: 0644]
src/testutils/testasserts.h
src/testutils/tests/CMakeLists.txt
src/testutils/tests/refdata.cpp
src/testutils/tests/testasserts.cpp [new file with mode: 0644]