def criterions(): c1 = criterion.HomogeneousCriterion() c2 = criterion.HeterogeneousCriterion() c3 = criterion.LonelyMemberCriterion() d1 = {"Homogeneous": c1, "Heterogeneous": c2, "LonelyMember": c3} return d1
def test_lonely_numeric(self): c = criterion.LonelyMemberCriterion() q = survey.NumericQuestion(0, "OH Shit", 2, 8) a1 = survey.Answer(2) a2 = survey.Answer(5) a3 = survey.Answer(7) assert q.get_similarity(a1, a1) != 0.0 assert c.score_answers(q, [a1]) == 0.0, '''single answer should result in 0''' assert c.score_answers(q, [a1, a2]) == 0.0 assert fuck_within(c.score_answers(q, [a1, a1, a1]), 1) assert fuck_within(c.score_answers(q, [a1, a1, a2, a2]), 1) assert fuck_within(c.score_answers(q, [a1, a2, a1]), 0) assert fuck_within(c.score_answers(q, [a1, a2, a1, a3]), 0) assert fuck_within(c.score_answers(q, [a1, a1, a1, a2, a2]), 1) assert fuck_within(c.score_answers(q, [a1, a2, a1, a1, a2, a3]), 0) assert fuck_within(c.score_answers(q, [a1, a2, a1, a1, a2, a3, a3]), 1) # This is to test you throw an exception when one answer is not valid a4 = survey.Answer(10) # first answer is invalid with pytest.raises(criterion.InvalidAnswerError) as info: c.score_answers(q, [a4, a1, a2]) assert info # last answer is invalid with pytest.raises(criterion.InvalidAnswerError) as info: c.score_answers(q, [a4]) with pytest.raises(criterion.InvalidAnswerError) as info: c.score_answers(q, [a1, a2, a4]) assert info, 'if you fail this test, maybe your code return too early'
def test_set_criterion(self, questions): s = survey.Survey(questions) for q in questions: s.set_criterion(criterion.LonelyMemberCriterion(), q) for f in questions: assert isinstance(s._get_criterion(f), criterion.LonelyMemberCriterion)
def test_score_studs_lonely(self, survey_with_YN_question, students, YNQuestions): crit = criterion.LonelyMemberCriterion() 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_lonely_mc(self): c = criterion.LonelyMemberCriterion() q = survey.MultipleChoiceQuestion(0, "Shit", ["A", "B", "C"]) a1 = survey.Answer("A") a2 = survey.Answer("B") a3 = survey.Answer("C") assert q.get_similarity(a1, a1) != 0.0 assert c.score_answers(q, [a1]) == 0.0, '''single answer should result in 0''' assert c.score_answers(q, [a1, a2]) == 0.0 assert fuck_within(c.score_answers(q, [a1, a1, a1]), 1) assert fuck_within(c.score_answers(q, [a1, a1, a2, a2]), 1) assert fuck_within(c.score_answers(q, [a1, a2, a1]), 0) assert fuck_within(c.score_answers(q, [a1, a2, a1, a3]), 0) assert fuck_within(c.score_answers(q, [a1, a1, a1, a2, a2]), 1) assert fuck_within(c.score_answers(q, [a1, a2, a1, a1, a2, a3]), 0) assert fuck_within(c.score_answers(q, [a1, a2, a1, a1, a2, a3, a3]), 1)
def criteria(answers) -> List[criterion.Criterion]: return [ criterion.HomogeneousCriterion(), criterion.HeterogeneousCriterion(), criterion.LonelyMemberCriterion() ]
def test_criterion_lonelymember_raise_invalidanswererror(): question = survey.NumericQuestion(1, 'Do you like food?', 0, 10) answer = [survey.Answer(11)] with pytest.raises(InvalidAnswerError): criterion.LonelyMemberCriterion().score_answers(question, answer)
def test_criterion_lonelymember_criterion_score_answers() -> None: question1 = survey.YesNoQuestion(1, 'Do you like food?') answer1 = [survey.Answer(True), survey.Answer(True), survey.Answer(False)] assert criterion.LonelyMemberCriterion().score_answers(question1, answer1) == 0.0
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 test_lonely(self) -> None: sad = criterion.LonelyMemberCriterion() assert sad.score_answers(self.question2, self.answers2) == 0.0 assert sad.score_answers(self.question2, self.answers3) == 1.0
def test_combination(self): students = [course.Student(i, "Shit" + str(i)) for i in range(8)] q1 = survey.YesNoQuestion(0, "To be, or not to be") q2 = survey.NumericQuestion(1, "How many times you f**k up", 0, 10000) q3 = survey.MultipleChoiceQuestion(2, "What's your favorite thing to do", ['A', 'B', 'C', 'D']) q4 = survey.CheckboxQuestion(3, "How many things you have done", ['A', 'B', 'C', 'D', 'E']) questions = [q1, q2, q3, q4] s = survey.Survey(questions) answers = [True, 1111, 'A', ['A', 'C'], False, 44, 'C', ['A', 'B', 'C'], True, 3, 'B', ['A', 'C', 'D'], True, 56, 'C', ['D', 'C'], False, 12, 'C', ['E'], True, 0, 'A', ['A'], False, 888, 'C', ['A', 'B', 'C', 'D'], True, 12, 'B', ['A', 'B', 'C', 'D', 'E']] i = 0 for stu in students: for q in questions: stu.set_answer(q, survey.Answer(answers[i])) i += 1 c = course.Course("Asshole101") c.enroll_students(students) grouping = grouper.AlphaGrouper(3).make_grouping(c, s) assert len(grouping) == 3 assert grouping_to_list_of_list(grouping) == [[0, 1, 2], [3, 4, 5], [6, 7]] grouping = grouper.GreedyGrouper(3).make_grouping(c, s) assert len(grouping) == 3 assert grouping_to_list_of_list(grouping) == [[0, 2, 5], [1, 4, 6], [3, 7]] grouping = grouper.WindowGrouper(3).make_grouping(c, s) assert len(grouping) == 3 assert grouping_to_list_of_list(grouping) == [[0, 4, 5], [1, 2, 3], [6, 7]] s.set_criterion(criterion.HeterogeneousCriterion(), q2) s.set_weight(2, q1) s.set_weight(2, q1) s.set_weight(3, q2) s.set_weight(55, q4) grouping = grouper.AlphaGrouper(3).make_grouping(c, s) assert len(grouping) == 3 assert grouping_to_list_of_list(grouping) == [[0, 1, 2], [3, 4, 5], [6, 7]] grouping = grouper.GreedyGrouper(3).make_grouping(c, s) assert len(grouping) == 3 assert grouping_to_list_of_list(grouping) == [[0, 2, 6], [1, 3, 7], [4, 5]] grouping = grouper.WindowGrouper(3).make_grouping(c, s) assert len(grouping) == 3 assert grouping_to_list_of_list(grouping) == [[0, 1, 2], [3, 4], [5, 6, 7]] s.set_weight(2, q1) s.set_weight(1, q2) s.set_weight(5, q3) s.set_weight(2, q4) s.set_criterion(criterion.LonelyMemberCriterion(), q1) s.set_criterion(criterion.LonelyMemberCriterion(), q2) s.set_criterion(criterion.LonelyMemberCriterion(), q3) s.set_criterion(criterion.LonelyMemberCriterion(), q4) grouping = grouper.AlphaGrouper(3).make_grouping(c, s) assert len(grouping) == 3 assert grouping_to_list_of_list(grouping) == [[0, 1, 2], [3, 4, 5], [6, 7]] grouping = grouper.GreedyGrouper(3).make_grouping(c, s) assert len(grouping) == 3 assert grouping_to_list_of_list(grouping) == [[0, 2, 5], [1, 4, 6], [3, 7]] grouping = grouper.WindowGrouper(3).make_grouping(c, s) assert len(grouping) == 3 assert grouping_to_list_of_list(grouping) == [[0, 1, 2], [3, 4, 5], [6, 7]] # make one of the student's answer invalid students[0].set_answer(q1, survey.Answer('F**K')) grouping = grouper.AlphaGrouper(3).make_grouping(c, s) assert len(grouping) == 3 assert grouping_to_list_of_list(grouping) == [[0, 1, 2], [3, 4, 5], [6, 7]] grouping = grouper.GreedyGrouper(3).make_grouping(c, s) assert len(grouping) == 3 assert grouping_to_list_of_list(grouping) == [[0, 1, 2], [3, 4, 6], [5, 7]] grouping = grouper.WindowGrouper(3).make_grouping(c, s) assert len(grouping) == 3 assert grouping_to_list_of_list(grouping) == [[0, 1, 2], [3, 4, 5], [6, 7]]
def lonely(): return criterion.LonelyMemberCriterion()
def test_score_ans(self, questions, answers): q1 = survey.YesNoQuestion(1, 'hey') h = criterion.LonelyMemberCriterion() assert h.score_answers(q1, []) == 1.0