Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Tag name (required for release branches): Originator(s): @mwaxmonsky Description (include the issue title, and the keyword ['closes', 'fixes', 'resolves'] followed by the issue number): Describe any changes made to build system: None Describe any changes made to the namelist: None List any changes to the defaults for the input datasets (e.g. boundary datasets): None List all files eliminated and why: None List all files added and what they do: A .github/workflows/fortran_unit_tests.yml - Initial workflow file to support unit testing in CI A src/core_utils/CMakeLists.txt A test/unit-fortran/CMakeLists.txt A test/unit-fortran/src/core_utils/CMakeLists.txt - Initial unit test build infrastructure. A src/core_utils/string_core_utils.F90 A test/unit-fortran/src/core_utils/test_string_core_utils.pf - Refactored string utils and unit tests without dependencies List all existing files that have been modified, and describe the changes: (Helpful git command: `git diff --name-status development...<your_branch_name>`) R085 test/run_unit_tests.sh test/run_python_unit_tests.sh R100 test/unit/.coveragerc test/unit/python/.coveragerc R100 test/unit/sample_files/atm_in_files/test_attr_in test/unit/python/sample_files/atm_in_files/test_attr_in R100 test/unit/sample_files/atm_in_files/test_cmplx_array_atm_in test/unit/python/sample_files/atm_in_files/test_cmplx_array_atm_in R100 test/unit/sample_files/atm_in_files/test_extra_nml_def.xml test/unit/python/sample_files/atm_in_files/test_extra_nml_def.xml R100 test/unit/sample_files/atm_in_files/test_extra_nml_same_group.xml test/unit/python/sample_files/atm_in_files/test_extra_nml_same_group.xml R100 test/unit/sample_files/atm_in_files/test_extra_nml_same_var.xml test/unit/python/sample_files/atm_in_files/test_extra_nml_same_var.xml R100 test/unit/sample_files/atm_in_files/test_missing_elems.xml test/unit/python/sample_files/atm_in_files/test_missing_elems.xml R100 test/unit/sample_files/atm_in_files/test_multi_attr_in test/unit/python/sample_files/atm_in_files/test_multi_attr_in R100 test/unit/sample_files/atm_in_files/test_multi_xml_in test/unit/python/sample_files/atm_in_files/test_multi_xml_in R100 test/unit/sample_files/atm_in_files/test_nl_duplicate_atm_in test/unit/python/sample_files/atm_in_files/test_nl_duplicate_atm_in R100 test/unit/sample_files/atm_in_files/test_simple_atm_in test/unit/python/sample_files/atm_in_files/test_simple_atm_in R100 test/unit/sample_files/atm_in_files/test_simple_nml_def.xml test/unit/python/sample_files/atm_in_files/test_simple_nml_def.xml R100 test/unit/sample_files/atm_in_files/test_third_nml_def.xml test/unit/python/sample_files/atm_in_files/test_third_nml_def.xml R100 test/unit/sample_files/atm_in_files/test_user_in test/unit/python/sample_files/atm_in_files/test_user_in R100 test/unit/sample_files/atm_in_files/test_user_nl_allow_dupl_var test/unit/python/sample_files/atm_in_files/test_user_nl_allow_dupl_var R100 test/unit/sample_files/atm_in_files/test_user_nl_bad_equals test/unit/python/sample_files/atm_in_files/test_user_nl_bad_equals R100 test/unit/sample_files/atm_in_files/test_user_nl_dupl_var test/unit/python/sample_files/atm_in_files/test_user_nl_dupl_var R100 test/unit/sample_files/atm_in_files/test_user_nl_no_equals test/unit/python/sample_files/atm_in_files/test_user_nl_no_equals R100 test/unit/sample_files/atm_in_files/test_user_nl_simple test/unit/python/sample_files/atm_in_files/test_user_nl_simple R100 test/unit/sample_files/atm_in_files/test_user_nl_undefined_var test/unit/python/sample_files/atm_in_files/test_user_nl_undefined_var R100 test/unit/sample_files/autogen_files/two_scheme_banana.F90 test/unit/python/sample_files/autogen_files/two_scheme_banana.F90 R100 test/unit/sample_files/autogen_files/two_scheme_banana.meta test/unit/python/sample_files/autogen_files/two_scheme_banana.meta R100 test/unit/sample_files/autogen_files/two_scheme_banana_namelist.xml test/unit/python/sample_files/autogen_files/two_scheme_banana_namelist.xml R100 test/unit/sample_files/banana_namelist.xml test/unit/python/sample_files/banana_namelist.xml R100 test/unit/sample_files/build_cache_files/bad_ccpp_tag_build_cache.xml test/unit/python/sample_files/build_cache_files/bad_ccpp_tag_build_cache.xml R100 test/unit/sample_files/build_cache_files/bad_reg_tag_build_cache.xml test/unit/python/sample_files/build_cache_files/bad_reg_tag_build_cache.xml R100 test/unit/sample_files/build_cache_files/bad_section_tag_build_cache.xml test/unit/python/sample_files/build_cache_files/bad_section_tag_build_cache.xml R100 test/unit/sample_files/build_cache_files/example_build_cache.xml test/unit/python/sample_files/build_cache_files/example_build_cache.xml R100 test/unit/sample_files/build_cache_files/update_ccpp_build_cache.xml test/unit/python/sample_files/build_cache_files/update_ccpp_build_cache.xml R100 test/unit/sample_files/build_cache_files/update_init_gen_build_cache.xml test/unit/python/sample_files/build_cache_files/update_init_gen_build_cache.xml R100 test/unit/sample_files/build_cache_files/update_reg_build_cache.xml test/unit/python/sample_files/build_cache_files/update_reg_build_cache.xml R100 test/unit/sample_files/hist_config_files/amwg_hist_config test/unit/python/sample_files/hist_config_files/amwg_hist_config R100 test/unit/sample_files/hist_config_files/atm_in_flat test/unit/python/sample_files/hist_config_files/atm_in_flat R100 test/unit/sample_files/hist_config_files/atm_in_multi test/unit/python/sample_files/hist_config_files/atm_in_multi R100 test/unit/sample_files/hist_config_files/rad_config test/unit/python/sample_files/hist_config_files/rad_config R100 test/unit/sample_files/hist_config_files/user_nl_cam_flat test/unit/python/sample_files/hist_config_files/user_nl_cam_flat R100 test/unit/sample_files/hist_config_files/user_nl_cam_multi test/unit/python/sample_files/hist_config_files/user_nl_cam_multi R100 test/unit/sample_files/kumquat_namelist.xml test/unit/python/sample_files/kumquat_namelist.xml R100 test/unit/sample_files/namelist_files/banana_namelist.F90 test/unit/python/sample_files/namelist_files/banana_namelist.F90 R100 test/unit/sample_files/namelist_files/banana_namelist.meta test/unit/python/sample_files/namelist_files/banana_namelist.meta R100 test/unit/sample_files/namelist_files/cam_ccpp_scheme_namelists_double_def.F90 test/unit/python/sample_files/namelist_files/cam_ccpp_scheme_namelists_double_def.F90 R100 test/unit/sample_files/namelist_files/cam_ccpp_scheme_namelists_single_def.F90 test/unit/python/sample_files/namelist_files/cam_ccpp_scheme_namelists_single_def.F90 R100 test/unit/sample_files/namelist_files/kumquat_namelist.F90 test/unit/python/sample_files/namelist_files/kumquat_namelist.F90 R100 test/unit/sample_files/namelist_files/kumquat_namelist.meta test/unit/python/sample_files/namelist_files/kumquat_namelist.meta R100 test/unit/sample_files/phys_types_dup_section.meta test/unit/python/sample_files/phys_types_dup_section.meta R100 test/unit/sample_files/phys_types_no_table.meta test/unit/python/sample_files/phys_types_no_table.meta R100 test/unit/sample_files/physics_types_complete.F90 test/unit/python/sample_files/physics_types_complete.F90 R100 test/unit/sample_files/physics_types_complete.meta test/unit/python/sample_files/physics_types_complete.meta R100 test/unit/sample_files/physics_types_ddt2.F90 test/unit/python/sample_files/physics_types_ddt2.F90 R100 test/unit/sample_files/physics_types_ddt2.meta test/unit/python/sample_files/physics_types_ddt2.meta R100 test/unit/sample_files/physics_types_ddt_array.F90 test/unit/python/sample_files/physics_types_ddt_array.F90 R100 test/unit/sample_files/physics_types_ddt_array.meta test/unit/python/sample_files/physics_types_ddt_array.meta R100 test/unit/sample_files/physics_types_ddt_eul.F90 test/unit/python/sample_files/physics_types_ddt_eul.F90 R100 test/unit/sample_files/physics_types_ddt_eul.meta test/unit/python/sample_files/physics_types_ddt_eul.meta R100 test/unit/sample_files/physics_types_ddt_fv.F90 test/unit/python/sample_files/physics_types_ddt_fv.F90 R100 test/unit/sample_files/physics_types_ddt_fv.meta test/unit/python/sample_files/physics_types_ddt_fv.meta R100 test/unit/sample_files/physics_types_ddt_se.F90 test/unit/python/sample_files/physics_types_ddt_se.F90 R100 test/unit/sample_files/physics_types_ddt_se.meta test/unit/python/sample_files/physics_types_ddt_se.meta R100 test/unit/sample_files/physics_types_parameter.F90 test/unit/python/sample_files/physics_types_parameter.F90 R100 test/unit/sample_files/physics_types_parameter.meta test/unit/python/sample_files/physics_types_parameter.meta R100 test/unit/sample_files/physics_types_simple.F90 test/unit/python/sample_files/physics_types_simple.F90 R100 test/unit/sample_files/physics_types_simple.meta test/unit/python/sample_files/physics_types_simple.meta R100 test/unit/sample_files/ref_pres.meta test/unit/python/sample_files/ref_pres.meta R100 test/unit/sample_files/ref_pres_SourceMods.meta test/unit/python/sample_files/ref_pres_SourceMods.meta R098 test/unit/sample_files/reg_bad_xml.xml test/unit/python/sample_files/reg_bad_xml.xml R098 test/unit/sample_files/reg_good_complete.xml test/unit/python/sample_files/reg_good_complete.xml R100 test/unit/sample_files/reg_good_ddt.xml test/unit/python/sample_files/reg_good_ddt.xml R100 test/unit/sample_files/reg_good_ddt2.xml test/unit/python/sample_files/reg_good_ddt2.xml R100 test/unit/sample_files/reg_good_ddt_array.xml test/unit/python/sample_files/reg_good_ddt_array.xml R096 test/unit/sample_files/reg_good_mf.xml test/unit/python/sample_files/reg_good_mf.xml R100 test/unit/sample_files/reg_good_simple.xml test/unit/python/sample_files/reg_good_simple.xml R100 test/unit/sample_files/rotten_namelist.xml test/unit/python/sample_files/rotten_namelist.xml R100 test/unit/sample_files/write_init_files/ddt2_reg.xml test/unit/python/sample_files/write_init_files/ddt2_reg.xml R100 test/unit/sample_files/write_init_files/ddt_array_reg.xml test/unit/python/sample_files/write_init_files/ddt_array_reg.xml R100 test/unit/sample_files/write_init_files/ddt_reg.xml test/unit/python/sample_files/write_init_files/ddt_reg.xml R100 test/unit/sample_files/write_init_files/host_var_host.F90 test/unit/python/sample_files/write_init_files/host_var_host.F90 R100 test/unit/sample_files/write_init_files/host_var_host.meta test/unit/python/sample_files/write_init_files/host_var_host.meta R100 test/unit/sample_files/write_init_files/host_var_reg.xml test/unit/python/sample_files/write_init_files/host_var_reg.xml R088 test/unit/sample_files/write_init_files/mf_reg.xml test/unit/python/sample_files/write_init_files/mf_reg.xml R100 test/unit/sample_files/write_init_files/missing_ICs_reg.xml test/unit/python/sample_files/write_init_files/missing_ICs_reg.xml R100 test/unit/sample_files/write_init_files/no_horiz_dim_reg.xml test/unit/python/sample_files/write_init_files/no_horiz_dim_reg.xml R100 test/unit/sample_files/write_init_files/no_req_var_reg.xml test/unit/python/sample_files/write_init_files/no_req_var_reg.xml R100 test/unit/sample_files/write_init_files/param_reg.xml test/unit/python/sample_files/write_init_files/param_reg.xml R100 test/unit/sample_files/write_init_files/phys_vars_init_check_4D.F90 test/unit/python/sample_files/write_init_files/phys_vars_init_check_4D.F90 R100 test/unit/sample_files/write_init_files/phys_vars_init_check_bvd.F90 test/unit/python/sample_files/write_init_files/phys_vars_init_check_bvd.F90 R100 test/unit/sample_files/write_init_files/phys_vars_init_check_cnst.F90 test/unit/python/sample_files/write_init_files/phys_vars_init_check_cnst.F90 R100 test/unit/sample_files/write_init_files/phys_vars_init_check_ddt.F90 test/unit/python/sample_files/write_init_files/phys_vars_init_check_ddt.F90 R100 test/unit/sample_files/write_init_files/phys_vars_init_check_ddt2.F90 test/unit/python/sample_files/write_init_files/phys_vars_init_check_ddt2.F90 R100 test/unit/sample_files/write_init_files/phys_vars_init_check_ddt_array.F90 test/unit/python/sample_files/write_init_files/phys_vars_init_check_ddt_array.F90 R100 test/unit/sample_files/write_init_files/phys_vars_init_check_host_var.F90 test/unit/python/sample_files/write_init_files/phys_vars_init_check_host_var.F90 R100 test/unit/sample_files/write_init_files/phys_vars_init_check_mf.F90 test/unit/python/sample_files/write_init_files/phys_vars_init_check_mf.F90 R100 test/unit/sample_files/write_init_files/phys_vars_init_check_no_horiz.F90 test/unit/python/sample_files/write_init_files/phys_vars_init_check_no_horiz.F90 R100 test/unit/sample_files/write_init_files/phys_vars_init_check_noreq.F90 test/unit/python/sample_files/write_init_files/phys_vars_init_check_noreq.F90 R100 test/unit/sample_files/write_init_files/phys_vars_init_check_param.F90 test/unit/python/sample_files/write_init_files/phys_vars_init_check_param.F90 R100 test/unit/sample_files/write_init_files/phys_vars_init_check_parameter.F90 test/unit/python/sample_files/write_init_files/phys_vars_init_check_parameter.F90 R100 test/unit/sample_files/write_init_files/phys_vars_init_check_protect.F90 test/unit/python/sample_files/write_init_files/phys_vars_init_check_protect.F90 R100 test/unit/sample_files/write_init_files/phys_vars_init_check_scalar.F90 test/unit/python/sample_files/write_init_files/phys_vars_init_check_scalar.F90 R100 test/unit/sample_files/write_init_files/phys_vars_init_check_simple.F90 test/unit/python/sample_files/write_init_files/phys_vars_init_check_simple.F90 R100 test/unit/sample_files/write_init_files/physics_inputs_4D.F90 test/unit/python/sample_files/write_init_files/physics_inputs_4D.F90 R100 test/unit/sample_files/write_init_files/physics_inputs_bvd.F90 test/unit/python/sample_files/write_init_files/physics_inputs_bvd.F90 R100 test/unit/sample_files/write_init_files/physics_inputs_cnst.F90 test/unit/python/sample_files/write_init_files/physics_inputs_cnst.F90 R100 test/unit/sample_files/write_init_files/physics_inputs_ddt.F90 test/unit/python/sample_files/write_init_files/physics_inputs_ddt.F90 R100 test/unit/sample_files/write_init_files/physics_inputs_ddt2.F90 test/unit/python/sample_files/write_init_files/physics_inputs_ddt2.F90 R100 test/unit/sample_files/write_init_files/physics_inputs_ddt_array.F90 test/unit/python/sample_files/write_init_files/physics_inputs_ddt_array.F90 R100 test/unit/sample_files/write_init_files/physics_inputs_host_var.F90 test/unit/python/sample_files/write_init_files/physics_inputs_host_var.F90 R100 test/unit/sample_files/write_init_files/physics_inputs_mf.F90 test/unit/python/sample_files/write_init_files/physics_inputs_mf.F90 R100 test/unit/sample_files/write_init_files/physics_inputs_no_horiz.F90 test/unit/python/sample_files/write_init_files/physics_inputs_no_horiz.F90 R100 test/unit/sample_files/write_init_files/physics_inputs_noreq.F90 test/unit/python/sample_files/write_init_files/physics_inputs_noreq.F90 R100 test/unit/sample_files/write_init_files/physics_inputs_param.F90 test/unit/python/sample_files/write_init_files/physics_inputs_param.F90 R100 test/unit/sample_files/write_init_files/physics_inputs_parameter.F90 test/unit/python/sample_files/write_init_files/physics_inputs_parameter.F90 R100 test/unit/sample_files/write_init_files/physics_inputs_protect.F90 test/unit/python/sample_files/write_init_files/physics_inputs_protect.F90 R100 test/unit/sample_files/write_init_files/physics_inputs_scalar.F90 test/unit/python/sample_files/write_init_files/physics_inputs_scalar.F90 R100 test/unit/sample_files/write_init_files/physics_inputs_simple.F90 test/unit/python/sample_files/write_init_files/physics_inputs_simple.F90 R100 test/unit/sample_files/write_init_files/protected_reg.xml test/unit/python/sample_files/write_init_files/protected_reg.xml R100 test/unit/sample_files/write_init_files/ref_theta.F90 test/unit/python/sample_files/write_init_files/ref_theta.F90 R100 test/unit/sample_files/write_init_files/ref_theta.meta test/unit/python/sample_files/write_init_files/ref_theta.meta R100 test/unit/sample_files/write_init_files/ref_two.F90 test/unit/python/sample_files/write_init_files/ref_two.F90 R100 test/unit/sample_files/write_init_files/ref_two.meta test/unit/python/sample_files/write_init_files/ref_two.meta R100 test/unit/sample_files/write_init_files/scalar_var_reg.xml test/unit/python/sample_files/write_init_files/scalar_var_reg.xml R100 test/unit/sample_files/write_init_files/simple_build_cache_template.xml test/unit/python/sample_files/write_init_files/simple_build_cache_template.xml R100 test/unit/sample_files/write_init_files/simple_host.F90 test/unit/python/sample_files/write_init_files/simple_host.F90 R100 test/unit/sample_files/write_init_files/simple_host.meta test/unit/python/sample_files/write_init_files/simple_host.meta R100 test/unit/sample_files/write_init_files/simple_reg.xml test/unit/python/sample_files/write_init_files/simple_reg.xml R100 test/unit/sample_files/write_init_files/suite_simple.xml test/unit/python/sample_files/write_init_files/suite_simple.xml R100 test/unit/sample_files/write_init_files/temp_adjust.F90 test/unit/python/sample_files/write_init_files/temp_adjust.F90 R100 test/unit/sample_files/write_init_files/temp_adjust.meta test/unit/python/sample_files/write_init_files/temp_adjust.meta R100 test/unit/sample_files/write_init_files/temp_adjust_4D.F90 test/unit/python/sample_files/write_init_files/temp_adjust_4D.F90 R100 test/unit/sample_files/write_init_files/temp_adjust_4D.meta test/unit/python/sample_files/write_init_files/temp_adjust_4D.meta R100 test/unit/sample_files/write_init_files/temp_adjust_bvd.F90 test/unit/python/sample_files/write_init_files/temp_adjust_bvd.F90 R100 test/unit/sample_files/write_init_files/temp_adjust_bvd.meta test/unit/python/sample_files/write_init_files/temp_adjust_bvd.meta R100 test/unit/sample_files/write_init_files/temp_adjust_cnst.F90 test/unit/python/sample_files/write_init_files/temp_adjust_cnst.F90 R100 test/unit/sample_files/write_init_files/temp_adjust_cnst.meta test/unit/python/sample_files/write_init_files/temp_adjust_cnst.meta R100 test/unit/sample_files/write_init_files/temp_adjust_no_horiz.F90 test/unit/python/sample_files/write_init_files/temp_adjust_no_horiz.F90 R100 test/unit/sample_files/write_init_files/temp_adjust_no_horiz.meta test/unit/python/sample_files/write_init_files/temp_adjust_no_horiz.meta R100 test/unit/sample_files/write_init_files/temp_adjust_noreq.F90 test/unit/python/sample_files/write_init_files/temp_adjust_noreq.F90 R100 test/unit/sample_files/write_init_files/temp_adjust_noreq.meta test/unit/python/sample_files/write_init_files/temp_adjust_noreq.meta R100 test/unit/sample_files/write_init_files/temp_adjust_param.F90 test/unit/python/sample_files/write_init_files/temp_adjust_param.F90 R100 test/unit/sample_files/write_init_files/temp_adjust_param.meta test/unit/python/sample_files/write_init_files/temp_adjust_param.meta R100 test/unit/sample_files/write_init_files/temp_adjust_scalar.F90 test/unit/python/sample_files/write_init_files/temp_adjust_scalar.F90 R100 test/unit/sample_files/write_init_files/temp_adjust_scalar.meta test/unit/python/sample_files/write_init_files/temp_adjust_scalar.meta R100 test/unit/sample_files/write_init_files/theta_ddt.F90 test/unit/python/sample_files/write_init_files/theta_ddt.F90 R100 test/unit/sample_files/write_init_files/theta_ddt.meta test/unit/python/sample_files/write_init_files/theta_ddt.meta R100 test/unit/sample_files/write_init_files/var_4D_reg.xml test/unit/python/sample_files/write_init_files/var_4D_reg.xml R100 test/unit/sample_files/write_init_files/var_bad_vertdim.xml test/unit/python/sample_files/write_init_files/var_bad_vertdim.xml R099 test/unit/test_atm_in_paramgen.py test/unit/python/test_atm_in_paramgen.py R099 test/unit/test_build_cache.py test/unit/python/test_build_cache.py R099 test/unit/test_cam_autogen.py test/unit/python/test_cam_autogen.py R099 test/unit/test_cam_config.py test/unit/python/test_cam_config.py R098 test/unit/test_create_readnl_files.py test/unit/python/test_create_readnl_files.py R099 test/unit/test_hist_config.py test/unit/python/test_hist_config.py R099 test/unit/test_registry.py test/unit/python/test_registry.py R099 test/unit/test_write_init_files.py test/unit/python/test_write_init_files.py - Moved python tests and associated files from top level test directory to python specific directory to allow other language based tests. M src/utils/string_utils.F90 - Removed unused code (`last_sig_char`, `lower_to_upper`, `upper_to_lower`, `last_index`, and `increment_string`), made formatting consistent, and refactored portable string util code to core equivalent so this layer handles non-portable code and then calls core util code. M .github/workflows/python_unit_tests.yml M .gitignore M cime_config/cam_autogen.py - Updated python test paths to new directory. M cime_config/buildlib - Adding `core_utils` directory to list of source directories. If there are new failures (compared to the `test/existing-test-failures.txt` file), have them OK'd by the gatekeeper, note them here, and add them to the file. If there are baseline differences, include the test and the reason for the diff. What is the nature of the change? Roundoff? derecho/intel/aux_sima: derecho/gnu/aux_sima: If this changes climate describe any run(s) done to evaluate the new climate in enough detail that it(they) could be reproduced: CAM-SIMA date used for the baseline comparison tests if different than latest:
- Loading branch information