def setUp(self):
        self.maker = LHDecisionMaker()
        self.maker.retrieve_sets()
        self.maker.set_experts_map()
        self.maker.choose_best_set()
        self.maker.results = {0:["good_9_4", "good_9_6", "good_9_3", "good_9_5"],
                              1:["good_5_3", "good_5_4", "good_5_3", "good_5_3"],
                              2:["good_3_1", "good_3_2", "good_3_2", "good_3_1"],
                              3:["good_9_4", "good_9_5", "good_9_3", "good_9_5"]}
        self.matrix = [
            [TwoTuple("good_9_4", 0, 4), TwoTuple("good_9_6", 0, 6), TwoTuple("good_9_3", 0, 3),
             TwoTuple("good_9_5", 0, 5)],
            [TwoTuple("good_5_3", 0, 3), TwoTuple("good_5_4", 0, 4), TwoTuple("good_5_3", 0, 3),
             TwoTuple("good_5_3", 0, 3)],
            [TwoTuple("good_3_1", 0, 1), TwoTuple("good_3_2", 0, 2), TwoTuple("good_3_2", 0, 2),
             TwoTuple("good_3_1", 0, 1)],
            [TwoTuple("good_9_4", 0, 4), TwoTuple("good_9_5", 0, 5), TwoTuple("good_9_3", 0, 3),
             TwoTuple("good_9_5", 0, 5)]]

        self.normalized_matrix = [
            [TwoTuple("good_9_4", 0, 4), TwoTuple("good_9_6", 0, 6), TwoTuple("good_9_3", 0, 3),
             TwoTuple("good_9_5", 0, 5)],
            [TwoTuple("good_9_6", 0, 6), TwoTuple("good_9_8", 0, 8), TwoTuple("good_9_6", 0, 6),
             TwoTuple("good_9_6", 0, 6)],
            [TwoTuple("good_9_4", 0, 4), TwoTuple("good_9_8", 0, 8), TwoTuple("good_9_8", 0, 8),
             TwoTuple("good_9_4", 0, 4)],
            [TwoTuple("good_9_4", 0, 4), TwoTuple("good_9_5", 0, 5), TwoTuple("good_9_3", 0, 3),
             TwoTuple("good_9_5", 0, 5)]]
class LHDecisionMakerTest(unittest.TestCase):
    def setUp(self):
        self.maker = LHDecisionMaker()
        self.maker.retrieve_sets()
        self.maker.set_experts_map()
        self.maker.choose_best_set()
        self.maker.results = {0:["good_9_4", "good_9_6", "good_9_3", "good_9_5"],
                              1:["good_5_3", "good_5_4", "good_5_3", "good_5_3"],
                              2:["good_3_1", "good_3_2", "good_3_2", "good_3_1"],
                              3:["good_9_4", "good_9_5", "good_9_3", "good_9_5"]}
        self.matrix = [
            [TwoTuple("good_9_4", 0, 4), TwoTuple("good_9_6", 0, 6), TwoTuple("good_9_3", 0, 3),
             TwoTuple("good_9_5", 0, 5)],
            [TwoTuple("good_5_3", 0, 3), TwoTuple("good_5_4", 0, 4), TwoTuple("good_5_3", 0, 3),
             TwoTuple("good_5_3", 0, 3)],
            [TwoTuple("good_3_1", 0, 1), TwoTuple("good_3_2", 0, 2), TwoTuple("good_3_2", 0, 2),
             TwoTuple("good_3_1", 0, 1)],
            [TwoTuple("good_9_4", 0, 4), TwoTuple("good_9_5", 0, 5), TwoTuple("good_9_3", 0, 3),
             TwoTuple("good_9_5", 0, 5)]]

        self.normalized_matrix = [
            [TwoTuple("good_9_4", 0, 4), TwoTuple("good_9_6", 0, 6), TwoTuple("good_9_3", 0, 3),
             TwoTuple("good_9_5", 0, 5)],
            [TwoTuple("good_9_6", 0, 6), TwoTuple("good_9_8", 0, 8), TwoTuple("good_9_6", 0, 6),
             TwoTuple("good_9_6", 0, 6)],
            [TwoTuple("good_9_4", 0, 4), TwoTuple("good_9_8", 0, 8), TwoTuple("good_9_8", 0, 8),
             TwoTuple("good_9_4", 0, 4)],
            [TwoTuple("good_9_4", 0, 4), TwoTuple("good_9_5", 0, 5), TwoTuple("good_9_3", 0, 3),
             TwoTuple("good_9_5", 0, 5)]]

    def test_lh_two_tuples_decision_root_make_initial_matrix(self):
        self.assertEqual(self.matrix, self.maker.make_matrix_two_tuples())

    def test_lh_two_tuples_decision_root_make_normalized_matrix(self):
        self.maker.matrix = self.maker.make_matrix_two_tuples()
        self.maker.make_normalized_matrix_two_tuples()
        self.assertEqual(self.normalized_matrix, self.maker.matrix)

    def test_lh_two_tuples_decision_calculate_estimates_by_alternative(self):
        self.maker.matrix = self.maker.make_matrix_two_tuples()
        self.maker.make_normalized_matrix_two_tuples()
        res = [TwoTuple("good_9_4", 0.5, 5), TwoTuple("good_9_7", -0.25, 7), TwoTuple("good_9_5", 0, 5),
               TwoTuple("good_9_5", 0, 5)]
        self.assertEqual(res, self.maker.calculate_total_by_alternative())

    def test_lh_two_tuples_decision_final_decision(self):
        self.maker.matrix = self.maker.make_matrix_two_tuples()
        self.maker.make_normalized_matrix_two_tuples()
        self.maker.calculate_total_by_alternative()
        res = TwoTuple("good_9_7", -0.25, 7)
        self.assertEqual(res, self.maker.lh_two_tuple_decision()[0])

    def test_lh_two_tuples_transformation(self):
        res = TwoTuple("good_5_2", 0.5, 2)
        test_tuple = TwoTuple("good_9_5", 0, 5)
        self.assertEqual(res, self.maker.transform_to_level(source_level=9,target_level=5,two_tuple=test_tuple))

    def tearDown(self):
        del self.maker