Any reason why sorted and grade are moving self? You might want to create a school, sort it then find a grade and then another one : 
```
#[test]
fn test_add_sort_grade() {
    let school = School::new()
        .add(5, "Franklin")
        .add(5, "Bradley")
        .add(1, "Jeff");

    assert_eq!(school.sorted(), ~[(1, ~[~"Jeff"]), (5, ~[~"Bradley", ~"Franklin"])]);
    assert_eq!(school.grade(5), ~[~"Bradley", ~"Franklin"]);
    assert_eq!(school.grade(1), ~[~"Jeff"]);
}
```
But if you take self by value it will move and you can only call sorted/grade once by school.