You are here

Unit testing in MRPT

Each of MRPT's libraries (see list) have its own benchmark of tests to verify and assure that each class of function behaves as expected. For doing so, MRPT uses Google's gtest unit testing library (read more on the concept of unit testing in this article on Wikipedia). 

The mechanism to add new tests is fairly simple, since the CMake scripts worry of recognizing all those source files that implement tests (as explained here) and put them out of the normal MRPT libraries into other special programs which are automatically executed upon testing. As a result, under Visual Studio users can test the correct behavior of MRPT by issuing a "build" command on the target "test". On Unix/Linux/MacOS the same is achieved issuing a make test command.

Currently, there are more than 100 tests covering aspects from elemental matrix operations to executions of complex SLAM algorithms with predefined datasets, in many cases using randomized data and several input datasets for each test. In all cases, the results are compared to the expected values and errors are reported upon mismatches. Naturally, tests are not always 100% effective and some bugs may still exists, even in unit tested-code, but the chances than future changes break something are greatly reduced thanks to those tests.

It's also important to note that MRPT builds in Debian/Fedora/Ubuntu repositories, as well as binaries for Windows, are always tested prior to release in order to assure they work as expected. So, there're reasonable warranties of stable distributions to always work properly, but we're always improving them and adding more tests with each MRPT version. As an example, these are the current tests as of MRPT 0.9.5:

$ make test
[ 34%] Built target mrpt-base
[ 48%] Built target mrpt-opengl
[ 55%] Built target mrpt-obs
[ 57%] Built target mrpt-gui
[ 70%] Built target mrpt-vision
[ 72%] Built target mrpt-scanmatching
[ 74%] Built target mrpt-graphs
[ 76%] Built target mrpt-bayes
[ 82%] Built target mrpt-maps
[ 89%] Built target mrpt-slam
[ 89%] Built target mrpt-graphslam
[ 89%] Built target test_mrpt_graphslam
[==========] Running 2 tests from 2 test cases.
[----------] Global test environment set-up.
[----------] 1 test from GraphSlamLevMarqTester2D
[ RUN      ] GraphSlamLevMarqTester2D.OptimizeSampleRingPath
[       OK ] GraphSlamLevMarqTester2D.OptimizeSampleRingPath (453 ms)
[----------] 1 test from GraphSlamLevMarqTester2D (453 ms total)

[----------] 1 test from GraphSlamLevMarqTester3D
[ RUN      ] GraphSlamLevMarqTester3D.OptimizeSampleRingPath
[       OK ] GraphSlamLevMarqTester3D.OptimizeSampleRingPath (2023 ms)
[----------] 1 test from GraphSlamLevMarqTester3D (2023 ms total)

[----------] Global test environment tear-down
[==========] 2 tests from 2 test cases ran. (2476 ms total)
[  PASSED  ] 2 tests.
[ 89%] Built target run_tests_mrpt_graphslam
[ 89%] Built target mrpt-topography
[ 89%] Built target test_mrpt_topography
[==========] Running 3 tests from 2 test cases.
[----------] Global test environment set-up.
[----------] 1 test from TopographyReconstructPathFrom3RTK
[ RUN      ] TopographyReconstructPathFrom3RTK.sampleDataset
[       OK ] TopographyReconstructPathFrom3RTK.sampleDataset (13 ms)
[----------] 1 test from TopographyReconstructPathFrom3RTK (13 ms total)

[----------] 2 tests from TopographyConversion
[ RUN      ] TopographyConversion.GeodeticToGeocentricToGeodetic
[       OK ] TopographyConversion.GeodeticToGeocentricToGeodetic (0 ms)
[ RUN      ] TopographyConversion.geodeticToENU_WGS84
[       OK ] TopographyConversion.geodeticToENU_WGS84 (0 ms)
[----------] 2 tests from TopographyConversion (0 ms total)

[----------] Global test environment tear-down
[==========] 3 tests from 2 test cases ran. (13 ms total)
[  PASSED  ] 3 tests.
[ 89%] Built target run_tests_mrpt_topography
[ 89%] Built target test_mrpt_obs
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from SerializeTestObs
[ RUN      ] SerializeTestObs.WriteReadToMem
[       OK ] SerializeTestObs.WriteReadToMem (1 ms)
[----------] 1 test from SerializeTestObs (1 ms total)

[----------] Global test environment tear-down
[==========] 1 test from 1 test case ran. (1 ms total)
[  PASSED  ] 1 test.
[ 89%] Built target run_tests_mrpt_obs
[ 91%] Built target test_mrpt_scanmatching
[==========] Running 3 tests from 1 test case.
[----------] Global test environment set-up.
[----------] 3 tests from LSRigidTrans6D
[ RUN      ] LSRigidTrans6D.CPose3D
[       OK ] LSRigidTrans6D.CPose3D (0 ms)
[ RUN      ] LSRigidTrans6D.CPose3DQuat
[       OK ] LSRigidTrans6D.CPose3DQuat (0 ms)
[ RUN      ] LSRigidTrans6D.vector
[       OK ] LSRigidTrans6D.vector (0 ms)
[----------] 3 tests from LSRigidTrans6D (0 ms total)

[----------] Global test environment tear-down
[==========] 3 tests from 1 test case ran. (0 ms total)
[  PASSED  ] 3 tests.
[ 91%] Built target run_tests_mrpt_scanmatching
[100%] Built target test_mrpt_base
[==========] Running 107 tests from 19 test cases.
[----------] Global test environment set-up.
[----------] 1 test from FormatTest
[ RUN      ] FormatTest.LargeStrings
[       OK ] FormatTest.LargeStrings (1 ms)
[----------] 1 test from FormatTest (1 ms total)

[----------] 3 tests from SerializeTestBase
[ RUN      ] SerializeTestBase.LoadDemoFile
[       OK ] SerializeTestBase.LoadDemoFile (0 ms)
[ RUN      ] SerializeTestBase.WriteReadToMem
[       OK ] SerializeTestBase.WriteReadToMem (0 ms)
[ RUN      ] SerializeTestBase.CArray
[       OK ] SerializeTestBase.CArray (0 ms)
[----------] 3 tests from SerializeTestBase (0 ms total)

[----------] 1 test from Base64
[ RUN      ] Base64.RandomEncDec
[       OK ] Base64.RandomEncDec (8 ms)
[----------] 1 test from Base64 (8 ms total)

[----------] 5 tests from FileSystem
[ RUN      ] FileSystem.fileNameChangeExtension
[       OK ] FileSystem.fileNameChangeExtension (0 ms)
[ RUN      ] FileSystem.extractFileExtension
[       OK ] FileSystem.extractFileExtension (0 ms)
[ RUN      ] FileSystem.extractFileDirectory
[       OK ] FileSystem.extractFileDirectory (0 ms)
[ RUN      ] FileSystem.extractFileName
[       OK ] FileSystem.extractFileName (0 ms)
[ RUN      ] FileSystem.filePathSeparatorsToNative
[       OK ] FileSystem.filePathSeparatorsToNative (0 ms)
[----------] 5 tests from FileSystem (0 ms total)

[----------] 14 tests from Pose3DTests
[ RUN      ] Pose3DTests.DefaultValues
[       OK ] Pose3DTests.DefaultValues (0 ms)
[ RUN      ] Pose3DTests.Initialization
[       OK ] Pose3DTests.Initialization (0 ms)
[ RUN      ] Pose3DTests.OperatorBracket
[       OK ] Pose3DTests.OperatorBracket (0 ms)
[ RUN      ] Pose3DTests.InverseHM
[       OK ] Pose3DTests.InverseHM (0 ms)
[ RUN      ] Pose3DTests.Compose
[       OK ] Pose3DTests.Compose (0 ms)
[ RUN      ] Pose3DTests.ComposeAndInvComposeWithPoint
[       OK ] Pose3DTests.ComposeAndInvComposeWithPoint (0 ms)
[ RUN      ] Pose3DTests.ComposePointJacob
[       OK ] Pose3DTests.ComposePointJacob (0 ms)
[ RUN      ] Pose3DTests.ComposePointJacobApprox
[       OK ] Pose3DTests.ComposePointJacobApprox (0 ms)
[ RUN      ] Pose3DTests.InvComposePointJacob
[       OK ] Pose3DTests.InvComposePointJacob (0 ms)
[ RUN      ] Pose3DTests.ComposePointJacob_se3
[       OK ] Pose3DTests.ComposePointJacob_se3 (0 ms)
[ RUN      ] Pose3DTests.InvComposePointJacob_se3
[       OK ] Pose3DTests.InvComposePointJacob_se3 (0 ms)
[ RUN      ] Pose3DTests.ExpLnEqual
[       OK ] Pose3DTests.ExpLnEqual (0 ms)
[ RUN      ] Pose3DTests.Jacob_dExpe_de_at_0
[       OK ] Pose3DTests.Jacob_dExpe_de_at_0 (0 ms)
[ RUN      ] Pose3DTests.Jacob_dLnT_dT
[       OK ] Pose3DTests.Jacob_dLnT_dT (0 ms)
[----------] 14 tests from Pose3DTests (0 ms total)

[----------] 3 tests from Pose3DPDFGaussTests
[ RUN      ] Pose3DPDFGaussTests.ToQuatGaussPDFAndBack
[       OK ] Pose3DPDFGaussTests.ToQuatGaussPDFAndBack (0 ms)
[ RUN      ] Pose3DPDFGaussTests.CompositionJacobian
[       OK ] Pose3DPDFGaussTests.CompositionJacobian (1 ms)
[ RUN      ] Pose3DPDFGaussTests.InverseComposition
[       OK ] Pose3DPDFGaussTests.InverseComposition (0 ms)
[----------] 3 tests from Pose3DPDFGaussTests (1 ms total)

[----------] 5 tests from Pose3DQuatPDFGaussTests
[ RUN      ] Pose3DQuatPDFGaussTests.ToYPRGaussPDFAndBack
[       OK ] Pose3DQuatPDFGaussTests.ToYPRGaussPDFAndBack (0 ms)
[ RUN      ] Pose3DQuatPDFGaussTests.CompositionJacobian
[       OK ] Pose3DQuatPDFGaussTests.CompositionJacobian (0 ms)
[ RUN      ] Pose3DQuatPDFGaussTests.Inverse
[       OK ] Pose3DQuatPDFGaussTests.Inverse (0 ms)
[ RUN      ] Pose3DQuatPDFGaussTests.Composition
[       OK ] Pose3DQuatPDFGaussTests.Composition (0 ms)
[ RUN      ] Pose3DQuatPDFGaussTests.InverseComposition
[       OK ] Pose3DQuatPDFGaussTests.InverseComposition (1 ms)
[----------] 5 tests from Pose3DQuatPDFGaussTests (1 ms total)

[----------] 1 test from PosePDFGaussTests
[ RUN      ] PosePDFGaussTests.Inverse
[       OK ] PosePDFGaussTests.Inverse (0 ms)
[----------] 1 test from PosePDFGaussTests (0 ms total)

[----------] 1 test from SE3_traits_tests
[ RUN      ] SE3_traits_tests.SE3_jacobs
[       OK ] SE3_traits_tests.SE3_jacobs (0 ms)
[----------] 1 test from SE3_traits_tests (0 ms total)

[----------] 1 test from SE2_traits_tests
[ RUN      ] SE2_traits_tests.SE2_jacobs
[       OK ] SE2_traits_tests.SE2_jacobs (0 ms)
[----------] 1 test from SE2_traits_tests (0 ms total)

[----------] 9 tests from Pose3DQuatTests
[ RUN      ] Pose3DQuatTests.FromYPRAndBack
[       OK ] Pose3DQuatTests.FromYPRAndBack (0 ms)
[ RUN      ] Pose3DQuatTests.Compose
[       OK ] Pose3DQuatTests.Compose (0 ms)
[ RUN      ] Pose3DQuatTests.ComposeWithPoint
[       OK ] Pose3DQuatTests.ComposeWithPoint (0 ms)
[ RUN      ] Pose3DQuatTests.ComposeWithPointJacob
[       OK ] Pose3DQuatTests.ComposeWithPointJacob (0 ms)
[ RUN      ] Pose3DQuatTests.InvComposeWithPoint
[       OK ] Pose3DQuatTests.InvComposeWithPoint (0 ms)
[ RUN      ] Pose3DQuatTests.InvComposeWithPointJacob
[       OK ] Pose3DQuatTests.InvComposeWithPointJacob (0 ms)
[ RUN      ] Pose3DQuatTests.ComposeInvComposePoint
[       OK ] Pose3DQuatTests.ComposeInvComposePoint (0 ms)
[ RUN      ] Pose3DQuatTests.SphericalCoordsJacobian
[       OK ] Pose3DQuatTests.SphericalCoordsJacobian (0 ms)
[ RUN      ] Pose3DQuatTests.NormalizationJacobian
[       OK ] Pose3DQuatTests.NormalizationJacobian (0 ms)
[----------] 9 tests from Pose3DQuatTests (0 ms total)

[----------] 2 tests from Pose3DRotVecTests
[ RUN      ] Pose3DRotVecTests.DefaultValues
[       OK ] Pose3DRotVecTests.DefaultValues (0 ms)
[ RUN      ] Pose3DRotVecTests.Initialization
[       OK ] Pose3DRotVecTests.Initialization (0 ms)
[----------] 2 tests from Pose3DRotVecTests (0 ms total)

[----------] 1 test from dynamicsize_vector
[ RUN      ] dynamicsize_vector.resize
[       OK ] dynamicsize_vector.resize (0 ms)
[----------] 1 test from dynamicsize_vector (0 ms total)

[----------] 43 tests from Matrices
[ RUN      ] Matrices.A_times_B_dyn
[       OK ] Matrices.A_times_B_dyn (0 ms)
[ RUN      ] Matrices.A_times_B_fix
[       OK ] Matrices.A_times_B_fix (0 ms)
[ RUN      ] Matrices.SerializeCMatrixD
[       OK ] Matrices.SerializeCMatrixD (1 ms)
[ RUN      ] Matrices.EigenVal2x2dyn
[       OK ] Matrices.EigenVal2x2dyn (0 ms)
[ RUN      ] Matrices.EigenVal3x3dyn
[       OK ] Matrices.EigenVal3x3dyn (0 ms)
[ RUN      ] Matrices.EigenVal2x2fix
[       OK ] Matrices.EigenVal2x2fix (0 ms)
[ RUN      ] Matrices.EigenVal3x3fix
[       OK ] Matrices.EigenVal3x3fix (0 ms)
[ RUN      ] Matrices.HCHt_3x2_2x2_2x3
[       OK ] Matrices.HCHt_3x2_2x2_2x3 (0 ms)
[ RUN      ] Matrices.HCHt_scalar_1x2_2x2_2x1
[       OK ] Matrices.HCHt_scalar_1x2_2x2_2x1 (0 ms)
[ RUN      ] Matrices.multiply_Ab_2x2_2x1
[       OK ] Matrices.multiply_Ab_2x2_2x1 (0 ms)
[ RUN      ] Matrices.det_2x2_dyn
[       OK ] Matrices.det_2x2_dyn (0 ms)
[ RUN      ] Matrices.det_2x2_fix
[       OK ] Matrices.det_2x2_fix (0 ms)
[ RUN      ] Matrices.det_3x3_dyn
[       OK ] Matrices.det_3x3_dyn (0 ms)
[ RUN      ] Matrices.det_3x3_fix
[       OK ] Matrices.det_3x3_fix (0 ms)
[ RUN      ] Matrices.det_4x4_dyn
[       OK ] Matrices.det_4x4_dyn (0 ms)
[ RUN      ] Matrices.det_4x4_fix
[       OK ] Matrices.det_4x4_fix (0 ms)
[ RUN      ] Matrices.det_10x10_dyn
[       OK ] Matrices.det_10x10_dyn (0 ms)
[ RUN      ] Matrices.det_10x10_fix
[       OK ] Matrices.det_10x10_fix (0 ms)
[ RUN      ] Matrices.chol_2x2_dyn
[       OK ] Matrices.chol_2x2_dyn (0 ms)
[ RUN      ] Matrices.chol_2x2_fix
[       OK ] Matrices.chol_2x2_fix (0 ms)
[ RUN      ] Matrices.chol_3x3_dyn
[       OK ] Matrices.chol_3x3_dyn (0 ms)
[ RUN      ] Matrices.chol_3x3_fix
[       OK ] Matrices.chol_3x3_fix (0 ms)
[ RUN      ] Matrices.chol_10x10_dyn
[       OK ] Matrices.chol_10x10_dyn (0 ms)
[ RUN      ] Matrices.chol_10x10_fix
[       OK ] Matrices.chol_10x10_fix (0 ms)
[ RUN      ] Matrices.inv_4x4_fix
[       OK ] Matrices.inv_4x4_fix (0 ms)
[ RUN      ] Matrices.inv_6x6_fix
[       OK ] Matrices.inv_6x6_fix (0 ms)
[ RUN      ] Matrices.inv_6x6_dyn
[       OK ] Matrices.inv_6x6_dyn (0 ms)
[ RUN      ] Matrices.transpose
[       OK ] Matrices.transpose (0 ms)
[ RUN      ] Matrices.multiply_A_skew3
[       OK ] Matrices.multiply_A_skew3 (0 ms)
[ RUN      ] Matrices.multiply_skew3_A
[       OK ] Matrices.multiply_skew3_A (0 ms)
[ RUN      ] Matrices.fromMatlabStringFormat
[       OK ] Matrices.fromMatlabStringFormat (0 ms)
[ RUN      ] Matrices.loadFromArray
[       OK ] Matrices.loadFromArray (0 ms)
[ RUN      ] Matrices.CMatrixFixedNumeric_loadWithEigenMap
[       OK ] Matrices.CMatrixFixedNumeric_loadWithEigenMap (0 ms)
[ RUN      ] Matrices.EigenMatrix_loadWithEigenMap
[       OK ] Matrices.EigenMatrix_loadWithEigenMap (0 ms)
[ RUN      ] Matrices.setSize
[       OK ] Matrices.setSize (0 ms)
[ RUN      ] Matrices.extractSubmatrixSymmetricalBlocks
[       OK ] Matrices.extractSubmatrixSymmetricalBlocks (0 ms)
[ RUN      ] Matrices.extractSubmatrixSymmetrical
[       OK ] Matrices.extractSubmatrixSymmetrical (0 ms)
[ RUN      ] Matrices.divide
[       OK ] Matrices.divide (1 ms)
[ RUN      ] Matrices.meanAndStd
[       OK ] Matrices.meanAndStd (0 ms)
[ RUN      ] Matrices.meanAndStdAll
[       OK ] Matrices.meanAndStdAll (0 ms)
[ RUN      ] Matrices.laplacian
[       OK ] Matrices.laplacian (0 ms)
[ RUN      ] Matrices.largestEigenvector
[       OK ] Matrices.largestEigenvector (0 ms)
[ RUN      ] Matrices.loadFromTextFile
[       OK ] Matrices.loadFromTextFile (0 ms)
[----------] 43 tests from Matrices (2 ms total)

[----------] 8 tests from SparseMatrix
[ RUN      ] SparseMatrix.InitFromDenseUnit
[       OK ] SparseMatrix.InitFromDenseUnit (0 ms)
[ RUN      ] SparseMatrix.InitFromDenseRandom
[       OK ] SparseMatrix.InitFromDenseRandom (0 ms)
[ RUN      ] SparseMatrix.InitFromTriplet
[       OK ] SparseMatrix.InitFromTriplet (0 ms)
[ RUN      ] SparseMatrix.InitFromSparse
[       OK ] SparseMatrix.InitFromSparse (0 ms)
[ RUN      ] SparseMatrix.InitFromRandom
[       OK ] SparseMatrix.InitFromRandom (0 ms)
[ RUN      ] SparseMatrix.Op_Add
[       OK ] SparseMatrix.Op_Add (0 ms)
[ RUN      ] SparseMatrix.Op_Multiply_AB
[       OK ] SparseMatrix.Op_Multiply_AB (0 ms)
[ RUN      ] SparseMatrix.CholeskyDecomp
[       OK ] SparseMatrix.CholeskyDecomp (1 ms)
[----------] 8 tests from SparseMatrix (1 ms total)

[----------] 1 test from SLERP_tests
[ RUN      ] SLERP_tests.correctShortestPath
[       OK ] SLERP_tests.correctShortestPath (0 ms)
[----------] 1 test from SLERP_tests (0 ms total)

[----------] 2 tests from LightGeomData
[ RUN      ] LightGeomData.PragmaPack
[       OK ] LightGeomData.PragmaPack (0 ms)
[ RUN      ] LightGeomData.ExpectedMemorySizes
[       OK ] LightGeomData.ExpectedMemorySizes (0 ms)
[----------] 2 tests from LightGeomData (0 ms total)

[----------] 5 tests from QuaternionTests
[ RUN      ] QuaternionTests.crossProduct
[       OK ] QuaternionTests.crossProduct (0 ms)
[ RUN      ] QuaternionTests.gimbalLock
[       OK ] QuaternionTests.gimbalLock (0 ms)
[ RUN      ] QuaternionTests.ToYPRAndBack
[       OK ] QuaternionTests.ToYPRAndBack (0 ms)
[ RUN      ] QuaternionTests.LnAndExpMatches
[       OK ] QuaternionTests.LnAndExpMatches (0 ms)
[ RUN      ] QuaternionTests.ExpAndLnMatches
[       OK ] QuaternionTests.ExpAndLnMatches (0 ms)
[----------] 5 tests from QuaternionTests (0 ms total)

[----------] 1 test from Compress
[ RUN      ] Compress.DataBlockGZ
[       OK ] Compress.DataBlockGZ (4 ms)
[----------] 1 test from Compress (4 ms total)

[----------] Global test environment tear-down
[==========] 107 tests from 19 test cases ran. (27 ms total)
[  PASSED  ] 107 tests.
[100%] Built target run_tests_mrpt_base
[100%] Built target test_mrpt_maps
[==========] Running 9 tests from 3 test cases.
[----------] Global test environment set-up.
[----------] 3 tests from CSimplePointsMapTests
[ RUN      ] CSimplePointsMapTests.insertPoints
[       OK ] CSimplePointsMapTests.insertPoints (0 ms)
[ RUN      ] CSimplePointsMapTests.clipOutOfRangeInZ
[       OK ] CSimplePointsMapTests.clipOutOfRangeInZ (0 ms)
[ RUN      ] CSimplePointsMapTests.clipOutOfRange
[       OK ] CSimplePointsMapTests.clipOutOfRange (0 ms)
[----------] 3 tests from CSimplePointsMapTests (0 ms total)

[----------] 3 tests from CWeightedPointsMapTests
[ RUN      ] CWeightedPointsMapTests.insertPoints
[       OK ] CWeightedPointsMapTests.insertPoints (0 ms)
[ RUN      ] CWeightedPointsMapTests.clipOutOfRangeInZ
[       OK ] CWeightedPointsMapTests.clipOutOfRangeInZ (0 ms)
[ RUN      ] CWeightedPointsMapTests.clipOutOfRange
[       OK ] CWeightedPointsMapTests.clipOutOfRange (0 ms)
[----------] 3 tests from CWeightedPointsMapTests (0 ms total)

[----------] 3 tests from CColouredPointsMapTests
[ RUN      ] CColouredPointsMapTests.insertPoints
[       OK ] CColouredPointsMapTests.insertPoints (0 ms)
[ RUN      ] CColouredPointsMapTests.clipOutOfRangeInZ
[       OK ] CColouredPointsMapTests.clipOutOfRangeInZ (0 ms)
[ RUN      ] CColouredPointsMapTests.clipOutOfRange
[       OK ] CColouredPointsMapTests.clipOutOfRange (0 ms)
[----------] 3 tests from CColouredPointsMapTests (0 ms total)

[----------] Global test environment tear-down
[==========] 9 tests from 3 test cases ran. (1 ms total)
[  PASSED  ] 9 tests.
[100%] Built target run_tests_mrpt_maps
[100%] Built target test_mrpt_slam
[==========] Running 4 tests from 2 test cases.
[----------] Global test environment set-up.
[----------] 3 tests from ICPTests
[ RUN      ] ICPTests.AlignScans_icpClassic
[       OK ] ICPTests.AlignScans_icpClassic (1 ms)
[ RUN      ] ICPTests.AlignScans_icpLevenbergMarquardt
[       OK ] ICPTests.AlignScans_icpLevenbergMarquardt (2 ms)
[ RUN      ] ICPTests.RayTracingICP3D
[       OK ] ICPTests.RayTracingICP3D (74 ms)
[----------] 3 tests from ICPTests (77 ms total)

[----------] 1 test from MonteCarlo2D
[ RUN      ] MonteCarlo2D.RunSampleDataset
[       OK ] MonteCarlo2D.RunSampleDataset (992 ms)
[----------] 1 test from MonteCarlo2D (992 ms total)

[----------] Global test environment tear-down
[==========] 4 tests from 2 test cases ran. (1069 ms total)
[  PASSED  ] 4 tests.
[100%] Built target run_tests_mrpt_slam
[100%] Built target test


Tags: 
Subscribe to Comments for "Unit testing in MRPT"