Просмотр исходного кода

java: grade-school tests and example implementation

Emil Sit 12 лет назад
Родитель
Сommit
1e4cde7b08

+ 39
- 0
assignments/java/grade-school/example.java Просмотреть файл

1
+import java.util.ArrayList;
2
+import java.util.HashMap;
3
+import java.util.List;
4
+import java.util.Map;
5
+import java.util.Set;
6
+import java.util.TreeSet;
7
+
8
+public class School {
9
+
10
+  private final Map<Integer, Set<String>> database = new HashMap<Integer, Set<String>>();
11
+
12
+  public Map<Integer, Set<String>> db() {
13
+    // Leaks internal storage to caller
14
+    return database;
15
+  }
16
+
17
+  public void add(String student, int grade) {
18
+    Set<String> students = grade(grade);
19
+    students.add(student);
20
+  }
21
+
22
+  public Set<String> grade(int grade) {
23
+    // Leaks internal storage to caller
24
+    if (!database.containsKey(grade)) {
25
+      database.put(grade, new TreeSet<String>());
26
+    }
27
+    return database.get(grade);
28
+  }
29
+
30
+  public Map<Integer, List<String>> sort() {
31
+    Map<Integer, List<String>> sortedStudents = new HashMap<Integer, List<String>>();
32
+    for (Integer grade : database.keySet()) {
33
+      // Relies on using a TreeSet internally
34
+      List<String> sortedGrade = new ArrayList<String>(database.get(grade));
35
+      sortedStudents.put(grade, sortedGrade);
36
+    }
37
+    return sortedStudents;
38
+  }
39
+}

+ 70
- 0
assignments/java/grade-school/src/test/java/SchoolTest.java Просмотреть файл

1
+import static org.fest.assertions.api.Assertions.assertThat;
2
+
3
+import org.junit.Test;
4
+
5
+import java.util.Arrays;
6
+import java.util.HashMap;
7
+import java.util.List;
8
+import java.util.Map;
9
+
10
+public class SchoolTest {
11
+  private final School school = new School();
12
+
13
+  @Test
14
+  public void startsWithNoStudents() {
15
+    assertThat(school.db()).isEmpty();
16
+  }
17
+
18
+  @Test
19
+  public void addsStudents() {
20
+    school.add("Aimee", 2);
21
+    assertThat(school.db().get(2)).contains("Aimee");
22
+  }
23
+
24
+  @Test
25
+  public void addsMoreStudentsInSameGrade() {
26
+    final int grade = 2;
27
+    school.add("James", grade);
28
+    school.add("Blair", grade);
29
+    school.add("Paul", grade);
30
+
31
+    assertThat(school.db().get(grade)).hasSize(3).contains("James", "Blair", "Paul");
32
+  }
33
+
34
+  @Test
35
+  public void addsStudentsInMultipleGrades() {
36
+    school.add("Chelsea", 3);
37
+    school.add("Logan", 7);
38
+
39
+    assertThat(school.db()).hasSize(2);
40
+    assertThat(school.db().get(3)).hasSize(1).contains("Chelsea");
41
+    assertThat(school.db().get(7)).hasSize(1).contains("Logan");
42
+  }
43
+
44
+  @Test
45
+  public void getsStudentsInAGrade() {
46
+    school.add("Franklin", 5);
47
+    school.add("Bradley", 5);
48
+    school.add("Jeff", 1);
49
+    assertThat(school.grade(5)).hasSize(2).contains("Franklin", "Bradley");
50
+  }
51
+
52
+  @Test
53
+  public void getsStudentsInEmptyGrade() {
54
+    assertThat(school.grade(1)).isEmpty();
55
+  }
56
+
57
+  @Test
58
+  public void sortsSchool() {
59
+    school.add("Jennifer", 4);
60
+    school.add("Kareem", 6);
61
+    school.add("Christopher", 4);
62
+    school.add("Kyle", 3);
63
+    Map<Integer, List<String>> sortedStudents = new HashMap<Integer, List<String>>();
64
+    sortedStudents.put(6, Arrays.asList("Kareem"));
65
+    sortedStudents.put(4, Arrays.asList("Christopher", "Jennifer"));
66
+    sortedStudents.put(3, Arrays.asList("Kyle"));
67
+
68
+    assertThat(school.sort()).isEqualTo(sortedStudents);
69
+  }
70
+}