def test_arbitrary_rankings(self): """test that _select_best_with_multiple_criteria can sort with mutliple criteria and get the right answer""" a = (0,1) b = (1,1) c = (1,2) d = (2,1) e = (2,2) f = (0,4) g = (-1,5) input = [a,b,c,d,e,f,g] #sort by left minimum, right minimum result = EnsemblTranscriptDatasource._select_best_with_multiple_criteria(input, [(lambda x: x[0], min),(lambda x: x[1], min)]) self.assertEqual(result[0], g) #sort by right minimum, left minimum result = EnsemblTranscriptDatasource._select_best_with_multiple_criteria(input,[(lambda x: x[1], min),(lambda x: x[0], min)]) self.assertEqual(result[0], a) #sort by left maximum, right minimum result = EnsemblTranscriptDatasource._select_best_with_multiple_criteria(input, [(lambda x: x[0], max),(lambda x: x[0], min)]) self.assertEqual(result[0], d) #sort by sum, then right maximum result = EnsemblTranscriptDatasource._select_best_with_multiple_criteria(input,[(sum, max), (lambda x: x[1],max)]) self.assertEqual(result[0], g)
def test_tie_breaking_rankings(self): """test that _select_best_with_multiple_criteria works with ties""" a = (0, 0, 1) b = (0, 0, 2) c = (0, 0, 3) input = [a, b, c] result = EnsemblTranscriptDatasource._select_best_with_multiple_criteria( input, [(lambda x: x[0], max), (lambda x: 3, min), (lambda x: x[1], max), (lambda x: x[2], max)]) self.assertEqual(result[0], c)
def test_tie_breaking_rankings(self): """test that _select_best_with_multiple_criteria works with ties""" a = (0,0,1) b = (0,0,2) c = (0,0,3) input =[a,b,c] result = EnsemblTranscriptDatasource._select_best_with_multiple_criteria(input, [(lambda x: x[0], max), (lambda x: 3,min), (lambda x: x[1], max), (lambda x: x[2],max)]) self.assertEqual(result[0],c)