Skip to content

Commit 1e4cde7

Browse files
committed
java: grade-school tests and example implementation
1 parent 42ae875 commit 1e4cde7

File tree

2 files changed

+109
-0
lines changed

2 files changed

+109
-0
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
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+
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
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+
}

0 commit comments

Comments
 (0)