Example #1
0
    def test_complicated(self):
        students = [course.Student(i, "Shit" + str(i)) for i in range(3)]
        questions1 = [survey.NumericQuestion(i, "FUCKNQ" + str(i), 2, 8) for i in range(5)]
        s = survey.Survey(questions1)
        assert len(s) == 5
        assert questions1[0] in s
        assert survey.YesNoQuestion(99, "Yue?") not in s
        assert str(s).count("FUCKNQ") >= 5
        assert len(s.get_questions()) == 5
        assert fuck_compare_lists([x.id for x in s.get_questions()], [0, 1, 2, 3, 4])

        answers = [0, 1, 0, 1, 2] * 3
        i = 0
        for q in questions1:
            for stu in students:
                stu.set_answer(q, survey.Answer(2 + answers[i]))
                i += 1
        assert fuck_within(s.score_students(students), 0.8222222)

        answers = [1, 0, 0, 3, 4] * 3
        i = 0
        for q in questions1:
            for stu in students:
                stu.set_answer(q, survey.Answer(2 + answers[i]))
                i += 1
        assert fuck_within(s.score_students(students), 0.6666666666666667)

        s.set_weight(2, questions1[0])
        assert fuck_within(s.score_students(students), 0.8444444444444444)

        s.set_criterion(criterion.HeterogeneousCriterion(), questions1[1])
        assert fuck_within(s.score_students(students), 0.7777777777777779)

        # this should result in InvalidAnswerError
        answers = [9, 9, 9, 9, 9] * 3
        i = 0
        for q in questions1:
            for stu in students:
                stu.set_answer(q, survey.Answer(2 + answers[i]))
                i += 1
        assert fuck_within(s.score_students(students), 0)

        assert s.score_grouping(grouper.Grouping()) == 0, '''empty grouping result always 1'''
        g = grouper.Grouping()
        g.add_group(grouper.Group([students[0]]))
        g.add_group(grouper.Group([students[1]]))
        g.add_group(grouper.Group([students[2]]))
        assert s.score_students([students[0]]) == 0
        assert s.score_students([students[1]]) == 0
        assert s.score_students([students[2]]) == 0
        assert s.score_grouping(g) == 0

        answers = [1, 0, 0, 3, 4] * 3
        i = 0
        for q in questions1:
            for stu in students:
                stu.set_answer(q, survey.Answer(2 + answers[i]))
                i += 1
        assert s.score_grouping(g) == 1.0
Example #2
0
def window_grouping(students_with_answers) -> grouper.Grouping:
    grouping = grouper.Grouping()
    grouping.add_group(
        grouper.Group([students_with_answers[0], students_with_answers[1]]))
    grouping.add_group(
        grouper.Group([students_with_answers[2], students_with_answers[3]]))
    return grouping
Example #3
0
 def test_get_groups(self) -> None:
     gping = grouper.Grouping()
     assert gping.get_groups() == []
     gping.add_group(grouper.Group(TestGroup.members))
     gping.add_group(grouper.Group([TestGroup.s5]))
     assert gping.get_groups()[1].get_members()[0] == TestGroup.s5
     assert gping.get_groups()[0].get_members()[1] == TestGroup.s2
Example #4
0
def test_grouper_class_grouping_add_group_() -> None:
    grouping1 = grouper.Grouping()
    ted = course.Student(1, "Ted")
    fred = course.Student(2, "Fred")
    jack = course.Student(3, "Jack")
    assert not grouping1.add_group(grouper.Group([]))
    assert grouping1.add_group(grouper.Group([ted, fred]))
    assert not grouping1.add_group(grouper.Group([ted, jack]))
Example #5
0
def AlphaGrouping_odd_len(student_odd_len):
    gr1 = grouper.Group([student_odd_len[1], student_odd_len[2]])
    gr2 = grouper.Group([student_odd_len[4], student_odd_len[3]])
    gr3 = grouper.Group([student_odd_len[0]])
    to_return = grouper.Grouping()
    lst = [gr1, gr2, gr3]
    for group in lst:
        to_return.add_group(group)
    return to_return
Example #6
0
 def test_str(self, students):
     new_grouping = grouper.Grouping()
     group_list = grouper.slice_list(students, 2)
     for group in group_list:
         new_grouping.add_group(grouper.Group(group))
     grouping_string = str(new_grouping)
     for group in new_grouping.get_groups():
         for student in group.get_members():
             assert student.name in grouping_string
Example #7
0
 def test_make_grouping(self, RandomGrouper1, survey_, students,
                        course_with_students_with_answers):
     gr1 = grouper.Group([students[0], students[1]])
     gr2 = grouper.Group([students[2], students[3]])
     grouping = grouper.Grouping()
     grouping.add_group(gr1)
     grouping.add_group(gr2)
     assert len(grouping) == len(
         RandomGrouper1.make_grouping(course_with_students_with_answers,
                                      survey_))
Example #8
0
 def test_add_group(self, students):
     new_grouping = grouper.Grouping()
     group_list = grouper.windows(students, 2)
     for group in group_list:
         new_grouping.add_group(grouper.Group(group))
     assert len(new_grouping) == 3
     assert len(new_grouping._groups[len(new_grouping) - 1]) == 2
     for group in group_list:
         new_grouping.add_group(grouper.Group(group))
     assert len(new_grouping) == 3
Example #9
0
 def test_make_grouping(self, course_with_students_with_answers, survey_,
                        WindowGrouper1, students):
     gr1 = grouper.Group([students[0], students[1]])
     gr2 = grouper.Group([students[2], students[3]])
     grouping = grouper.Grouping()
     assert grouping.add_group(gr1)
     assert grouping.add_group(gr2)
     funct = WindowGrouper1.make_grouping(course_with_students_with_answers,
                                          survey_)
     compare_groupings(grouping, funct)
Example #10
0
 def test_make_grouping1(self, RandomGrouper1, survey_with_NUMq,
                         student_odd_ans, course_with_student_odd):
     gr1 = grouper.Group([student_odd_ans[0], student_odd_ans[1]])
     gr2 = grouper.Group([student_odd_ans[2], student_odd_ans[3]])
     gr3 = grouper.Group([student_odd_ans[4]])
     grouping = grouper.Grouping()
     grouping.add_group(gr1)
     grouping.add_group(gr2)
     grouping.add_group(gr3)
     assert len(grouping) == len(
         RandomGrouper1.make_grouping(course_with_student_odd,
                                      survey_with_NUMq))
Example #11
0
 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))
Example #12
0
 def test_score_grouping2(self, survey_with_NUMq, student_odd_ans, NumQ):
     gr1 = grouper.Group([student_odd_ans[1], student_odd_ans[2]])
     gr2 = grouper.Group([student_odd_ans[0], student_odd_ans[3]])
     gr3 = grouper.Group([student_odd_ans[4]])
     grouping = grouper.Grouping()
     assert grouping.add_group(gr1)
     assert grouping.add_group(gr2)
     assert grouping.add_group(gr3)
     assert survey_with_NUMq.set_criterion(
         criterion.HeterogeneousCriterion(), NumQ)
     assert survey_with_NUMq.set_weight(0.5, NumQ)
     score_gr1 = survey_with_NUMq.score_students(gr1.get_members())
     score_gr2 = survey_with_NUMq.score_students(gr2.get_members())
     score_gr3 = survey_with_NUMq.score_students(gr3.get_members())
     avg = sum([score_gr1, score_gr2, score_gr3]) / 3
     assert survey_with_NUMq.score_grouping(grouping) == avg
Example #13
0
    def test_super_complicated(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
        g = grouper.Grouping()
        g.add_group(grouper.Group([students[0], students[1], students[2]]))
        g.add_group(grouper.Group([students[3], students[4], students[5]]))
        g.add_group(grouper.Group([students[6], students[7]]))
        assert fuck_within(s.score_students(students), 0.5175303571428571)
        assert fuck_within(s.score_grouping(g), 0.43715925925925925)

        s.set_weight(2, q2)
        s.set_weight(5, q1)
        s.set_weight(6, q3)
        s.set_weight(3, q4)
        assert fuck_within(s.score_students(students), 1.7600607142857143)
        assert fuck_within(s.score_grouping(g), 1.2696888888888889)

        s.set_criterion(criterion.HeterogeneousCriterion(), q1)
        s.set_criterion(criterion.HeterogeneousCriterion(), q2)
        s.set_criterion(criterion.HeterogeneousCriterion(), q3)
        s.set_criterion(criterion.HeterogeneousCriterion(), q4)
        assert fuck_within(s.score_students(students), 2.2399392857142857)
        assert fuck_within(s.score_grouping(g), 2.7303111111111114)
Example #14
0
def test_survey_class_survey_score_grouping() -> None:
    q1 = survey.NumericQuestion(1, "How many?", 0, 5)
    q2 = survey.YesNoQuestion(2, 'Are you okay?')
    survey1 = survey.Survey([q1, q2])
    ted = course.Student(1, "Ted")
    fred = course.Student(2, "Fred")
    jack = course.Student(3, "Jack")
    bob = course.Student(4, "Bob")
    ted.set_answer(q1, survey.Answer(2))
    fred.set_answer(q1, survey.Answer(3))
    jack.set_answer(q1, survey.Answer(4))
    bob.set_answer(q1, survey.Answer(1))
    ted.set_answer(q2, survey.Answer(True))
    fred.set_answer(q2, survey.Answer(True))
    jack.set_answer(q2, survey.Answer(False))
    bob.set_answer(q2, survey.Answer(False))
    grouping1 = grouper.Grouping()
    grouping1.add_group(grouper.Group([ted, fred]))
    grouping1.add_group(grouper.Group([jack, bob]))
    assert survey1.score_grouping(grouping1) == 0.8
Example #15
0
    def test_add_group(self):
        students = [course.Student(i, "Shit" + str(i)) for i in range(10)]
        g = grouper.Grouping()
        assert g.add_group(grouper.Group([students[0], students[1]]))
        assert len(g) == 1
        assert len(g.get_groups()) == 1

        # you cannot add empty group
        assert not g.add_group(grouper.Group([]))
        assert len(g) == 1
        assert len(g.get_groups()) == 1

        # you cannot add group contains students already exist in group
        assert not g.add_group(grouper.Group([students[1], students[2]]))
        assert len(g) == 1
        assert len(g.get_groups()) == 1

        # you can add another group
        assert g.add_group(grouper.Group([students[2], students[3]]))
        assert len(g) == 2
        assert len(g.get_groups()) == 2

        members = [x.get_members() for x in g.get_groups()]
        flat_list = [item for sublist in members for item in sublist]
        ids = set([x.id for x in flat_list])
        assert ids == {0, 1, 2, 3}

        # you can add another group
        assert g.add_group(grouper.Group([students[7], students[8]]))
        assert len(g) == 3
        assert len(g.get_groups()) == 3

        members = [x.get_members() for x in g.get_groups()]
        flat_list = [item for sublist in members for item in sublist]
        ids = set([x.id for x in flat_list])
        assert ids == {0, 1, 2, 3, 7, 8}
Example #16
0
 def test_add_group(self, group) -> None:
     grouping = grouper.Grouping()
     grouping.add_group(group)
     assert group in grouping._groups
Example #17
0
def empty_grouping():
    return grouper.Grouping()
Example #18
0
 def test_score_grouping(self, survey_with_NUMq):
     grouping = grouper.Grouping()
     assert survey_with_NUMq.score_grouping(grouping) == 0.0
Example #19
0
 def test_add_group(self) -> None:
     gping = grouper.Grouping()
     assert gping.add_group(grouper.Group(TestGroup.members))
     assert not gping.add_group(grouper.Group(TestGroup.members[:2]))
     assert gping.add_group(grouper.Group([TestGroup.s5]))
     assert len(gping) == 2
Example #20
0
 def test_grouping_properties(self) -> None:
     gping = grouper.Grouping()
     assert len(gping) == 0
Example #21
0
 def test_get_groups_shallow(self):
     g = grouper.Grouping()
     L = g.get_groups()
     assert len(L) == 0
     L.append(4)
     assert g.get_groups() == []
Example #22
0
 def test_len(self, students):
     new_grouping = grouper.Grouping()
     group_list = grouper.slice_list(students, 2)
     for group in group_list:
         new_grouping.add_group(grouper.Group(group))
     assert len(new_grouping) == 4
Example #23
0
 def test_get_groups(self, students) -> None:
     group = grouper.Group(students[:2])
     grouping = grouper.Grouping()
     grouping.add_group(group)
     assert get_member_ids(grouping) == {frozenset([1, 2])}
Example #24
0
 def test_simple(self):
     g = grouper.Grouping()
     assert len(g) == 0
     assert str(g) is not None
Example #25
0
 def test_init(self):
     new_grouping = grouper.Grouping()
     assert len(new_grouping._groups) == 0