A unit test framework is provided, with the goal that all (nontrivial) classes will have unit tests. At the very least, each new class should have a corresponding unit test file stubbed in, even if there aren’t any tests yet.
#ifdef
guards as the classes
being tested../test/unit
directory, provides some functions
for comparing files, etc, that are useful in writing test cases.To run all unit tests, issue the following command from your build directory:
$ ctest
make test
or ninja test
should still work as well.
Depending on the which optional components you’ve chose to build, your output should resemble the following:
Test project /Users/hobu/dev/git/pdal
Start 1: pdal_bounds_test
1/61 Test #1: pdal_bounds_test ................... Passed 0.02 sec
Start 2: pdal_config_test
2/61 Test #2: pdal_config_test ................... Passed 0.02 sec
Start 3: pdal_file_utils_test
3/61 Test #3: pdal_file_utils_test ............... Passed 0.02 sec
Start 4: pdal_georeference_test
4/61 Test #4: pdal_georeference_test ............. Passed 0.02 sec
Start 5: pdal_kdindex_test
5/61 Test #5: pdal_kdindex_test .................. Passed 0.03 sec
Start 6: pdal_log_test
6/61 Test #6: pdal_log_test ...................... Passed 0.03 sec
Start 7: pdal_metadata_test
7/61 Test #7: pdal_metadata_test ................. Passed 0.02 sec
Start 8: pdal_options_test
8/61 Test #8: pdal_options_test .................. Passed 0.02 sec
Start 9: pdal_pdalutils_test
9/61 Test #9: pdal_pdalutils_test ................ Passed 0.02 sec
Start 10: pdal_pipeline_manager_test
10/61 Test #10: pdal_pipeline_manager_test ......... Passed 0.03 sec
Start 11: pdal_point_view_test
11/61 Test #11: pdal_point_view_test ............... Passed 2.03 sec
Start 12: pdal_point_table_test
12/61 Test #12: pdal_point_table_test .............. Passed 0.03 sec
Start 13: pdal_spatial_reference_test
13/61 Test #13: pdal_spatial_reference_test ........ Passed 0.07 sec
Start 14: pdal_support_test
14/61 Test #14: pdal_support_test .................. Passed 0.02 sec
Start 15: pdal_user_callback_test
15/61 Test #15: pdal_user_callback_test ............ Passed 0.02 sec
Start 16: pdal_utils_test
16/61 Test #16: pdal_utils_test .................... Passed 0.02 sec
Start 17: pdal_lazperf_test
17/61 Test #17: pdal_lazperf_test .................. Passed 0.04 sec
Start 18: pdal_io_bpf_test
18/61 Test #18: pdal_io_bpf_test ................... Passed 0.20 sec
Start 19: pdal_io_buffer_test
19/61 Test #19: pdal_io_buffer_test ................ Passed 0.02 sec
Start 20: pdal_io_faux_test
20/61 Test #20: pdal_io_faux_test .................. Passed 0.04 sec
Start 21: pdal_io_ilvis2_test
21/61 Test #21: pdal_io_ilvis2_test ................ Passed 0.06 sec
Start 22: pdal_io_las_reader_test
22/61 Test #22: pdal_io_las_reader_test ............ Passed 0.49 sec
Start 23: pdal_io_las_writer_test
23/61 Test #23: pdal_io_las_writer_test ............ Passed 2.27 sec
Start 24: pdal_io_optech_test
24/61 Test #24: pdal_io_optech_test ................ Passed 0.03 sec
Start 25: pdal_io_ply_reader_test
25/61 Test #25: pdal_io_ply_reader_test ............ Passed 0.03 sec
Start 26: pdal_io_ply_writer_test
26/61 Test #26: pdal_io_ply_writer_test ............ Passed 0.02 sec
Start 27: pdal_io_qfit_test
27/61 Test #27: pdal_io_qfit_test .................. Passed 0.03 sec
Start 28: pdal_io_sbet_reader_test
28/61 Test #28: pdal_io_sbet_reader_test ........... Passed 0.04 sec
Start 29: pdal_io_sbet_writer_test
29/61 Test #29: pdal_io_sbet_writer_test ........... Passed 0.03 sec
Start 30: pdal_io_terrasolid_test
30/61 Test #30: pdal_io_terrasolid_test ............ Passed 0.03 sec
Start 31: pdal_filters_chipper_test
31/61 Test #31: pdal_filters_chipper_test .......... Passed 0.03 sec
Start 32: pdal_filters_colorization_test
32/61 Test #32: pdal_filters_colorization_test ..... Passed 11.40 sec
Start 33: pdal_filters_crop_test
33/61 Test #33: pdal_filters_crop_test ............. Passed 0.04 sec
Start 34: pdal_filters_decimation_test
34/61 Test #34: pdal_filters_decimation_test ....... Passed 0.02 sec
Start 35: pdal_filters_divider_test
35/61 Test #35: pdal_filters_divider_test .......... Passed 0.03 sec
Start 36: pdal_filters_ferry_test
36/61 Test #36: pdal_filters_ferry_test ............ Passed 0.04 sec
Start 37: pdal_filters_merge_test
37/61 Test #37: pdal_filters_merge_test ............ Passed 0.03 sec
Start 38: pdal_filters_reprojection_test
38/61 Test #38: pdal_filters_reprojection_test ..... Passed 0.03 sec
Start 39: pdal_filters_range_test
39/61 Test #39: pdal_filters_range_test ............ Passed 0.05 sec
Start 40: pdal_filters_randomize_test
40/61 Test #40: pdal_filters_randomize_test ........ Passed 0.02 sec
Start 41: pdal_filters_sort_test
41/61 Test #41: pdal_filters_sort_test ............. Passed 0.39 sec
Start 42: pdal_filters_splitter_test
42/61 Test #42: pdal_filters_splitter_test ......... Passed 0.03 sec
Start 43: pdal_filters_stats_test
43/61 Test #43: pdal_filters_stats_test ............ Passed 0.03 sec
Start 44: pdal_filters_transformation_test
44/61 Test #44: pdal_filters_transformation_test ... Passed 0.03 sec
Start 45: pdal_merge_test
45/61 Test #45: pdal_merge_test .................... Passed 0.07 sec
Start 46: pc2pc_test
46/61 Test #46: pc2pc_test ......................... Passed 0.15 sec
Start 47: xml_schema_test
47/61 Test #47: xml_schema_test .................... Passed 0.02 sec
Start 48: pdal_filters_attribute_test
48/61 Test #48: pdal_filters_attribute_test ........ Passed 0.09 sec
Start 49: pdal_plugins_cpd_kernel_test
49/61 Test #49: pdal_plugins_cpd_kernel_test .......***Exception: Other 0.08 sec
Start 50: hexbintest
50/61 Test #50: hexbintest ......................... Passed 0.03 sec
Start 51: icetest
51/61 Test #51: icetest ............................ Passed 0.04 sec
Start 52: mrsidtest
52/61 Test #52: mrsidtest .......................... Passed 0.06 sec
Start 53: pdal_io_nitf_writer_test
53/61 Test #53: pdal_io_nitf_writer_test ........... Passed 0.08 sec
Start 54: pdal_io_nitf_reader_test
54/61 Test #54: pdal_io_nitf_reader_test ........... Passed 0.04 sec
Start 55: ocitest
55/61 Test #55: ocitest ............................***Failed 0.06 sec
Start 56: pcltest
56/61 Test #56: pcltest ............................ Passed 0.28 sec
Start 57: pgpointcloudtest
57/61 Test #57: pgpointcloudtest ................... Passed 1.66 sec
Start 58: plangtest
58/61 Test #58: plangtest .......................... Passed 0.14 sec
Start 59: python_predicate_test
59/61 Test #59: python_predicate_test .............. Passed 0.16 sec
Start 60: python_programmable_test
60/61 Test #60: python_programmable_test ........... Passed 0.15 sec
Start 61: sqlitetest
61/61 Test #61: sqlitetest ......................... Passed 0.55 sec
97% tests passed, 2 tests failed out of 61
Total Test time (real) = 21.57 sec
The following tests FAILED:
49 - pdal_plugins_cpd_kernel_test (OTHER_FAULT)
55 - ocitest (Failed)
For a more verbose output, use the -V
flag. Or, to run an individual test
suite, use -R <suite name>
. For example:
$ ctest -V -R pdal_io_bpf_test
Should produce output similar to:
UpdateCTestConfiguration from :/Users/hobu/dev/git/pdal/DartConfiguration.tcl
UpdateCTestConfiguration from :/Users/hobu/dev/git/pdal/DartConfiguration.tcl
Test project /Users/hobu/dev/git/pdal
Constructing a list of tests
Done constructing a list of tests
Checking test dependency graph...
Checking test dependency graph end
test 18
Start 18: pdal_io_bpf_test
18: Test command: /Users/hobu/dev/git/pdal/bin/pdal_io_bpf_test
18: Environment variables:
18: PDAL_DRIVER_PATH=/Users/hobu/dev/git/pdal/lib
18: Test timeout computed to be: 9.99988e+06
18: [==========] Running 20 tests from 1 test case.
18: [----------] Global test environment set-up.
18: [----------] 20 tests from BPFTest
18: [ RUN ] BPFTest.test_point_major
18: [ OK ] BPFTest.test_point_major (8 ms)
18: [ RUN ] BPFTest.test_dim_major
18: [ OK ] BPFTest.test_dim_major (3 ms)
18: [ RUN ] BPFTest.test_byte_major
18: [ OK ] BPFTest.test_byte_major (4 ms)
18: [ RUN ] BPFTest.test_point_major_zlib
18: [ OK ] BPFTest.test_point_major_zlib (6 ms)
18: [ RUN ] BPFTest.test_dim_major_zlib
18: [ OK ] BPFTest.test_dim_major_zlib (4 ms)
18: [ RUN ] BPFTest.test_byte_major_zlib
18: [ OK ] BPFTest.test_byte_major_zlib (5 ms)
18: [ RUN ] BPFTest.roundtrip_byte
18: [ OK ] BPFTest.roundtrip_byte (15 ms)
18: [ RUN ] BPFTest.roundtrip_dimension
18: [ OK ] BPFTest.roundtrip_dimension (10 ms)
18: [ RUN ] BPFTest.roundtrip_point
18: [ OK ] BPFTest.roundtrip_point (11 ms)
18: [ RUN ] BPFTest.roundtrip_byte_compression
18: [ OK ] BPFTest.roundtrip_byte_compression (16 ms)
18: [ RUN ] BPFTest.roundtrip_dimension_compression
18: [ OK ] BPFTest.roundtrip_dimension_compression (13 ms)
18: [ RUN ] BPFTest.roundtrip_point_compression
18: [ OK ] BPFTest.roundtrip_point_compression (14 ms)
18: [ RUN ] BPFTest.roundtrip_scaling
18: [ OK ] BPFTest.roundtrip_scaling (10 ms)
18: [ RUN ] BPFTest.extra_bytes
18: [ OK ] BPFTest.extra_bytes (15 ms)
18: [ RUN ] BPFTest.bundled
18: [ OK ] BPFTest.bundled (17 ms)
18: [ RUN ] BPFTest.inspect
18: [ OK ] BPFTest.inspect (1 ms)
18: [ RUN ] BPFTest.mueller
18: [ OK ] BPFTest.mueller (0 ms)
18: [ RUN ] BPFTest.flex
18: [ OK ] BPFTest.flex (9 ms)
18: [ RUN ] BPFTest.flex2
18: [ OK ] BPFTest.flex2 (7 ms)
18: [ RUN ] BPFTest.outputdims
18: [ OK ] BPFTest.outputdims (14 ms)
18: [----------] 20 tests from BPFTest (182 ms total)
18:
18: [----------] Global test environment tear-down
18: [==========] 20 tests from 1 test case ran. (182 ms total)
18: [ PASSED ] 20 tests.
1/1 Test #18: pdal_io_bpf_test ................. Passed 0.20 sec
The following tests passed:
pdal_io_bpf_test
100% tests passed, 0 tests failed out of 1
$ bin/pdal_io_test
Again, the output should resemble the following:
[==========] Running 20 tests from 1 test case.
[----------] Global test environment set-up.
[----------] 20 tests from BPFTest
[ RUN ] BPFTest.test_point_major
[ OK ] BPFTest.test_point_major (7 ms)
[ RUN ] BPFTest.test_dim_major
[ OK ] BPFTest.test_dim_major (3 ms)
[ RUN ] BPFTest.test_byte_major
[ OK ] BPFTest.test_byte_major (4 ms)
[ RUN ] BPFTest.test_point_major_zlib
[ OK ] BPFTest.test_point_major_zlib (5 ms)
[ RUN ] BPFTest.test_dim_major_zlib
[ OK ] BPFTest.test_dim_major_zlib (5 ms)
[ RUN ] BPFTest.test_byte_major_zlib
[ OK ] BPFTest.test_byte_major_zlib (6 ms)
[ RUN ] BPFTest.roundtrip_byte
[ OK ] BPFTest.roundtrip_byte (17 ms)
[ RUN ] BPFTest.roundtrip_dimension
[ OK ] BPFTest.roundtrip_dimension (10 ms)
[ RUN ] BPFTest.roundtrip_point
[ OK ] BPFTest.roundtrip_point (11 ms)
[ RUN ] BPFTest.roundtrip_byte_compression
[ OK ] BPFTest.roundtrip_byte_compression (15 ms)
[ RUN ] BPFTest.roundtrip_dimension_compression
[ OK ] BPFTest.roundtrip_dimension_compression (14 ms)
[ RUN ] BPFTest.roundtrip_point_compression
[ OK ] BPFTest.roundtrip_point_compression (14 ms)
[ RUN ] BPFTest.roundtrip_scaling
[ OK ] BPFTest.roundtrip_scaling (11 ms)
[ RUN ] BPFTest.extra_bytes
[ OK ] BPFTest.extra_bytes (16 ms)
[ RUN ] BPFTest.bundled
[ OK ] BPFTest.bundled (17 ms)
[ RUN ] BPFTest.inspect
[ OK ] BPFTest.inspect (1 ms)
[ RUN ] BPFTest.mueller
[ OK ] BPFTest.mueller (0 ms)
[ RUN ] BPFTest.flex
[ OK ] BPFTest.flex (8 ms)
[ RUN ] BPFTest.flex2
[ OK ] BPFTest.flex2 (7 ms)
[ RUN ] BPFTest.outputdims
[ OK ] BPFTest.outputdims (14 ms)
[----------] 20 tests from BPFTest (185 ms total)
[----------] Global test environment tear-down
[==========] 20 tests from 1 test case ran. (185 ms total)
[ PASSED ] 20 tests.
This invocation allows us to alter Google Test’s default behavior. For more on the available flags type:
$ bin/<test_name> --help
Key among these flags are the ability to list tests (--gtest_list_tests
)
and to run only select tests (--gtest_filter
).
Use the directory ./test/data
to store files used for unit tests. A
vfunction is provided in the Support class for referencing that directory in a
configuration-independent manner.
Temporary output files from unit tests should go into the ./test/temp
directory. A Support function is provided for referencing this directory as
well.
Unit tests should always clean up and remove any files that they create (except perhaps in case of a failed test, in which case leaving the output around might be helpful for debugging).