예제 #1
0
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
예제 #2
0
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
예제 #3
0
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)
예제 #4
0
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
예제 #5
0
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
예제 #6
0
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"
예제 #7
0
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
예제 #8
0
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
예제 #9
0
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
예제 #10
0
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
예제 #11
0
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
예제 #12
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
예제 #13
0
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
예제 #14
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
예제 #15
0
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
예제 #16
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
예제 #17
0
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
예제 #18
0
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
예제 #19
0
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
예제 #20
0
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
예제 #21
0
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"
예제 #22
0
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
예제 #23
0
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
예제 #24
0
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