def test_survey_len() -> None: q1 = CheckboxQuestion(1, "choose", [1, 2, 3, 4]) q2 = CheckboxQuestion(2, "choose", [1, 2, 3, 4]) q3 = CheckboxQuestion(3, "choose", [1, 2, 3, 4]) q_list = [q1, q2, q3] s = Survey(q_list) assert len(s) == 3
def test_survey_get_weight() -> None: q1 = CheckboxQuestion(1, "choose", [1, 2, 3, 4]) q2 = CheckboxQuestion(2, "choose", [1, 2, 3, 4]) q3 = CheckboxQuestion(3, "choose", [1, 2, 3, 4]) q_list = [q1, q2, q3] s = Survey(q_list) assert s._get_weight(q1) == 1
def test_survey_get_criterion() -> None: q1 = CheckboxQuestion(1, "choose", [1, 2, 3, 4]) q2 = CheckboxQuestion(2, "choose", [1, 2, 3, 4]) q3 = CheckboxQuestion(3, "choose", [1, 2, 3, 4]) q_list = [q1, q2, q3] s = Survey(q_list) assert isinstance(s._get_criterion(q1), HomogeneousCriterion)
def test_score_students() -> None: q = CheckboxQuestion(1, "choose", [1, 2, 3, 4]) s1 = Student(1, "John") s2 = Student(2, "Carl") s3 = Student(3, "Anne") a1 = Answer([1, 2, 3, 4]) a2 = Answer([1]) a3 = Answer([1]) s1.set_answer(q, a1) s2.set_answer(q, a2) s3.set_answer(q, a3) c = LonelyMemberCriterion() sur = Survey([q]) sur.set_weight(1, q) sur.set_criterion(c, q) assert sur.score_students([s1, s2, s3]) == 0.0 q_2 = CheckboxQuestion(2, "choose", [1, 2, 3, 4]) a4 = Answer([1, 2]) a5 = Answer([1, 2]) a6 = Answer([1, 2]) s1.set_answer(q_2, a4) s2.set_answer(q_2, a5) s3.set_answer(q_2, a6) sur1 = Survey([q_2]) sur2 = Survey([q, q_2]) sur2.set_weight(1, q_2) sur2.set_criterion(c, q_2) assert sur1.score_students([s1, s2, s3]) == 1 assert sur2.score_students([s1, s2, s3]) == 0.5
def return_sur() -> Survey: q = CheckboxQuestion(1, "choose", [1, 2, 3, 4]) s1 = Student(1, "John") s2 = Student(2, "Carl") s3 = Student(3, "Anne") a1 = Answer([1, 2, 3, 4]) a2 = Answer([1]) a3 = Answer([1]) s1.set_answer(q, a1) s2.set_answer(q, a2) s3.set_answer(q, a3) c = LonelyMemberCriterion() sur = Survey([q]) sur.set_weight(1, q) sur.set_criterion(c, q) q_2 = CheckboxQuestion(2, "choose", [1, 2, 3, 4]) a4 = Answer([1, 2]) a5 = Answer([1, 2]) a6 = Answer([1, 2]) s1.set_answer(q_2, a4) s2.set_answer(q_2, a5) s3.set_answer(q_2, a6) sur2 = Survey([q, q_2]) sur2.set_weight(1, q_2) sur2.set_criterion(c, q_2) return sur2
def test_make_window_grouping() -> None: grouper_ = grouper.GreedyGrouper(2) q = CheckboxQuestion(1, "choose", [1, 2, 3, 4]) s1 = Student(1, "John") s2 = Student(2, "Carl") s3 = Student(3, "Anne") a1 = Answer([1, 2, 3, 4]) a2 = Answer([1]) a3 = Answer([1]) s1.set_answer(q, a1) s2.set_answer(q, a2) s3.set_answer(q, a3) c = LonelyMemberCriterion() sur = Survey([q]) sur.set_weight(1, q) sur.set_criterion(c, q) q_2 = CheckboxQuestion(2, "choose", [1, 2, 3, 4]) a4 = Answer([1, 2]) a5 = Answer([1, 2]) a6 = Answer([1, 2]) s1.set_answer(q_2, a4) s2.set_answer(q_2, a5) s3.set_answer(q_2, a6) sur2 = Survey([q, q_2]) sur2.set_weight(1, q_2) sur2.set_criterion(c, q_2) cr = Course('dd') cr.enroll_students([s1, s2, s3]) assert grouper_.make_grouping( cr, sur).get_groups()[0].get_members()[0].name == "John" assert grouper_.make_grouping( cr, sur).get_groups()[0].get_members()[1].name == "Carl" assert grouper_.make_grouping( cr, sur).get_groups()[1].get_members()[0].name == "Anne"
def test_checkbox_question_validate_answer() -> None: q = CheckboxQuestion(1, "choose", ['a', 'b', 'c']) a1 = Answer([]) a2 = Answer(['a', 'c']) a3 = Answer(['a', 'a']) a4 = Answer(True) assert q.validate_answer(a1) is False assert q.validate_answer(a2) is True assert q.validate_answer(a3) is False assert q.validate_answer(a4) is False
def test_survey_contains() -> None: q1 = CheckboxQuestion(1, "choose", [1, 2, 3, 4]) q2 = CheckboxQuestion(2, "choose", [1, 2, 3, 4]) q3 = CheckboxQuestion(3, "choose", [1, 2, 3, 4]) q4 = 5 q_list = [q1, q2] s = Survey(q_list) assert q1 in s assert q3 not in s assert q4 not in s
def test_survey_survey_set_criterion_invalid() -> None: """A test for set_criterion() in class Survey.""" q1 = CheckboxQuestion(1, 'ABC', ['a', '1', ',']) q2 = YesNoQuestion(2, 'BBC') s = Survey([q1]) c = HomogeneousCriterion() assert s.set_criterion(c, q2) is False
def test_survey_survey_get_questions() -> None: """A test for get_questions() in class Survey.""" q1 = CheckboxQuestion(1, 'ABC', ['a', '1', ',']) q2 = YesNoQuestion(2, 'BBC') s = Survey([q1, q2]) lst = s.get_questions() assert q1 in lst and q2 in lst
def test_heterogeneous_criterion() -> None: q = CheckboxQuestion(1, "choose", [1, 2, 3, 4]) a1 = Answer([1, 2, 3, 4]) a2 = Answer([1]) a3 = Answer(["hello"]) c = HeterogeneousCriterion() assert c.score_answers(q, [a1, a2]) == 0.75 # assert c.score_answers(q, [a3]) is InvalidAnswerError assert c.score_answers(q, [a1]) == 0.0
def test_answer_is_valid() -> None: a_multiple = Answer("a") a_checkbox = Answer(["a", "b"]) a_yesno = Answer(True) a_yesno_2 = Answer(1) a_numeric = Answer(15) assert a_multiple.is_valid(MultipleChoiceQuestion(1, "choose", ["a", "b"]))\ is True assert a_multiple.is_valid(MultipleChoiceQuestion(1, "choose", ["c", "b"])) \ is False assert a_checkbox.is_valid(CheckboxQuestion(2, "choose", ["a", "b"])) is \ True assert a_checkbox.is_valid(CheckboxQuestion(2, "choose", ["a", "a"])) is \ False assert a_yesno.is_valid(YesNoQuestion(1, "choose")) is True assert a_yesno_2.is_valid(YesNoQuestion(1, "choose")) is False assert a_numeric.is_valid(NumericQuestion(1, "5+10", 1, 20)) is True assert a_numeric.is_valid(NumericQuestion(1, "5+10", 18, 20)) is False
def test_lonely_member_criterion() -> None: q = CheckboxQuestion(1, "choose", [1, 2, 3, 4]) q2 = YesNoQuestion(2, "choose") a1 = Answer([1, 2, 3, 4]) a2 = Answer([1]) a3 = Answer([1]) a4 = Answer(True) a5 = Answer(False) a6 = Answer(True) a7 = Answer(False) c = LonelyMemberCriterion() assert c.score_answers(q, [a1, a2]) == 0.0 assert c.score_answers(q, [a2, a3]) == 1.0 assert c.score_answers(q2, [a4, a5, a6, a7]) == 1.0
def test_course_all_answered() -> None: student_1 = Student(2, "Jane") student_2 = Student(1, "John") course = Course("math") course_2 = Course("Eng") lst = [student_1, student_2] lst_2 = [student_1] course.enroll_students(lst) course_2.enroll_students(lst_2) q = CheckboxQuestion(1, "choose", [1, 2, 3]) a1 = Answer([1]) a2 = Answer([5]) student_1.set_answer(q, a1) student_2.set_answer(q, a2) s = Survey([q]) assert course.all_answered(s) is False assert course_2.all_answered(s) is True
def test_questions() -> None: mcq_1 = MultipleChoiceQuestion(1, "Cities in Canada", ["Toronto", "Ottawa", "Vancouver"]) assert mcq_1.id == 1 assert mcq_1.text == "Cities in Canada" assert "Cities in Canada" in str(mcq_1) assert "Toronto" in str(mcq_1) assert "Ottawa" in str(mcq_1) assert "Montreal" not in str(mcq_1) mcq_1_ans = Answer("Toronto") mcq_1_c_ans = Answer("Toronto") mcq_2_ans = Answer("Montreal") mcq_3_ans = Answer("") assert mcq_1_ans.is_valid(mcq_1) assert not mcq_2_ans.is_valid(mcq_1) assert mcq_1.validate_answer(mcq_1_ans) assert not mcq_1.validate_answer(mcq_2_ans) assert not mcq_1.validate_answer(mcq_3_ans) assert mcq_1.get_similarity(mcq_1_ans, mcq_1_c_ans) == 1.0 assert mcq_1.get_similarity(mcq_1_ans, mcq_2_ans) == 0.0 nq_1 = NumericQuestion(1, "A n.o between 1 and 5", 1, 5) nq_1_ans = Answer(1) nq_2_ans = Answer(2) nq_3_ans = Answer(3) nq_4_ans = Answer(5) nq_5_ans = Answer(10) nq_6_ans = Answer(1) assert nq_1.validate_answer(nq_1_ans) assert nq_1.validate_answer(nq_2_ans) assert nq_1.validate_answer(nq_3_ans) assert nq_1.validate_answer(nq_4_ans) assert not nq_1.validate_answer(nq_5_ans) assert nq_1_ans.is_valid(nq_1) assert nq_2_ans.is_valid(nq_1) assert nq_3_ans.is_valid(nq_1) assert nq_4_ans.is_valid(nq_1) assert not nq_5_ans.is_valid(nq_1) assert nq_1.get_similarity(nq_1_ans, nq_6_ans) == 1.0 assert nq_1.get_similarity(nq_1_ans, nq_4_ans) == 0.0 assert nq_1.get_similarity(nq_2_ans, nq_3_ans) == 0.75 ynq = YesNoQuestion(1, "Is earth round") ynq_1 = Answer(True) ynq_2 = Answer(False) ynq_3 = Answer(False) assert ynq_1.is_valid(ynq) assert ynq_2.is_valid(ynq) assert not ynq.get_similarity(ynq_1, ynq_2) assert ynq.get_similarity(ynq_2, ynq_3) cbq = CheckboxQuestion(1, "Cities in Canada", ["Toronto", "Ottawa", "Vancouver"]) cbq_1 = Answer(["Toronto", "Ottawa"]) cbq_2 = Answer(["Seoul", "Busan"]) cbq_3 = Answer(["Toronto", "Ottawa"]) cbq_4 = Answer(["Toronto", "Vancouver"]) assert cbq.validate_answer(cbq_1) assert not cbq.validate_answer(cbq_2) assert cbq_1.is_valid(cbq) assert not cbq_2.is_valid(cbq) assert cbq.get_similarity(cbq_1, cbq_3) == 1 assert cbq.get_similarity(cbq_1, cbq_4) == 1 / 3 assert cbq.get_similarity(cbq_1, cbq_2) == 0.0
def test_survey_checkbox_similarity() -> None: """A test for get_similarity() in class CheckboxQuestion.""" q = CheckboxQuestion(1, 'ABC', ['a', '1', ',']) a1 = Answer(['a', 'b']) a2 = Answer(['b', 'c', 'd']) assert q.get_similarity(a1, a2) == 0.25
def test_survey_checkbox_invalid_answer_duplicate() -> None: """A test for validate_answer() in class CheckboxQuestion.""" q = CheckboxQuestion(1, 'ABC', ['a', '1', ',']) a = Answer(['a', 'a']) assert q.validate_answer(a) is False
def test_survey_survey_contain() -> None: """A test for __contain__() in class Survey.""" q1 = CheckboxQuestion(1, 'ABC', ['a', '1', ',']) q2 = YesNoQuestion(2, 'BBC') s = Survey([q1, q2]) assert q1 in s
def test_survey_answer_is_valid_no() -> None: """A test for is_valid() in class Answer.""" q = CheckboxQuestion(1, 'ABC', ['a', '1', ',']) a = Answer(['b']) assert a.is_valid(q) is False
def test_survey_survey_to_string() -> None: """A test for __str__() in class Survey.""" q1 = CheckboxQuestion(1, 'ABC', ['a', '1', ',']) q2 = YesNoQuestion(2, 'BBC') s = Survey([q1, q2]) assert type(str(s)) is str
def test_survey_str() -> None: q1 = CheckboxQuestion(1, "choose", [1, 2, 3, 4]) q_list = [q1] s = Survey(q_list) assert str(s) == "question id: 1\ntext:\nchoose\n1\n2\n3\n4\n"
def test_survey_survey_set_weight_invalid() -> None: """A test for set_weight() in class Survey.""" q1 = CheckboxQuestion(1, 'ABC', ['a', '1', ',']) q2 = YesNoQuestion(2, 'BBC') s = Survey([q1]) assert s.set_weight(2.0, q2) is False
def test_checkbox_question_get_similarity() -> None: q = CheckboxQuestion(1, "choose", ['a', 'b', 'c']) a2 = Answer(['a', 'b', 'd']) a3 = Answer(['a', 'b', 'c']) assert q.get_similarity(a2, a3) == 0.5
def test_survey_checkbox_to_string() -> None: """A test for __str__() in class CheckboxQuestion.""" q = CheckboxQuestion(1, 'ABC', ['a', '1', ',']) assert type(str(q)) is str