Example #1
0
def students() -> List[course.Student]:
    return [
        course.Student(1, 'Zoro'),
        course.Student(2, 'Aaron'),
        course.Student(3, 'Gertrude'),
        course.Student(4, 'Yvette')
    ]
Example #2
0
def test_course_class_course_get_students() -> None:
    s1 = course.Student(1, 'Misha')
    s2 = course.Student(2, 'Jenni')
    courses = course.Course('CSC148')
    courses.enroll_students([s1, s2])
    assert courses.get_students() == (s1, s2)
    assert not courses.get_students() == (s2, s1)
Example #3
0
    def test_simple(self):
        g = grouper.Group([])
        students = [course.Student(i, "Shit" + str(i)) for i in range(10)]

        assert g.get_members() == []
        assert len(g) == 0
        assert students[0] not in g

        g = grouper.Group(students)
        assert len(g) == 10
        for i in range(10):
            assert students[i] in g
            assert students[i].name in str(g)
        assert isinstance(g.get_members(), list)
        assert len(g.get_members()) == 10

        # mutate shallow copy should not affect original list in Group
        members = g.get_members()
        members.append(course.Student(100, 'ok'))

        assert len(g) == 10
        for i in range(10):
            assert students[i] in g
            assert students[i].name in str(g)
        assert isinstance(g.get_members(), list)
        assert len(g.get_members()) == 10
Example #4
0
def studs_violates() -> List[course.Student]:
    return [
        course.Student(1, 'Zoro'),
        course.Student(2, 'Aaron'),
        course.Student(3, 'Gertrude'),
        course.Student(4, '')
    ]
Example #5
0
def students_out_of_order():
    return [
        course.Student(2, 'Zoro'),
        course.Student(3, 'Aaron'),
        course.Student(1, 'Gertrude'),
        course.Student(4, 'Yvette')
    ]
Example #6
0
 def answer_questions(self) -> List[course.Student]:
     # students
     s1 = course.Student(2, "First")
     s1.set_answer(self.q1, survey.Answer("owl"))
     s1.set_answer(self.q2, survey.Answer(False))
     s1.set_answer(self.q3, survey.Answer(["chaotic", "evil"]))
     s1.set_answer(self.q4, survey.Answer(1))
     s2 = course.Student(25, "Second")
     s2.set_answer(self.q1, survey.Answer("bug"))
     s2.set_answer(self.q2, survey.Answer(False))
     s2.set_answer(self.q3, survey.Answer(["chaotic", "evil", "neutral"]))
     s2.set_answer(self.q4, survey.Answer(8))
     s3 = course.Student(34, "Third")
     s3.set_answer(self.q1, survey.Answer("human"))
     s3.set_answer(self.q2, survey.Answer(True))
     s3.set_answer(self.q3, survey.Answer(["chaotic", "neutral"]))
     s3.set_answer(self.q4, survey.Answer(5))
     s4 = course.Student(9, "Fourth")
     s4.set_answer(self.q1, survey.Answer("owl"))
     s4.set_answer(self.q2, survey.Answer(False))
     s4.set_answer(self.q3, survey.Answer(["neutral"]))
     s4.set_answer(self.q4, survey.Answer(2))
     s5 = course.Student(89, "Last")
     s5.set_answer(self.q1, survey.Answer("human"))
     s5.set_answer(self.q2, survey.Answer(True))
     s5.set_answer(self.q3, survey.Answer(["evil"]))
     s5.set_answer(self.q4, survey.Answer(7))
     s = [s1, s2, s3, s4, s5]
     return s
Example #7
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 #8
0
def test__has_student() -> None:
    course1 = course.Course("CSC148")
    ted = course.Student(1, "Ted")
    fred = course.Student(2, "Fred")
    students = [ted, fred]
    course1.enroll_students(students)
    assert course1._Course__has_student(ted)
    assert not course1._Course__has_student(course.Student(3, "Bob"))
Example #9
0
 def test_course_get_students(self) -> None:
     c = course.Course("mental health")
     students = [
         course.Student(1, "ay"),
         course.Student(3, "bee"),
         course.Student(2, "sea")
     ]
     c.enroll_students(students)
     assert c.get_students()[1].name == 'sea'
Example #10
0
def test_sort_students() -> None:
    s1 = course.Student(1, "gad")
    s2 = course.Student(53, "floof")
    s3 = course.Student(9, "gad")
    s4 = course.Student(15, "blep")
    s5 = course.Student(4, "meep")
    ppl = [s1, s2, s3, s4, s5]
    assert course.sort_students(ppl, 'id') == [s1, s5, s3, s4, s2]
    assert course.sort_students(ppl, 'name') == [s4, s2, s1, s3, s5]
Example #11
0
 def test_has_answer(self, questions):
     s = course.Student(1, 'Bob')
     s1 = course.Student(2, 'George')
     s2 = course.Student(3, 'Dylan')
     s.set_answer(questions[0], survey.Answer('a'))
     s1.set_answer(questions[0], survey.Answer('n'))
     assert s.has_answer(questions[0]) is True
     assert s1.has_answer(questions[0]) is False
     assert s2.has_answer(questions[0]) is False
Example #12
0
    def test_course_complex(self):
        c = course.Course("SHIT101")

        c.enroll_students([])

        # enroll empty list, got empty
        assert c.students == []
        assert c.get_students() == ()

        # add one student
        c.enroll_students([course.Student(0, "FUCK0")])
        assert len(c.students) == 1
        assert [(x.id, x.name) for x in c.students] == [(0, 'FUCK0')]
        assert len(c.get_students()) == 1
        assert isinstance(c.get_students(), tuple)
        assert [(x.id, x.name) for x in c.get_students()] == [(0, 'FUCK0')]

        # add same student again should not change anything
        c.enroll_students([course.Student(0, "FUCK0")])
        assert len(c.students) == 1
        assert [(x.id, x.name) for x in c.students] == [(0, 'FUCK0')]
        assert len(c.get_students()) == 1
        assert isinstance(c.get_students(), tuple)
        assert [(x.id, x.name) for x in c.get_students()] == [(0, 'FUCK0')]

        # add student with empty name should not change anything
        c.enroll_students([course.Student(888, "")])
        assert len(c.students) == 1
        assert [(x.id, x.name) for x in c.students] == [(0, 'FUCK0')]
        assert len(c.get_students()) == 1
        assert isinstance(c.get_students(), tuple)
        assert [(x.id, x.name) for x in c.get_students()] == [(0, 'FUCK0')]

        # add some more
        c.enroll_students([course.Student(2, "FUCK2"), course.Student(1, "FUCK1"), course.Student(99, "FUCK99")])
        assert len(c.students) == 4
        assert len(c.get_students()) == 4
        assert isinstance(c.get_students(), tuple)
        assert [(x.id, x.name) for x in c.get_students()] == [(0, 'FUCK0'), (1, 'FUCK1'), (2, 'FUCK2'), (99, 'FUCK99')]

        # add some more, but contains invalid student, should change nothing
        c.enroll_students([course.Student(2, "FUCK2"),
                           course.Student(0, "FUCK0"),
                           course.Student(88, "FUCK88"),
                           course.Student(99, "FUCK99")])
        assert len(c.students) == 4
        assert len(c.get_students()) == 4
        assert isinstance(c.get_students(), tuple)
        assert [(x.id, x.name) for x in c.get_students()] == [(0, 'FUCK0'),
                                                              (1, 'FUCK1'),
                                                              (2, 'FUCK2'),
                                                              (99, 'FUCK99')]
Example #13
0
 def test_course_enroll(self) -> None:
     c = course.Course("underwater basket weaving")
     assert c.name == 'underwater basket weaving'
     assert c.students == []
     students = [
         course.Student(1, "ay"),
         course.Student(3, "bee"),
         course.Student(2, "sea")
     ]
     c.enroll_students(students)
     assert len(c.students) == len(students)
     for s in students:
         assert s in c.students
Example #14
0
def students() -> List[course.Student]:
    return [
        course.Student(1, 'Zoro'),
        course.Student(2, 'Aaron'),
        course.Student(3, 'Gertrude'),
        course.Student(4, 'Yvette'),
        course.Student(5, 'Alisa'),
        course.Student(6, 'Paulina'),
        course.Student(7, 'Emily'),
        course.Student(7, 'Sophia'),
        course.Student(10, 'Jacob'),
        course.Student(11, 'Anna')
    ]
Example #15
0
def students():
    s1 = course.Student(1, 'A')
    s2 = course.Student(2, 'B')
    s3 = course.Student(3, 'C')
    s4 = course.Student(4, 'D')
    s5 = course.Student(5, 'E')
    s6 = course.Student(5, 'F')
    s7 = course.Student(5, 'G')
    s8 = course.Student(5, 'H')
    s9 = course.Student(5, 'L')
    return [s1, s2, s3, s4, s5]
Example #16
0
def test_survey_class_survey_score_students_two_students() -> None:
    s1 = course.Student(1, 'Misha')
    s2 = course.Student(2, 'Jennifer')
    students = [s1, s2]
    question1 = survey.NumericQuestion(1, 'Do you like food?', 0, 10)
    answer1 = survey.Answer(5)
    answer2 = survey.Answer(10)
    survey1 = survey.Survey([question1])
    criteria = criterion.HeterogeneousCriterion()
    weight1 = 3
    s1.set_answer(question1, answer1)
    s2.set_answer(question1, answer2)
    survey1.set_weight(weight1, question1)
    survey1.set_criterion(criteria, question1)
    assert survey1.score_students(students) == 1.5
Example #17
0
    def test_window(self):
        students = [course.Student(i, "Shit" + str(i)) for i in range(5)]
        questions = [survey.NumericQuestion(i, "FUCKNQ" + str(i), 2, 8) for i in range(5)]
        s = survey.Survey(questions)

        answers = [1, 0, 0, 3, 4, 1, 0, 1, 1, 1, 2, 1, 2, 2, 2, 3, 2, 1, 0, 1, 3, 0, 0, 3, 2]
        i = 0
        for q in questions:
            for stu in students:
                stu.set_answer(q, survey.Answer(2 + answers[i]))
                i += 1

        c = course.Course("Asshole101")
        c.enroll_students(students)

        grouping1 = grouper.WindowGrouper(1).make_grouping(c, s)
        assert len(grouping1) == 5
        assert grouping_to_list_of_list(grouping1) == [[0], [1], [2], [3], [4]]

        grouping2 = grouper.WindowGrouper(2).make_grouping(c, s)
        assert len(grouping2) == 3
        assert grouping_to_list_of_list(grouping2) == [[0], [1, 2], [3, 4]]

        grouping3 = grouper.WindowGrouper(3).make_grouping(c, s)
        assert len(grouping3) == 2
        assert grouping_to_list_of_list(grouping3) == [[0, 1, 2], [3, 4]]

        grouping5 = grouper.WindowGrouper(5).make_grouping(c, s)
        assert len(grouping5) == 1
        assert grouping_to_list_of_list(grouping5) == [[0, 1, 2, 3, 4]]
Example #18
0
def test_course_class_student_set_answer() -> None:
    s1 = course.Student(1, 'Misha')
    question = survey.YesNoQuestion(1, 'Do you like food?')
    answer = survey.Answer(True)
    s1.set_answer(question, answer)
    # noinspection PyProtectedMember
    assert answer in s1._answers
Example #19
0
def students1() -> List[course.Student]:
    return [course.Student(1, 'Zoro'),
            course.Student(2, 'Aaron'),
            course.Student(3, 'Gertrude'),
            course.Student(4, 'Yvette'),
            course.Student(5, 'George'),
            course.Student(6, 'Steph'),
            course.Student(7, 'Draymond'),
            course.Student(8, 'Andrew')]
Example #20
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 #21
0
def load_course(data: Dict[str, Any]) -> course.Course:
    """Return a course created using the information in <data>"""
    course_name = data['name']
    course_ = course.Course(course_name)
    students = [course.Student(s_data['id'], s_data['name'])
                for s_data in data['students']]
    course_.enroll_students(students)
    return course_
Example #22
0
 def test_make_grouping_greedy(self):
     new_course = course.Course('CSC148')
     q1 = survey.CheckboxQuestion(1, 'Hobbies?',
                                  ['Movie', 'Sing', 'Dance', 'Game'])
     new_survey = survey.Survey([q1])
     students = [course.Student(1, 'Zoro'),
                 course.Student(2, 'Aaron'),
                 course.Student(3, 'Gertrude'),
                 course.Student(4, 'Yvette'),
                 course.Student(6, 'Steph'),
                 course.Student(7, 'Draymond'),
                 course.Student(8, 'Andrew')]
     new_course.enroll_students(students)
     new_grouper = grouper.GreedyGrouper(2)
     new_grouping = new_grouper.make_grouping(new_course, new_survey)
     groups = new_grouping.get_groups()
     temp_list = []
     for i in range(0, len(groups)):
         people = groups[i].get_members()
         temp_list.extend(people)
         if i == (len(groups) - 1):
             assert len(groups[i]) <= 2
         else:
             assert len(groups[i]) == 2
     course_students = new_course.get_students()
     for student in course_students:
         assert student in temp_list
     assert len(temp_list) == 7
Example #23
0
def test_course_class_course_all_answered() -> None:
    s1 = course.Student(1, 'Misha')
    courses = course.Course('CSC148')
    courses.enroll_students([s1])
    question = survey.YesNoQuestion(1, 'Do you like food?')
    answer = survey.Answer(True)
    s1.set_answer(question, answer)
    surveys = survey.Survey([question])
    assert courses.all_answered(surveys)
Example #24
0
 def test_get_answer(self) -> None:
     student = course.Student(1, "Hermione")
     # set answer
     student.set_answer(self.question, self.answer)
     student.set_answer(self.question2, self.wrong)
     # get answer
     assert student.get_answer(self.question) == self.answer
     assert student.get_answer(self.question2) == self.wrong
     assert student.get_answer(self.question3) is None
Example #25
0
 def test_has_answer(self) -> None:
     student = course.Student(1, "Hermione")
     # set answer
     student.set_answer(self.question, self.answer)
     student.set_answer(self.question2, self.wrong)
     # has answer
     assert student.has_answer(self.question)
     assert not student.has_answer(self.question2)
     assert not student.has_answer(self.question3)
Example #26
0
 def test_weight_crit(self):
     stu = course.Student(0, "Shit0")
     q = survey.YesNoQuestion(0, "Yue me?")
     stu.set_answer(q, survey.Answer(True))
     s = survey.Survey([q])
     assert s.score_students([stu]) == 1.0
     s.set_weight(5, q)
     assert s.score_students([stu]) == 5.0
     s.set_criterion(criterion.HeterogeneousCriterion(), q)
     assert s.score_students([stu]) == 0.0
Example #27
0
def test_windowgrouping() -> None:
    ted = course.Student(1, "Ted")
    fred = course.Student(2, "Fred")
    jack = course.Student(3, "Jack")
    bob = course.Student(4, "Bob")
    course1 = course.Course("CSC148")
    course1.enroll_students([ted, fred, jack, bob])
    question1 = survey.YesNoQuestion(1, "Really?")
    survey1 = survey.Survey([question1])
    ted.set_answer(question1, survey.Answer(True))
    fred.set_answer(question1, survey.Answer(False))
    jack.set_answer(question1, survey.Answer(False))
    bob.set_answer(question1, survey.Answer(True))
    grouper1 = grouper.WindowGrouper(2)
    grouping1 = grouper1.make_grouping(course1, survey1)
    assert fred in grouping1.get_groups()[0]
    assert jack in grouping1.get_groups()[0]
    assert ted in grouping1.get_groups()[1]
    assert bob in grouping1.get_groups()[1]
Example #28
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 #29
0
class TestGroup:

    s1 = course.Student(1, "gad")
    s2 = course.Student(53, "floof")
    s3 = course.Student(9, "gad")
    s4 = course.Student(15, "blep")
    s5 = course.Student(4, "meep")
    members = [s1, s2, s3, s4]

    def test_group_properties(self) -> None:
        g = grouper.Group(self.members)
        assert len(g) == 4
        assert self.s4 in g
        assert self.s5 not in g
        assert str(g) == 'gad, floof, gad, blep.'

    def test_get_members(self) -> None:
        g = grouper.Group(self.members)
        assert g.get_members()[2].id == 9
        assert len(g.get_members()) == len(g)
Example #30
0
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