def test_get_criteria(self): ba = core.BestAlternative(jsonScores=jsonString) ba.setup(jsonScores=json.loads(jsonString)) list_of_criteria = ba.get_criteria() expected_output = [u'accuracy', u'comfort', u'duration', u'time'] self.assertEqual(len(ba.get_criteria()), 4) self.assertEqual(sorted(list_of_criteria), expected_output)
def test_sum_of_criteria_values(self): ba = core.BestAlternative(jsonScores=jsonString) ba.setup(jsonScores=json.loads(jsonString)) dict_of_sums = ba.sum_of_criteria_values() expected_output = { u'duration': 2.4000000000000004, u'comfort': 1.5, u'accuracy': 0.6, u'time': 0.9 } self.assertEqual(dict_of_sums, expected_output)
def test_get_values_for_an_alternative(self): ba = core.BestAlternative(jsonScores=jsonString) ba.setup(jsonScores=json.loads(jsonString)) col_values = { u'duration': 0.9, u'comfort': 0.6, u'accuracy': 0.3, u'time': 0.2 } fit_values = { u'duration': 0.7, u'comfort': 0.4, u'accuracy': 0.1, u'time': 0.4 } sig_values = { u'duration': 0.8, u'comfort': 0.5, u'accuracy': 0.2, u'time': 0.3 } self.assertEqual(ba.get_values_for_an_alternative('sig'), sig_values) self.assertEqual(ba.get_values_for_an_alternative('fit'), fit_values) self.assertEqual(ba.get_values_for_an_alternative('col'), col_values)
def test_calculate(self): jsonString = ''' { "accuracy": { "fit": 0.1, "sig": 0.2, "col": 0.3 }, "comfort": { "fit": 0.4, "sig": 0.5, "col": 0.6 }, "duration": { "fit": 0.7, "sig": 0.8, "col": 0.9 }, "time": { "fit": 0.4, "sig": 0.3, "col": 0.2 } } ''' ba = core.BestAlternative(jsonScores=jsonString) asserted_result = ''' { "best_alternative": "fit", "choquet_scores": { "fit": 2.8, "sig": 1.2, "col": 2.0 } } ''' result = ba.calculate() schema = ''' { "$schema": "http://json-schema.org/draft-04/schema#", "title": "mdat output", "description": "An output data set for the Medical Decision Aids Tool python library", "type": "object", "required" : [ "best_alternative", "choquet_scores" ], "properties" : { "best_alternative" : { "description": "the name best alternative suggested by the matrix of responses", "type" : "string" }, "choquet_scores" : { "description": "a list of alternatives with the Choquet Integral score for each", "type" : "object", "patternProperties": { "^.+$": { "type": "number", "minimum" : 0 } }, "minProperties": 2 } } } ''' try: jsonschema.validate(json.loads(json.dumps(result)), json.loads(schema)) self.assertEqual(1, 1) except jsonschema.ValidationError as e: self.assertEqual("", e.message, msg=e.message) except jsonschema.SchemaError as e: self.assertEqual("", e.message, msg=e.message)
def test_get_alternatives(self): ba = core.BestAlternative(jsonScores=jsonString) ba.setup(jsonScores=json.loads(jsonString)) list_of_alternatives = ba.get_alternatives() expected_output = [u'sig', u'col', u'fit'] self.assertEqual(list_of_alternatives, expected_output)
def test_setup(self): ba = core.BestAlternative(jsonScores=jsonString) ba.setup(jsonScores=json.loads(jsonString)) self.assertEqual(1, 1)