def test_criterion_homogeneous_raise_invalidanswererror(): question = survey.NumericQuestion(1, 'Do you like food?', 0, 10) answer1 = [survey.Answer(11)] answer2 = [survey.Answer(False)] answer3 = [survey.Answer(5), survey.Answer(False)] with pytest.raises(InvalidAnswerError): criterion.HomogeneousCriterion().score_answers(question, answer1) criterion.HomogeneousCriterion().score_answers(question, answer2) criterion.HomogeneousCriterion().score_answers(question, answer3)
def test_survey_class_survey_set_criterion() -> None: criteria = criterion.HomogeneousCriterion() question1 = survey.YesNoQuestion(1, 'Hello?') survey1 = survey.Survey([question1]) survey1.set_criterion(criteria, question1) # noinspection PyProtectedMember assert question1.id in survey1._criteria
def criterions(): c1 = criterion.HomogeneousCriterion() c2 = criterion.HeterogeneousCriterion() c3 = criterion.LonelyMemberCriterion() d1 = {"Homogeneous": c1, "Heterogeneous": c2, "LonelyMember": c3} return d1
def test_homo_mc(self): c = criterion.HomogeneousCriterion() q = survey.MultipleChoiceQuestion(0, "Shit", ["A", "B", "C"]) a1 = survey.Answer("A") a2 = survey.Answer("B") a3 = survey.Answer("C") assert c.score_answers(q, [a1]) == 1.0, '''single answer should result in 1''' assert c.score_answers(q, [a1, a2]) == 0 assert fuck_within(c.score_answers(q, [a1, a1, a1]), 1) assert fuck_within(c.score_answers(q, [a1, a2, a1]), 0.33333) assert fuck_within(c.score_answers(q, [a1, a2, a1, a3]), 0.166666)
def test_survey_class_survey_score_students_raise_invalidanswererror() -> None: s1 = course.Student(1, 'Misha') students = [s1] question1 = survey.NumericQuestion(1, 'Do you like food?', 0, 10) answer1 = survey.Answer(True) survey1 = survey.Survey([question1]) criteria = criterion.HomogeneousCriterion() weight1 = 1 s1.set_answer(question1, answer1) survey1.set_weight(weight1, question1) survey1.set_criterion(criteria, question1) assert survey1.score_students(students) == 0.0
def test_score_studs_homog(self, survey_with_YN_question, students, YNQuestions): crit = criterion.HomogeneousCriterion() for q in YNQuestions: for stud in students: ans = survey.Answer(False) stud.set_answer(q, ans) for q in survey_with_YN_question._ques: survey_with_YN_question.set_criterion(crit, q) for q in survey_with_YN_question._ques: survey_with_YN_question.set_weight(0.5, q) assert pytest.approx( survey_with_YN_question.score_students(students)) == 0.5
def test_make_grouping(self, student_odd_ans, course_with_student_odd, GreedyGrouper2, survey_with_NUMq, NumQ): survey_with_NUMq.set_weight(0.5, NumQ) survey_with_NUMq.set_criterion(criterion.HomogeneousCriterion(), NumQ) gr1 = grouper.Group( [student_odd_ans[0], student_odd_ans[1], student_odd_ans[2]]) gr2 = grouper.Group([student_odd_ans[3], student_odd_ans[4]]) grouping = grouper.Grouping() grouping.add_group(gr1) grouping.add_group(gr2) compare_groupings( grouping, GreedyGrouper2.make_grouping(course_with_student_odd, survey_with_NUMq))
def test_homo_numeric(self): c = criterion.HomogeneousCriterion() q = survey.NumericQuestion(0, "OH Shit", 2, 8) a1 = survey.Answer(2) a2 = survey.Answer(5) a3 = survey.Answer(7) assert c.score_answers(q, [a1]) == 1.0, '''single answer should result in 1''' assert fuck_within(c.score_answers(q, [a1, a2]), 0.5) assert fuck_within(c.score_answers(q, [a1, a1, a2]), 0.66666666) assert fuck_within(c.score_answers(q, [a1, a2, a3]), 0.44444444) # This is to test you throw an exception when one answer is not valid a4 = survey.Answer(10) with pytest.raises(criterion.InvalidAnswerError) as info: c.score_answers(q, [a4]) assert info with pytest.raises(criterion.InvalidAnswerError) as info: c.score_answers(q, [a1, a2, a4]) assert info
def test_criterion_homogeneous_score_answers() -> None: question = survey.YesNoQuestion(1, 'Do you like food?') answers = [survey.Answer(True), survey.Answer(True), survey.Answer(False)] criterions = criterion.HomogeneousCriterion() assert criterions.score_answers(question, answers) == 1 / 3
def test_set_criterion(self) -> None: s = survey.Survey(self.questions) assert s.set_criterion(criterion.LonelyMemberCriterion(), self.q1) assert s.set_criterion(criterion.HeterogeneousCriterion(), self.q5) assert not s.set_criterion(criterion.HomogeneousCriterion(), self.q2)
def h**o(): return criterion.HomogeneousCriterion()
def test_set_criterion(self, survey_, questions) -> None: survey_._criteria = {} criterion_ = criterion.HomogeneousCriterion() survey_.set_criterion(criterion_, questions[0]) assert survey_._get_criterion(questions[0]) == criterion_
def test_score_ans_check_box(self, Checkboxq2, Check_ans_lst): assert pytest.approx(criterion.HomogeneousCriterion().score_answers( Checkboxq2, Check_ans_lst)) == 7 / 36
def test_score_ans_YN_raise_error(self, YNq, lst_of_YN_ans): with pytest.raises(criterion.InvalidAnswerError): invalid_ans = survey.Answer(1) criterion.HomogeneousCriterion().score_answers( YNq, lst_of_YN_ans + [invalid_ans])
def test_score_ans_YN(self, YNq, lst_of_YN_ans): assert pytest.approx(criterion.HomogeneousCriterion().score_answers( YNq, lst_of_YN_ans)) == 0.5
def test__get_criterion(self, survey_, questions, criteria) -> None: criteria.append(criterion.HomogeneousCriterion()) for i, question in enumerate(questions): assert isinstance(survey_._get_criterion(question), type(criteria[i]))
def test_homogeneous(self) -> None: hom = criterion.HomogeneousCriterion() assert hom.score_answers(self.question1, self.answers1) \ == 0.16666666666666666 assert hom.score_answers(self.question2, self.answers2) \ == 0.3333333333333333
def criteria(answers) -> List[criterion.Criterion]: return [ criterion.HomogeneousCriterion(), criterion.HeterogeneousCriterion(), criterion.LonelyMemberCriterion() ]
def test_score_ans(self, questions, answers): q1 = survey.YesNoQuestion(1, 'hey') h = criterion.HomogeneousCriterion() assert h.score_answers(q1, []) == 0.0