def test_cutoff_hazard_pass(self): """Test _cutoff_hazard_damage""" meas = MeasureSet() meas.read_mat(ENT_TEST_MAT) act_1 = meas.get_measure(name='Seawall')[0] haz = Hazard('TC') haz.read_mat(HAZ_TEST_MAT) exp = Exposures() exp.read_mat(ENT_TEST_MAT) exp.gdf.rename(columns={'if_': 'if_TC'}, inplace=True) exp.check() imp_set = ImpactFuncSet() imp_set.read_mat(ENT_TEST_MAT) new_haz = act_1._cutoff_hazard_damage(exp, imp_set, haz) self.assertFalse(id(new_haz) == id(haz)) pos_no_null = np.array([6249, 7697, 9134, 13500, 13199, 5944, 9052, 9050, 2429, 5139, 9053, 7102, 4096, 1070, 5948, 1076, 5947, 7432, 5949, 11694, 5484, 6246, 12147, 778, 3326, 7199, 12498, 11698, 6245, 5327, 4819, 8677, 5970, 7101, 779, 3894, 9051, 5976, 3329, 5978, 4282, 11697, 7193, 5351, 7310, 7478, 5489, 5526, 7194, 4283, 7191, 5328, 4812, 5528, 5527, 5488, 7475, 5529, 776, 5758, 4811, 6223, 7479, 7470, 5480, 5325, 7477, 7318, 7317, 11696, 7313, 13165, 6221]) all_haz = np.arange(haz.intensity.shape[0]) all_haz[pos_no_null] = -1 pos_null = np.argwhere(all_haz > 0).reshape(-1) for i_ev in pos_null: self.assertEqual(new_haz.intensity[i_ev, :].max(), 0)
def test_change_exposures_if_pass(self): """Test _change_exposures_if""" meas = Measure() meas.imp_fun_map = '1to3' meas.haz_type = 'TC' imp_set = ImpactFuncSet() imp_tc = ImpactFunc() imp_tc.haz_type = 'TC' imp_tc.id = 1 imp_tc.intensity = np.arange(10, 100, 10) imp_tc.mdd = np.arange(10, 100, 10) imp_tc.paa = np.arange(10, 100, 10) imp_set.append(imp_tc) imp_tc = ImpactFunc() imp_tc.haz_type = 'TC' imp_tc.id = 3 imp_tc.intensity = np.arange(10, 100, 10) imp_tc.mdd = np.arange(10, 100, 10) * 2 imp_tc.paa = np.arange(10, 100, 10) * 2 exp = Exposures() exp.read_hdf5(EXP_DEMO_H5) new_exp = meas._change_exposures_if(exp) self.assertEqual(new_exp.ref_year, exp.ref_year) self.assertEqual(new_exp.value_unit, exp.value_unit) self.assertEqual(new_exp.tag.file_name, exp.tag.file_name) self.assertEqual(new_exp.tag.description, exp.tag.description) self.assertTrue(np.array_equal(new_exp.gdf.value.values, exp.gdf.value.values)) self.assertTrue(np.array_equal(new_exp.gdf.latitude.values, exp.gdf.latitude.values)) self.assertTrue(np.array_equal(new_exp.gdf.longitude.values, exp.gdf.longitude.values)) self.assertTrue(np.array_equal(exp.gdf[INDICATOR_IF + 'TC'].values, np.ones(new_exp.gdf.shape[0]))) self.assertTrue(np.array_equal(new_exp.gdf[INDICATOR_IF + 'TC'].values, np.ones(new_exp.gdf.shape[0]) * 3))
def read_excel(self, file_name, description=''): """Read csv or xls or xlsx file following climada's template. Parameters: file_name (str, optional): file name(s) or folder name containing the files to read description (str or list(str), optional): one description of the data or a description of each data file Raises: ValueError """ self.exposures = Exposures(pd.read_excel(file_name)) self.exposures.tag = Tag() self.exposures.tag.file_name = file_name self.exposures.tag.description = description self.disc_rates = DiscRates() self.disc_rates.read_excel(file_name, description) self.impact_funcs = ImpactFuncSet() self.impact_funcs.read_excel(file_name, description) self.measures = MeasureSet() self.measures.read_excel(file_name, description)
def test_change_imp_func_pass(self): """Test _change_imp_func""" meas = MeasureSet() meas.read_mat(ENT_TEST_MAT) act_1 = meas.get_measure(name='Mangroves')[0] imp_set = ImpactFuncSet() imp_tc = ImpactFunc() imp_tc.haz_type = 'XX' imp_tc.id = 1 imp_tc.intensity = np.arange(10, 100, 10) imp_tc.intensity[0] = 0. imp_tc.intensity[-1] = 100. imp_tc.mdd = np.array([0.0, 0.0, 0.021857142857143, 0.035887500000000, 0.053977415307403, 0.103534246575342, 0.180414000000000, 0.410796000000000, 0.410796000000000]) imp_tc.paa = np.array([0, 0.005000000000000, 0.042000000000000, 0.160000000000000, 0.398500000000000, 0.657000000000000, 1.000000000000000, 1.000000000000000, 1.000000000000000]) imp_set.append(imp_tc) new_imp = act_1._change_imp_func(imp_set).get_func('XX')[0] self.assertTrue(np.array_equal(new_imp.intensity, np.array([4., 24., 34., 44., 54., 64., 74., 84., 104.]))) self.assertTrue(np.array_equal(new_imp.mdd, np.array([0, 0, 0.021857142857143, 0.035887500000000, 0.053977415307403, 0.103534246575342, 0.180414000000000, 0.410796000000000, 0.410796000000000]))) self.assertTrue(np.array_equal(new_imp.paa, np.array([0, 0.005000000000000, 0.042000000000000, 0.160000000000000, 0.398500000000000, 0.657000000000000, 1.000000000000000, 1.000000000000000, 1.000000000000000]))) self.assertFalse(id(new_imp) == id(imp_tc))
def test_get_func_wrong_error(self): """Test get_func method with wrong inputs.""" imp_fun = ImpactFuncSet() vulner_1 = ImpactFunc() vulner_1.haz_type = 'WS' vulner_1.id = 56 imp_fun.append(vulner_1) self.assertEqual([], imp_fun.get_func('TC'))
def test_impact_funcs_pass(self): """Plot diferent impact functions.""" myfuncs = ImpactFuncSet() myfuncs.read_excel(ENT_DEMO_TODAY) myax = myfuncs.plot() self.assertEqual(2, len(myax)) self.assertIn('TC 1: Tropical cyclone default', \ myax[0].title.get_text()) self.assertIn('TC 3: TC Building code', myax[1].title.get_text())
def test_template_file_pass(self): """Read template excel file""" imp_funcs = ImpactFuncSet() imp_funcs.read_excel(ENT_TEMPLATE_XLS) # Check some results self.assertEqual(len(imp_funcs._data), 10) self.assertEqual(len(imp_funcs._data['TC'][3].paa), 9) self.assertEqual(len(imp_funcs._data['EQ'][1].intensity), 14) self.assertEqual(len(imp_funcs._data['HS'][1].mdd), 16)
def test_append_pass(self): """Test append adds ImpactFunc to ImpactFuncSet correctly.""" imp_fun = ImpactFuncSet() vulner_1 = ImpactFunc() vulner_1.id = 1 vulner_1.haz_type = 'TC' imp_fun.append(vulner_1) self.assertEqual(1, len(imp_fun._data)) self.assertIn('TC', imp_fun._data.keys()) self.assertEqual(1, len(imp_fun._data['TC'])) self.assertIn(1, imp_fun._data['TC'].keys()) vulner_2 = ImpactFunc() vulner_2.id = 3 vulner_2.haz_type = 'TC' imp_fun.append(vulner_2) self.assertEqual(1, len(imp_fun._data)) self.assertIn('TC', imp_fun._data.keys()) self.assertEqual(2, len(imp_fun._data['TC'])) self.assertIn(1, imp_fun._data['TC'].keys()) self.assertIn(3, imp_fun._data['TC'].keys()) vulner_3 = ImpactFunc() vulner_3.id = 3 vulner_3.haz_type = 'FL' imp_fun.append(vulner_3) self.assertEqual(2, len(imp_fun._data)) self.assertIn('TC', imp_fun._data.keys()) self.assertIn('FL', imp_fun._data.keys()) self.assertEqual(2, len(imp_fun._data['TC'])) self.assertEqual(1, len(imp_fun._data['FL'])) self.assertIn(1, imp_fun._data['TC'].keys()) self.assertIn(3, imp_fun._data['TC'].keys()) self.assertIn(3, imp_fun._data['FL'].keys())
def from_excel(cls, file_name, description=''): """Read csv or xls or xlsx file following climada's template. Parameters ---------- file_name : str, optional file name(s) or folder name containing the files to read description : str or list(str), optional one description of the data or a description of each data file Returns ------- ent : climada.entity.Entity The entity from excel file """ exp = Exposures(pd.read_excel(file_name)) exp.tag = Tag() exp.tag.file_name = str(file_name) exp.tag.description = description dr = DiscRates.from_excel(file_name, description) impf_set = ImpactFuncSet.from_excel(file_name, description) meas_set = MeasureSet.from_excel(file_name, description) return cls(exposures=exp, disc_rates=dr, impact_func_set=impf_set, measure_set=meas_set)
def test_cutoff_hazard_region_pass(self): """Test _cutoff_hazard_damage in specific region""" meas = MeasureSet.from_mat(ENT_TEST_MAT) act_1 = meas.get_measure(name='Seawall')[0] act_1.exp_region_id = [1] haz = Hazard.from_mat(HAZ_TEST_MAT) exp = Exposures.from_mat(ENT_TEST_MAT) exp.gdf['region_id'] = np.zeros(exp.gdf.shape[0]) exp.gdf.region_id.values[10:] = 1 exp.check() imp_set = ImpactFuncSet.from_mat(ENT_TEST_MAT) new_haz = act_1._cutoff_hazard_damage(exp, imp_set, haz) self.assertFalse(id(new_haz) == id(haz)) pos_no_null = np.array([ 6249, 7697, 9134, 13500, 13199, 5944, 9052, 9050, 2429, 5139, 9053, 7102, 4096, 1070, 5948, 1076, 5947, 7432, 5949, 11694, 5484, 6246, 12147, 778, 3326, 7199, 12498, 11698, 6245, 5327, 4819, 8677, 5970, 7101, 779, 3894, 9051, 5976, 3329, 5978, 4282, 11697, 7193, 5351, 7310, 7478, 5489, 5526, 7194, 4283, 7191, 5328, 4812, 5528, 5527, 5488, 7475, 5529, 776, 5758, 4811, 6223, 7479, 7470, 5480, 5325, 7477, 7318, 7317, 11696, 7313, 13165, 6221 ]) all_haz = np.arange(haz.intensity.shape[0]) all_haz[pos_no_null] = -1 pos_null = np.argwhere(all_haz > 0).reshape(-1) centr_null = np.unique(exp.gdf.centr_[exp.gdf.region_id == 0]) for i_ev in pos_null: self.assertEqual(new_haz.intensity[i_ev, centr_null].max(), 0)
def test_remove_wrong_error(self): """Test error is raised when invalid inputs.""" imp_fun = ImpactFuncSet() vulner_1 = ImpactFunc() vulner_1.id = 1 vulner_1.haz_type = 'TC' imp_fun.append(vulner_1) with self.assertLogs('climada.entity.impact_funcs.impact_func_set', level='WARNING') as cm: imp_fun.remove_func('FL') self.assertIn('No ImpactFunc with hazard FL.', cm.output[0]) with self.assertLogs('climada.entity.impact_funcs.impact_func_set', level='WARNING') as cm: imp_fun.remove_func(fun_id=3) self.assertIn('No ImpactFunc with id 3.', cm.output[0])
def test_attributes_all(self): """All attributes are defined""" imp_fun = ImpactFuncSet() vulner_1 = ImpactFunc() vulner_1.haz_type = 'TC' vulner_1.id = '2' self.assertTrue(hasattr(imp_fun, 'tag')) self.assertTrue(hasattr(imp_fun, '_data')) self.assertTrue(hasattr(vulner_1, 'haz_type')) self.assertTrue(hasattr(vulner_1, 'name')) self.assertTrue(hasattr(vulner_1, 'id')) self.assertTrue(hasattr(vulner_1, 'intensity_unit')) self.assertTrue(hasattr(vulner_1, 'mdd')) self.assertTrue(hasattr(vulner_1, 'paa'))
def read_mat(self, file_name, description=''): """Read MATLAB file of climada. Parameters: file_name (str, optional): file name(s) or folder name containing the files to read description (str or list(str), optional): one description of the data or a description of each data file Raises: ValueError """ self.exposures = Exposures() self.exposures.read_mat(file_name) self.disc_rates = DiscRates() self.disc_rates.read_mat(file_name, description) self.impact_funcs = ImpactFuncSet() self.impact_funcs.read_mat(file_name, description) self.measures = MeasureSet() self.measures.read_mat(file_name, description)
def test_not_filter_exposures_pass(self): """Test _filter_exposures method with []""" meas = Measure() meas.exp_region_id = [] exp = Exposures() imp_set = ImpactFuncSet() haz = Hazard('TC') new_exp = Exposures() new_ifs = ImpactFuncSet() new_haz = Hazard('TC') res_exp, res_ifs, res_haz = meas._filter_exposures(exp, imp_set, haz, new_exp, new_ifs, new_haz) self.assertTrue(res_exp is new_exp) self.assertTrue(res_ifs is new_ifs) self.assertTrue(res_haz is new_haz) self.assertTrue(res_exp is not exp) self.assertTrue(res_ifs is not imp_set) self.assertTrue(res_haz is not haz)
def test_remove_func_pass(self): """Test remove_func removes ImpactFunc of ImpactFuncSet correcty.""" imp_fun = ImpactFuncSet() vulner_1 = ImpactFunc() vulner_1.id = 1 vulner_1.haz_type = 'TC' imp_fun.append(vulner_1) imp_fun.remove_func() self.assertEqual(0, len(imp_fun._data))
def __init__(self, exposures=None, disc_rates=None, impact_func_set=None, measure_set=None): """ Initialize entity Parameters ---------- exposures : climada.entity.Exposures, optional Exposures of the entity. The default is None (empty Exposures()). disc_rates : climada.entity.DiscRates, optional Disc rates of the entity. The default is None (empty DiscRates()). impact_func_set : climada.entity.ImpactFuncSet, optional The impact function set. The default is None (empty ImpactFuncSet()). measure_set : climada.entity.Measures, optional The measures. The default is None (empty MeasuresSet(). """ self.exposures = Exposures() if exposures is None else exposures self.disc_rates = DiscRates() if disc_rates is None else disc_rates self.impact_funcs = ImpactFuncSet( ) if impact_func_set is None else impact_func_set self.measures = MeasureSet() if measure_set is None else measure_set
def test_add_wrong_error(self): """Test error is raised when wrong ImpactFunc provided.""" imp_fun = ImpactFuncSet() vulner_1 = ImpactFunc() with self.assertLogs('climada.entity.impact_funcs.impact_func_set', level='WARNING') as cm: imp_fun.append(vulner_1) self.assertIn("Input ImpactFunc's hazard type not set.", cm.output[0]) vulner_1.haz_type = 'TC' with self.assertLogs('climada.entity.impact_funcs.impact_func_set', level='WARNING') as cm: imp_fun.append(vulner_1) self.assertIn("Input ImpactFunc's id not set.", cm.output[0]) with self.assertRaises(ValueError) as cm: imp_fun.append(45) self.assertIn("Input value is not of type ImpactFunc.", str(cm.exception))
def test_check_wrongMDD_fail(self): """Wrong MDD definition""" imp_fun = ImpactFuncSet() vulner = ImpactFunc() vulner.id = 1 vulner.haz_type = 'TC' vulner.intensity = np.array([1, 2, 3]) vulner.mdd = np.array([1, 2]) vulner.paa = np.array([1, 2, 3]) imp_fun.append(vulner) with self.assertRaises(ValueError) as cm: imp_fun.check() self.assertIn('Invalid ImpactFunc.mdd size: 3 != 2.', str(cm.exception))
def test_check_wrongMDD_fail(self): """Wrong MDD definition""" imp_fun = ImpactFuncSet() vulner = ImpactFunc() vulner.id = 1 vulner.haz_type = 'TC' vulner.intensity = np.array([1, 2, 3]) vulner.mdd = np.array([1, 2]) vulner.paa = np.array([1, 2, 3]) imp_fun.append(vulner) with self.assertLogs('climada.util.checker', level='ERROR') as cm: with self.assertRaises(ValueError): imp_fun.check() self.assertIn('Invalid ImpactFunc.mdd size: 3 != 2.', cm.output[0])
def from_mat(cls, file_name, description=''): """Read MATLAB file of climada. Parameters ---------- file_name : str, optional file name(s) or folder name containing the files to read description : str or list(str), optional one description of the data or a description of each data file Returns ------- ent : climada.entity.Entity The entity from matlab file """ return cls(exposures=Exposures.from_mat(file_name), disc_rates=DiscRates.from_mat(file_name, description), impact_func_set=ImpactFuncSet.from_mat( file_name, description), measure_set=MeasureSet.from_mat(file_name, description))
def test_get_hazards_pass(self): """Test get_hazard_types function.""" imp_fun = ImpactFuncSet() vulner_1 = ImpactFunc() vulner_1.id = 1 vulner_1.haz_type = 'TC' imp_fun.append(vulner_1) self.assertEqual(1, len(imp_fun.get_hazard_types())) self.assertEqual(['TC'], imp_fun.get_hazard_types()) vulner_2 = ImpactFunc() vulner_2.id = 1 vulner_2.haz_type = 'TC' imp_fun.append(vulner_2) self.assertEqual(1, len(imp_fun.get_hazard_types())) self.assertEqual(['TC'], imp_fun.get_hazard_types()) vulner_3 = ImpactFunc() vulner_3.id = 1 vulner_3.haz_type = 'FL' imp_fun.append(vulner_3) self.assertEqual(2, len(imp_fun.get_hazard_types())) self.assertIn('TC', imp_fun.get_hazard_types()) self.assertIn('FL', imp_fun.get_hazard_types())
def test_write_read_pass(self): """Write + read excel file""" imp_funcs = ImpactFuncSet() imp_funcs.tag.file_name = 'No file name' imp_funcs.tag.description = 'test writer' imp1 = ImpactFunc() imp1.id = 1 imp1.name = 'code 1' imp1.intensity_unit = 'm/s' imp1.haz_type = 'TC' imp1.intensity = np.arange(100) imp1.mdd = np.arange(100) * 0.5 imp1.paa = np.ones(100) imp_funcs.append(imp1) imp2 = ImpactFunc() imp2.id = 2 imp2.name = 'code 2' imp2.intensity_unit = 'm/s' imp2.haz_type = 'TC' imp2.intensity = np.arange(102) imp2.mdd = np.arange(102) * 0.25 imp2.paa = np.ones(102) imp_funcs.append(imp2) imp3 = ImpactFunc() imp3.id = 1 imp3.name = 'code 1' imp3.intensity_unit = 'm' imp3.haz_type = 'FL' imp3.intensity = np.arange(86) imp3.mdd = np.arange(86) * 0.15 imp3.paa = np.ones(86) imp_funcs.append(imp3) imp4 = ImpactFunc() imp4.id = 15 imp4.name = 'code 15' imp4.intensity_unit = 'K' imp4.haz_type = 'DR' imp4.intensity = np.arange(5) imp4.mdd = np.arange(5) imp4.paa = np.ones(5) imp_funcs.append(imp4) file_name = CONFIG.impact_funcs.test_data.dir().joinpath( 'test_write.xlsx') imp_funcs.write_excel(file_name) imp_res = ImpactFuncSet.from_excel(file_name) self.assertEqual(imp_res.tag.file_name, str(file_name)) self.assertEqual(imp_res.tag.description, '') # first function for fun_haz, fun_dict in imp_res.get_func().items(): for fun_id, fun in fun_dict.items(): if fun_haz == 'TC' and fun_id == 1: ref_fun = imp1 elif fun_haz == 'TC' and fun_id == 2: ref_fun = imp2 elif fun_haz == 'FL' and fun_id == 1: ref_fun = imp3 elif fun_haz == 'DR' and fun_id == 15: ref_fun = imp4 else: self.assertEqual(1, 0) self.assertEqual(ref_fun.haz_type, fun.haz_type) self.assertEqual(ref_fun.id, fun.id) self.assertEqual(ref_fun.name, fun.name) self.assertEqual(ref_fun.intensity_unit, fun.intensity_unit) self.assertTrue(np.allclose(ref_fun.intensity, fun.intensity)) self.assertTrue(np.allclose(ref_fun.mdd, fun.mdd)) self.assertTrue(np.allclose(ref_fun.paa, fun.paa))
def test_demo_file_pass(self): """Read demo excel file""" # Read demo excel file description = 'One single file.' imp_funcs = ImpactFuncSet.from_excel(ENT_DEMO_TODAY, description) # Check results n_funcs = 2 hazard = 'TC' first_id = 1 second_id = 3 self.assertEqual(len(imp_funcs._data), 1) self.assertEqual(len(imp_funcs._data[hazard]), n_funcs) # first function self.assertEqual(imp_funcs._data[hazard][first_id].id, 1) self.assertEqual(imp_funcs._data[hazard][first_id].name, 'Tropical cyclone default') self.assertEqual(imp_funcs._data[hazard][first_id].intensity_unit, 'm/s') self.assertEqual(imp_funcs._data[hazard][first_id].intensity.shape, (9, )) self.assertEqual(imp_funcs._data[hazard][first_id].intensity[0], 0) self.assertEqual(imp_funcs._data[hazard][first_id].intensity[1], 20) self.assertEqual(imp_funcs._data[hazard][first_id].intensity[2], 30) self.assertEqual(imp_funcs._data[hazard][first_id].intensity[3], 40) self.assertEqual(imp_funcs._data[hazard][first_id].intensity[4], 50) self.assertEqual(imp_funcs._data[hazard][first_id].intensity[5], 60) self.assertEqual(imp_funcs._data[hazard][first_id].intensity[6], 70) self.assertEqual(imp_funcs._data[hazard][first_id].intensity[7], 80) self.assertEqual(imp_funcs._data[hazard][first_id].intensity[8], 100) self.assertEqual(imp_funcs._data[hazard][first_id].mdd.shape, (9, )) self.assertEqual(imp_funcs._data[hazard][first_id].mdd[0], 0) self.assertEqual(imp_funcs._data[hazard][first_id].mdd[8], 0.41079600) self.assertEqual(imp_funcs._data[hazard][first_id].paa.shape, (9, )) self.assertEqual(imp_funcs._data[hazard][first_id].paa[0], 0) self.assertEqual(imp_funcs._data[hazard][first_id].paa[8], 1) # second function self.assertEqual(imp_funcs._data[hazard][second_id].id, 3) self.assertEqual(imp_funcs._data[hazard][second_id].name, 'TC Building code') self.assertEqual(imp_funcs._data[hazard][first_id].intensity_unit, 'm/s') self.assertEqual(imp_funcs._data[hazard][second_id].intensity.shape, (9, )) self.assertEqual(imp_funcs._data[hazard][second_id].intensity[0], 0) self.assertEqual(imp_funcs._data[hazard][second_id].intensity[1], 20) self.assertEqual(imp_funcs._data[hazard][second_id].intensity[2], 30) self.assertEqual(imp_funcs._data[hazard][second_id].intensity[3], 40) self.assertEqual(imp_funcs._data[hazard][second_id].intensity[4], 50) self.assertEqual(imp_funcs._data[hazard][second_id].intensity[5], 60) self.assertEqual(imp_funcs._data[hazard][second_id].intensity[6], 70) self.assertEqual(imp_funcs._data[hazard][second_id].intensity[7], 80) self.assertEqual(imp_funcs._data[hazard][second_id].intensity[8], 100) self.assertEqual(imp_funcs._data[hazard][second_id].mdd.shape, (9, )) self.assertEqual(imp_funcs._data[hazard][second_id].mdd[0], 0) self.assertEqual(imp_funcs._data[hazard][second_id].mdd[8], 0.4) self.assertEqual(imp_funcs._data[hazard][second_id].paa.shape, (9, )) self.assertEqual(imp_funcs._data[hazard][second_id].paa[0], 0) self.assertEqual(imp_funcs._data[hazard][second_id].paa[8], 1) # general information self.assertEqual(imp_funcs.tag.file_name, str(ENT_DEMO_TODAY)) self.assertEqual(imp_funcs.tag.description, description)
def test_extend_different_extend(self): """Extend ImpactFuncSet with same and new values. The vulnerabilities with repeated id are overwritten.""" imp_fun = ImpactFuncSet() vulner_1 = ImpactFunc() vulner_1.id = 1 vulner_1.haz_type = 'TC' imp_fun.append(vulner_1) vulner_2 = ImpactFunc() vulner_2.id = 3 vulner_2.haz_type = 'TC' imp_fun.append(vulner_2) vulner_3 = ImpactFunc() vulner_3.id = 3 vulner_3.haz_type = 'FL' imp_fun.append(vulner_3) imp_fun_add = ImpactFuncSet() vulner_1 = ImpactFunc() vulner_1.id = 1 vulner_1.haz_type = 'TC' imp_fun_add.append(vulner_1) vulner_2 = ImpactFunc() vulner_2.id = 1 vulner_2.haz_type = 'WS' imp_fun_add.append(vulner_2) vulner_3 = ImpactFunc() vulner_3.id = 3 vulner_3.haz_type = 'FL' imp_fun_add.append(vulner_3) imp_fun.extend(imp_fun_add) imp_fun.check() self.assertEqual(imp_fun.size(), 4) self.assertEqual(imp_fun.size('TC'), 2) self.assertEqual(imp_fun.size('FL'), 1) self.assertEqual(imp_fun.size('WS'), 1)
def test_extend_equal_same(self): """Extend the same ImpactFuncSet. The inital ImpactFuncSet is obtained.""" imp_fun = ImpactFuncSet() vulner_1 = ImpactFunc() vulner_1.id = 1 vulner_1.haz_type = 'TC' imp_fun.append(vulner_1) imp_fun_add = ImpactFuncSet() imp_fun_add.append(vulner_1) imp_fun.extend(imp_fun_add) imp_fun.check() self.assertEqual(imp_fun.size(), 1) self.assertEqual(imp_fun.size('TC'), 1)
def test_extend_to_empty_same(self): """Extend ImpactFuncSet to empty one.""" imp_fun = ImpactFuncSet() imp_fun_add = ImpactFuncSet() vulner_1 = ImpactFunc() vulner_1.id = 1 vulner_1.haz_type = 'TC' imp_fun_add.append(vulner_1) vulner_2 = ImpactFunc() vulner_2.id = 3 vulner_2.haz_type = 'TC' imp_fun_add.append(vulner_2) vulner_3 = ImpactFunc() vulner_3.id = 3 vulner_3.haz_type = 'FL' imp_fun_add.append(vulner_3) imp_fun_add.tag.file_name = 'file1.txt' imp_fun.extend(imp_fun_add) imp_fun.check() self.assertEqual(imp_fun.size(), 3) self.assertEqual(imp_fun.size('TC'), 2) self.assertEqual(imp_fun.size('FL'), 1) self.assertEqual(imp_fun.tag.file_name, imp_fun_add.tag.file_name) self.assertEqual(imp_fun.tag.description, imp_fun_add.tag.description)
def test_remove_add_pass(self): """Test ImpactFunc can be added after removing.""" imp_fun = ImpactFuncSet() vulner_1 = ImpactFunc() vulner_1.id = 1 vulner_1.haz_type = 'TC' imp_fun.append(vulner_1) imp_fun.remove_func() self.assertEqual(0, len(imp_fun.get_hazard_types())) self.assertEqual(0, len(imp_fun.get_ids())) imp_fun.append(vulner_1) self.assertEqual(1, len(imp_fun.get_hazard_types())) self.assertEqual('TC', imp_fun.get_hazard_types()[0]) self.assertEqual(1, len(imp_fun.get_ids())) self.assertEqual([1], imp_fun.get_ids('TC'))
def test_get_func_pass(self): """Test normal functionality of get_func method.""" imp_fun = ImpactFuncSet() vulner_1 = ImpactFunc() vulner_1.haz_type = 'WS' vulner_1.id = 56 imp_fun.append(vulner_1) self.assertEqual(1, len(imp_fun.get_func('WS'))) self.assertEqual(1, len(imp_fun.get_func(fun_id=56))) self.assertIs(vulner_1, imp_fun.get_func('WS', 56)) vulner_2 = ImpactFunc() vulner_2.haz_type = 'WS' vulner_2.id = 6 imp_fun.append(vulner_2) self.assertEqual(2, len(imp_fun.get_func('WS'))) self.assertEqual(1, len(imp_fun.get_func(fun_id=6))) self.assertIs(vulner_2, imp_fun.get_func('WS', 6)) vulner_3 = ImpactFunc() vulner_3.haz_type = 'TC' vulner_3.id = 6 imp_fun.append(vulner_3) self.assertEqual(2, len(imp_fun.get_func(fun_id=6))) self.assertEqual(1, len(imp_fun.get_func(fun_id=56))) self.assertEqual(2, len(imp_fun.get_func('WS'))) self.assertEqual(1, len(imp_fun.get_func('TC'))) self.assertIs(vulner_3, imp_fun.get_func('TC', 6)) self.assertEqual(2, len(imp_fun.get_func().keys())) self.assertEqual(1, len(imp_fun.get_func()['TC'].keys())) self.assertEqual(2, len(imp_fun.get_func()['WS'].keys()))
def test_size_wrong_zero(self): """Test size method with wrong inputs.""" imp_fun = ImpactFuncSet() self.assertEqual(0, imp_fun.size('TC')) self.assertEqual(0, imp_fun.size('TC', 3)) self.assertEqual(0, imp_fun.size(fun_id=3))
def test_size_pass(self): """Test size function.""" imp_fun = ImpactFuncSet() self.assertEqual(0, imp_fun.size()) vulner_1 = ImpactFunc() vulner_1.haz_type = 'WS' vulner_1.id = 56 imp_fun.append(vulner_1) self.assertEqual(1, imp_fun.size()) self.assertEqual(1, imp_fun.size('WS', 56)) self.assertEqual(1, imp_fun.size('WS')) self.assertEqual(1, imp_fun.size(fun_id=56)) imp_fun.append(vulner_1) self.assertEqual(1, imp_fun.size()) self.assertEqual(1, imp_fun.size('WS', 56)) self.assertEqual(1, imp_fun.size('WS')) self.assertEqual(1, imp_fun.size(fun_id=56)) vulner_2 = ImpactFunc() vulner_2.haz_type = 'WS' vulner_2.id = 5 imp_fun.append(vulner_2) self.assertEqual(2, imp_fun.size()) self.assertEqual(1, imp_fun.size('WS', 56)) self.assertEqual(2, imp_fun.size('WS')) self.assertEqual(1, imp_fun.size(fun_id=56)) self.assertEqual(1, imp_fun.size(fun_id=5)) vulner_3 = ImpactFunc() vulner_3.haz_type = 'TC' vulner_3.id = 5 imp_fun.append(vulner_3) self.assertEqual(3, imp_fun.size()) self.assertEqual(1, imp_fun.size('TC', 5)) self.assertEqual(2, imp_fun.size('WS')) self.assertEqual(1, imp_fun.size('TC')) self.assertEqual(1, imp_fun.size(fun_id=56)) self.assertEqual(2, imp_fun.size(fun_id=5))