diff --git a/badges/test_coverage.svg b/badges/test_coverage.svg index a9be2c5a78eba725b5bafa596a86cabee4ad6a79..4021d28a9a6c1ee51fad68b1e05e1e4e0b5b45c0 100644 --- a/badges/test_coverage.svg +++ b/badges/test_coverage.svg @@ -15,7 +15,7 @@ <g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11"> <text x="31.5" y="15" fill="#010101" fill-opacity=".3">coverage</text> <text x="31.5" y="14">coverage</text> - <text x="80" y="15" fill="#010101" fill-opacity=".3">29%</text> - <text x="80" y="14">29%</text> + <text x="80" y="15" fill="#010101" fill-opacity=".3">30%</text> + <text x="80" y="14">30%</text> </g> </svg> diff --git a/binarycpython/tests/main.py b/binarycpython/tests/main.py index 5e23cee462ca6e2cbc80c94c8add5579fc88a8fe..3c22023a9b50bf7166ef58fc75645e595ca6b101 100755 --- a/binarycpython/tests/main.py +++ b/binarycpython/tests/main.py @@ -21,7 +21,14 @@ from binarycpython.tests.test_custom_logging import ( test_create_and_load_logging_function ) from binarycpython.tests.test_dicts import ( - test_merge_dicts + test_merge_dicts, + test_setopts, + test_AutoVivicationDict, + test_inspect_dict +) +from binarycpython.tests.test_ensemble import ( + test_binaryc_json_serializer, + test_handle_ensemble_string_to_json, ) from binarycpython.tests.test_functions import ( test_verbose_print, @@ -58,6 +65,11 @@ from binarycpython.tests.tests_population_extensions.test__grid_options_defaults test_write_grid_options_to_rst_file, ) +from binarycpython.tests.tests_population_extensions.test__version_info import ( + test_return_binary_c_version_info, + test_parse_binary_c_version_info +) + from binarycpython.tests.test_stellar_types import * from binarycpython.tests.test_useful_funcs import ( test_calc_period_from_sep, diff --git a/binarycpython/tests/test_dicts.py b/binarycpython/tests/test_dicts.py index 8dc2435e37e52f317430fe7c13a62d89fef98e39..538077775627af6f5b23df2ba60372b90b53d3d8 100644 --- a/binarycpython/tests/test_dicts.py +++ b/binarycpython/tests/test_dicts.py @@ -9,17 +9,13 @@ TODO: _nested_get TODO: _recursive_normalize_floats TODO: multiply_float_values TODO: subtract_dicts -TODO: AutoVivificationDict -TODO: inspect_dict TODO: count_keys_recursive - TODO: update_dicts TODO: multiply_values_dict TODO: custom_sort_dict TODO: filter_dict TODO: filter_dict_through_values TODO: prepare_dict -TODO: set_opts TODO: normalize_dict """ @@ -31,7 +27,10 @@ from binarycpython.utils.functions import ( Capturing, ) from binarycpython.utils.dicts import ( - merge_dicts + merge_dicts, + set_opts, + AutoVivificationDict, + inspect_dict ) TMP_DIR = temp_dir("tests", "test_dicts") @@ -190,3 +189,98 @@ class test_merge_dicts(unittest.TestCase): # output_dict = merge_dicts(dict_1, dict_2) self.assertRaises(ValueError, merge_dicts, dict_1, dict_2) + + +class test_setopts(unittest.TestCase): + """ + Unit test class for setopts + """ + + def test_setopts(self): + with Capturing() as output: + self._test_setopts() + + def _test_setopts(self): + """ + Unittest for function set_opts + """ + + default_dict = {"m1": 2, "m2": 3} + output_dict_1 = set_opts(default_dict, {}) + self.assertTrue(output_dict_1 == default_dict) + + new_opts = {"m1": 10} + output_dict_2 = set_opts(default_dict, new_opts) + updated_dict = default_dict.copy() + updated_dict["m1"] = 10 + + self.assertTrue(output_dict_2 == updated_dict) + + +class test_AutoVivicationDict(unittest.TestCase): + """ + Unittests for AutoVivicationDict + """ + + def test_add(self): + """ + Tests to see if the adding is done correctly + """ + + result_dict = AutoVivificationDict() + + result_dict["a"]["b"]["c"] += 10 + + self.assertEqual(result_dict["a"]["b"]["c"], 10) + result_dict["a"]["b"]["c"] += 10 + self.assertEqual(result_dict["a"]["b"]["c"], 20) + + +class test_inspect_dict(unittest.TestCase): + """ + Unittests for function inspect_dict + """ + + def test_compare_dict(self): + with Capturing() as output: + self._test_compare_dict() + + def _test_compare_dict(self): + """ + Test checking if inspect_dict returns the correct structure by comparing it to known value + """ + + input_dict = { + "int": 1, + "float": 1.2, + "list": [1, 2, 3], + "function": os.path.isfile, + "dict": {"int": 1, "float": 1.2}, + } + output_dict = inspect_dict(input_dict) + compare_dict = { + "int": int, + "float": float, + "list": list, + "function": os.path.isfile.__class__, + "dict": {"int": int, "float": float}, + } + self.assertTrue(compare_dict == output_dict) + + def test_compare_dict_with_print(self): + with Capturing() as output: + self._test_compare_dict_with_print() + + def _test_compare_dict_with_print(self): + """ + Test checking output is printed + """ + + input_dict = { + "int": 1, + "float": 1.2, + "list": [1, 2, 3], + "function": os.path.isfile, + "dict": {"int": 1, "float": 1.2}, + } + output_dict = inspect_dict(input_dict, print_structure=True) \ No newline at end of file diff --git a/binarycpython/tests/test_ensemble.py b/binarycpython/tests/test_ensemble.py new file mode 100644 index 0000000000000000000000000000000000000000..0f392d5a1c25274f062cbd087fbcafbe45a8b477 --- /dev/null +++ b/binarycpython/tests/test_ensemble.py @@ -0,0 +1,72 @@ +""" +Unit tests for the ensemble module +""" + +import os +import unittest + +from binarycpython.utils.functions import ( + temp_dir, + Capturing, +) +from binarycpython.utils.ensemble import ( + binaryc_json_serializer, + handle_ensemble_string_to_json +) + +TMP_DIR = temp_dir("tests", "test_ensemble") + + +class test_binaryc_json_serializer(unittest.TestCase): + """ + Unittests for function binaryc_json_serializer + """ + + def test_not_function(self): + with Capturing() as output: + self._test_not_function() + + def _test_not_function(self): + """ + Test passing an object that doesnt get turned in to a string + """ + + stringo = "hello" + output = binaryc_json_serializer(stringo) + self.assertTrue(stringo == output) + + def test_function(self): + with Capturing() as output: + self._test_function() + + def _test_function(self): + """ + Test passing an object that gets turned in to a string: a function + """ + + string_of_function = str(os.path.isfile) + output = binaryc_json_serializer(os.path.isfile) + self.assertTrue(string_of_function == output) + + +class test_handle_ensemble_string_to_json(unittest.TestCase): + """ + Unittests for function handle_ensemble_string_to_json + """ + + def test_1(self): + with Capturing() as _: + self._test_1() + + def _test_1(self): + """ + Test passing string representation of a dictionary. + """ + + _ = str(os.path.isfile) + input_string = '{"ding": 10, "list_example": [1,2,3]}' + output_dict = handle_ensemble_string_to_json(input_string) + + self.assertTrue(isinstance(output_dict, dict)) + self.assertTrue(output_dict["ding"] == 10) + self.assertTrue(output_dict["list_example"] == [1, 2, 3]) \ No newline at end of file diff --git a/binarycpython/tests/tests_population_extensions/test__version_info.py b/binarycpython/tests/tests_population_extensions/test__version_info.py new file mode 100644 index 0000000000000000000000000000000000000000..70729239aa0d1808a7df6826efa5b974058f33bb --- /dev/null +++ b/binarycpython/tests/tests_population_extensions/test__version_info.py @@ -0,0 +1,106 @@ +""" +Unit tests for the _version_info Population extension module +""" + +import os +import unittest + +from binarycpython.utils.functions import ( + temp_dir, + Capturing, +) +from binarycpython.utils.grid import Population + +TMP_DIR = temp_dir("tests", "test__version_info") + + +class test_return_binary_c_version_info(unittest.TestCase): + """ + Unittests for return_binary_c_version_info + """ + + def __init__(self, *args, **kwargs): + """ + init + """ + super(test_return_binary_c_version_info, self).__init__(*args, **kwargs) + self._version_info_pop = Population() + + def test_not_parsed(self): + with Capturing() as output: + self._test_not_parsed() + + def _test_not_parsed(self): + """ + Test for the raw version_info output + """ + + version_info = self._version_info_pop.return_binary_c_version_info(parsed=False) + + self.assertTrue(isinstance(version_info, str)) + self.assertIn("Build", version_info) + self.assertIn("REIMERS_ETA_DEFAULT", version_info) + self.assertIn("SIGMA_THOMPSON", version_info) + + def test_parsed(self): + with Capturing() as output: + self._test_parsed() + + def _test_parsed(self): + """ + Test for the parssed version_info + """ + + # also tests the parse_version_info indirectly + version_info_parsed = self._version_info_pop.return_binary_c_version_info(parsed=True) + + self.assertTrue(isinstance(version_info_parsed, dict)) + self.assertIn("isotopes", version_info_parsed.keys()) + self.assertIn("argpairs", version_info_parsed.keys()) + self.assertIn("ensembles", version_info_parsed.keys()) + self.assertIn("macros", version_info_parsed.keys()) + self.assertIn("elements", version_info_parsed.keys()) + self.assertIn("dt_limits", version_info_parsed.keys()) + self.assertIn("nucleosynthesis_sources", version_info_parsed.keys()) + self.assertIn("miscellaneous", version_info_parsed.keys()) + +class test_parse_binary_c_version_info(unittest.TestCase): + """ + Unittests for function parse_binary_c_version_info + """ + + def test_1(self): + with Capturing() as output: + self._test_1() + + def _test_1(self): + """ + Test for the parsed versio info, more detailed + """ + + _version_info_pop = Population() + + # + info = _version_info_pop.return_binary_c_version_info(parsed=False) + parsed_info = _version_info_pop.parse_binary_c_version_info(info) + + self.assertIn("isotopes", parsed_info.keys()) + self.assertIn("argpairs", parsed_info.keys()) + self.assertIn("ensembles", parsed_info.keys()) + self.assertIn("macros", parsed_info.keys()) + self.assertIn("elements", parsed_info.keys()) + self.assertIn("dt_limits", parsed_info.keys()) + self.assertIn("nucleosynthesis_sources", parsed_info.keys()) + self.assertIn("miscellaneous", parsed_info.keys()) + + self.assertIsNotNone(parsed_info["argpairs"]) + self.assertIsNotNone(parsed_info["ensembles"]) + self.assertIsNotNone(parsed_info["macros"]) + self.assertIsNotNone(parsed_info["dt_limits"]) + self.assertIsNotNone(parsed_info["miscellaneous"]) + + if parsed_info["macros"]["NUCSYN"] == "on": + self.assertIsNotNone(parsed_info["isotopes"]) + + if parsed_info["macros"]["NUCSYN_ID_SOURCES"] == "on": + self.assertIsNotNone(parsed_info["nucleosynthesis_sources"]) \ No newline at end of file diff --git a/binarycpython/tests/tmp_functions.py b/binarycpython/tests/tmp_functions.py index f812a8652697056f308e88eb53820cb9f80251e5..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 --- a/binarycpython/tests/tmp_functions.py +++ b/binarycpython/tests/tmp_functions.py @@ -1,243 +0,0 @@ - -from binarycpython.utils.ensemble import ( - binaryc_json_serializer, - handle_ensemble_string_to_json, -) - - -# class test_return_binary_c_version_info(unittest.TestCase): -# """ -# Unittests for return_binary_c_version_info -# """ - -# def test_not_parsed(self): -# with Capturing() as output: -# self._test_not_parsed() - -# def _test_not_parsed(self): -# """ -# Test for the raw version_info output -# """ - -# version_info = return_binary_c_version_info(parsed=False) - -# self.assertTrue(isinstance(version_info, str)) -# self.assertIn("Build", version_info) -# self.assertIn("REIMERS_ETA_DEFAULT", version_info) -# self.assertIn("SIGMA_THOMPSON", version_info) - -# def test_parsed(self): -# with Capturing() as output: -# self._test_parsed() - -# def _test_parsed(self): -# """ -# Test for the parssed version_info -# """ - -# # also tests the parse_version_info indirectly -# version_info_parsed = return_binary_c_version_info(parsed=True) - -# self.assertTrue(isinstance(version_info_parsed, dict)) -# self.assertIn("isotopes", version_info_parsed.keys()) -# self.assertIn("argpairs", version_info_parsed.keys()) -# self.assertIn("ensembles", version_info_parsed.keys()) -# self.assertIn("macros", version_info_parsed.keys()) -# self.assertIn("elements", version_info_parsed.keys()) -# self.assertIn("dt_limits", version_info_parsed.keys()) -# self.assertIn("nucleosynthesis_sources", version_info_parsed.keys()) -# self.assertIn("miscellaneous", version_info_parsed.keys()) - - - -# class test_parse_binary_c_version_info(unittest.TestCase): -# """ -# Unittests for function parse_binary_c_version_info -# """ - -# def test_1(self): -# with Capturing() as output: -# self._test_1() - -# def _test_1(self): -# """ -# Test for the parsed versio info, more detailed -# """ - -# info = return_binary_c_version_info(parsed=False) -# parsed_info = parse_binary_c_version_info(info) - -# self.assertIn("isotopes", parsed_info.keys()) -# self.assertIn("argpairs", parsed_info.keys()) -# self.assertIn("ensembles", parsed_info.keys()) -# self.assertIn("macros", parsed_info.keys()) -# self.assertIn("elements", parsed_info.keys()) -# self.assertIn("dt_limits", parsed_info.keys()) -# self.assertIn("nucleosynthesis_sources", parsed_info.keys()) -# self.assertIn("miscellaneous", parsed_info.keys()) - -# self.assertIsNotNone(parsed_info["argpairs"]) -# self.assertIsNotNone(parsed_info["ensembles"]) -# self.assertIsNotNone(parsed_info["macros"]) -# self.assertIsNotNone(parsed_info["dt_limits"]) -# self.assertIsNotNone(parsed_info["miscellaneous"]) - -# if parsed_info["macros"]["NUCSYN"] == "on": -# self.assertIsNotNone(parsed_info["isotopes"]) - -# if parsed_info["macros"]["NUCSYN_ID_SOURCES"] == "on": -# self.assertIsNotNone(parsed_info["nucleosynthesis_sources"]) - - - -# class test_inspect_dict(unittest.TestCase): -# """ -# Unittests for function inspect_dict -# """ - -# def test_compare_dict(self): -# with Capturing() as output: -# self._test_compare_dict() - -# def _test_compare_dict(self): -# """ -# Test checking if inspect_dict returns the correct structure by comparing it to known value -# """ - -# input_dict = { -# "int": 1, -# "float": 1.2, -# "list": [1, 2, 3], -# "function": os.path.isfile, -# "dict": {"int": 1, "float": 1.2}, -# } -# output_dict = inspect_dict(input_dict) -# compare_dict = { -# "int": int, -# "float": float, -# "list": list, -# "function": os.path.isfile.__class__, -# "dict": {"int": int, "float": float}, -# } -# self.assertTrue(compare_dict == output_dict) - -# def test_compare_dict_with_print(self): -# with Capturing() as output: -# self._test_compare_dict_with_print() - -# def _test_compare_dict_with_print(self): -# """ -# Test checking output is printed -# """ - -# input_dict = { -# "int": 1, -# "float": 1.2, -# "list": [1, 2, 3], -# "function": os.path.isfile, -# "dict": {"int": 1, "float": 1.2}, -# } -# output_dict = inspect_dict(input_dict, print_structure=True) - - - - - -# class test_binaryc_json_serializer(unittest.TestCase): -# """ -# Unittests for function binaryc_json_serializer -# """ - -# def test_not_function(self): -# with Capturing() as output: -# self._test_not_function() - -# def _test_not_function(self): -# """ -# Test passing an object that doesnt get turned in to a string -# """ - -# stringo = "hello" -# output = binaryc_json_serializer(stringo) -# self.assertTrue(stringo == output) - -# def test_function(self): -# with Capturing() as output: -# self._test_function() - -# def _test_function(self): -# """ -# Test passing an object that gets turned in to a string: a function -# """ - -# string_of_function = str(os.path.isfile) -# output = binaryc_json_serializer(os.path.isfile) -# self.assertTrue(string_of_function == output) - - -# class test_handle_ensemble_string_to_json(unittest.TestCase): -# """ -# Unittests for function handle_ensemble_string_to_json -# """ - -# def test_1(self): -# with Capturing() as _: -# self._test_1() - -# def _test_1(self): -# """ -# Test passing string representation of a dictionary. -# """ - -# _ = str(os.path.isfile) -# input_string = '{"ding": 10, "list_example": [1,2,3]}' -# output_dict = handle_ensemble_string_to_json(input_string) - -# self.assertTrue(isinstance(output_dict, dict)) -# self.assertTrue(output_dict["ding"] == 10) -# self.assertTrue(output_dict["list_example"] == [1, 2, 3]) - - -# class test_AutoVivicationDict(unittest.TestCase): -# """ -# Unittests for AutoVivicationDict -# """ - -# def test_add(self): -# """ -# Tests to see if the adding is done correctly -# """ - -# result_dict = AutoVivificationDict() - -# result_dict["a"]["b"]["c"] += 10 - -# self.assertEqual(result_dict["a"]["b"]["c"], 10) -# result_dict["a"]["b"]["c"] += 10 -# self.assertEqual(result_dict["a"]["b"]["c"], 20) - - -# class test_setopts(unittest.TestCase): -# """ -# Unit test class for setopts -# """ - -# def test_setopts(self): -# with Capturing() as output: -# self._test_setopts() - -# def _test_setopts(self): -# """ -# Unittest for function set_opts -# """ - -# default_dict = {"m1": 2, "m2": 3} -# output_dict_1 = set_opts(default_dict, {}) -# self.assertTrue(output_dict_1 == default_dict) - -# new_opts = {"m1": 10} -# output_dict_2 = set_opts(default_dict, new_opts) -# updated_dict = default_dict.copy() -# updated_dict["m1"] = 10 - -# self.assertTrue(output_dict_2 == updated_dict) \ No newline at end of file