Skip to content

tournament 1.3.0: Add simple start cases, remove invalid lines #288

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
May 13, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion exercises/tournament/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion exercises/tournament/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
[package]
name = "tournament"
version = "0.0.0"
version = "1.3.0"
12 changes: 6 additions & 6 deletions exercises/tournament/example.rs
Original file line number Diff line number Diff line change
Expand Up @@ -59,18 +59,18 @@ fn write_tally(results: &HashMap<String, TeamResult>) -> String {
let points = r.wins * 3 + r.draws;
(team, games, r, points)
}).collect();
// Sort by points, then games played, in reverse order.
// Sort by points descending, then name A-Z.
v.sort_by(|a, b|
match a.3.cmp(&(b.3)).reverse() {
Equal => a.1.cmp(&(b.1)).reverse(),
Equal => a.0.cmp(&(b.0)),
other => other
});
let header = format!("{:30} | MP | W | D | L | P\n", "Team");
let lines: Vec<_> = v.iter().map(|&(ref team, games, r, points)| {
let mut lines = vec![format!("{:30} | MP | W | D | L | P", "Team")];
lines.extend(v.iter().map(|&(ref team, games, r, points)| {
format!("{:30} | {:2} | {:2} | {:2} | {:2} | {:2}",
team, games, r.wins, r.draws, r.losses, points)
}).collect();
header + &lines.join("\n")
}));
lines.join("\n")
}

fn add_game_result(results: &mut HashMap<String, TeamResult>, team: String, result: GameResult) {
Expand Down
146 changes: 116 additions & 30 deletions exercises/tournament/tests/tournament.rs
Original file line number Diff line number Diff line change
@@ -1,16 +1,107 @@
extern crate tournament;

#[test]
fn test_good() {
let input = "Allegoric Alaskians;Blithering Badgers;win\n".to_string() +
fn just_the_header_if_no_input() {
let input = "";
let expected = "Team | MP | W | D | L | P";

assert_eq!(tournament::tally(&input), expected);
}

#[test]
#[ignore]
fn a_win_is_three_points_a_loss_is_zero_points() {
let input = "Allegoric Alaskans;Blithering Badgers;win";
let expected = "Team | MP | W | D | L | P\n".to_string() +
"Allegoric Alaskans | 1 | 1 | 0 | 0 | 3\n" +
"Blithering Badgers | 1 | 0 | 0 | 1 | 0";

assert_eq!(tournament::tally(&input), expected);
}

#[test]
#[ignore]
fn a_win_can_also_be_expressed_as_a_loss() {
let input = "Blithering Badgers;Allegoric Alaskans;loss";
let expected = "Team | MP | W | D | L | P\n".to_string() +
"Allegoric Alaskans | 1 | 1 | 0 | 0 | 3\n" +
"Blithering Badgers | 1 | 0 | 0 | 1 | 0";

assert_eq!(tournament::tally(&input), expected);
}

#[test]
#[ignore]
fn a_different_team_can_win() {
let input = "Blithering Badgers;Allegoric Alaskans;win";
let expected = "Team | MP | W | D | L | P\n".to_string() +
"Blithering Badgers | 1 | 1 | 0 | 0 | 3\n" +
"Allegoric Alaskans | 1 | 0 | 0 | 1 | 0";

assert_eq!(tournament::tally(&input), expected);
}

#[test]
#[ignore]
fn a_draw_is_one_point_each() {
let input = "Allegoric Alaskans;Blithering Badgers;draw";
let expected = "Team | MP | W | D | L | P\n".to_string() +
"Allegoric Alaskans | 1 | 0 | 1 | 0 | 1\n" +
"Blithering Badgers | 1 | 0 | 1 | 0 | 1";

assert_eq!(tournament::tally(&input), expected);
}

#[test]
#[ignore]
fn there_can_be_more_than_one_match() {
let input = "Allegoric Alaskans;Blithering Badgers;win\n".to_string() +
"Allegoric Alaskans;Blithering Badgers;win";
let expected = "Team | MP | W | D | L | P\n".to_string() +
"Allegoric Alaskans | 2 | 2 | 0 | 0 | 6\n" +
"Blithering Badgers | 2 | 0 | 0 | 2 | 0";

assert_eq!(tournament::tally(&input), expected);
}

#[test]
#[ignore]
fn there_can_be_more_than_one_winner() {
let input = "Allegoric Alaskans;Blithering Badgers;loss\n".to_string() +
"Allegoric Alaskans;Blithering Badgers;win";
let expected = "Team | MP | W | D | L | P\n".to_string() +
"Allegoric Alaskans | 2 | 1 | 0 | 1 | 3\n" +
"Blithering Badgers | 2 | 1 | 0 | 1 | 3";

assert_eq!(tournament::tally(&input), expected);
}

#[test]
#[ignore]
fn there_can_be_more_than_two_teams() {
let input = "Allegoric Alaskans;Blithering Badgers;win\n".to_string() +
"Blithering Badgers;Courageous Californians;win\n" +
"Courageous Californians;Allegoric Alaskans;loss";
let expected = "Team | MP | W | D | L | P\n".to_string() +
"Allegoric Alaskans | 2 | 2 | 0 | 0 | 6\n" +
"Blithering Badgers | 2 | 1 | 0 | 1 | 3\n" +
"Courageous Californians | 2 | 0 | 0 | 2 | 0";

assert_eq!(tournament::tally(&input), expected);
}

#[test]
#[ignore]
fn typical_input() {
let input = "Allegoric Alaskans;Blithering Badgers;win\n".to_string() +
"Devastating Donkeys;Courageous Californians;draw\n" +
"Devastating Donkeys;Allegoric Alaskians;win\n" +
"Devastating Donkeys;Allegoric Alaskans;win\n" +
"Courageous Californians;Blithering Badgers;loss\n" +
"Blithering Badgers;Devastating Donkeys;loss\n" +
"Allegoric Alaskians;Courageous Californians;win";
"Allegoric Alaskans;Courageous Californians;win";
let expected = "Team | MP | W | D | L | P\n".to_string() +
"Devastating Donkeys | 3 | 2 | 1 | 0 | 7\n" +
"Allegoric Alaskians | 3 | 2 | 0 | 1 | 6\n" +
"Allegoric Alaskans | 3 | 2 | 0 | 1 | 6\n" +
"Blithering Badgers | 3 | 1 | 0 | 2 | 3\n" +
"Courageous Californians | 3 | 0 | 1 | 2 | 1";

Expand All @@ -19,39 +110,34 @@ fn test_good() {

#[test]
#[ignore]
fn test_ignore_bad_lines() {
let input = "Allegoric Alaskians;Blithering Badgers;win\n".to_string() +
"Devastating Donkeys_Courageous Californians;draw\n" +
"Devastating Donkeys;Allegoric Alaskians;win\n" +
"\n" +
"Courageous Californians;Blithering Badgers;loss\n" +
"Bla;Bla;Bla\n" +
"Blithering Badgers;Devastating Donkeys;loss\n" +
"# Yackity yackity yack\n" +
"Allegoric Alaskians;Courageous Californians;win\n" +
"Devastating Donkeys;Courageous Californians;draw\n" +
"Devastating Donkeys@Courageous Californians;draw";
fn incomplete_competition_not_all_pairs_have_played() {
let input = "Allegoric Alaskans;Blithering Badgers;loss\n".to_string() +
"Devastating Donkeys;Allegoric Alaskans;loss\n" +
"Courageous Californians;Blithering Badgers;draw\n" +
"Allegoric Alaskans;Courageous Californians;win";
let expected = "Team | MP | W | D | L | P\n".to_string() +
"Devastating Donkeys | 3 | 2 | 1 | 0 | 7\n" +
"Allegoric Alaskians | 3 | 2 | 0 | 1 | 6\n" +
"Blithering Badgers | 3 | 1 | 0 | 2 | 3\n" +
"Courageous Californians | 3 | 0 | 1 | 2 | 1";
"Allegoric Alaskans | 3 | 2 | 0 | 1 | 6\n" +
"Blithering Badgers | 2 | 1 | 1 | 0 | 4\n" +
"Courageous Californians | 2 | 0 | 1 | 1 | 1\n" +
"Devastating Donkeys | 1 | 0 | 0 | 1 | 0";

assert_eq!(tournament::tally(&input), expected);
}

#[test]
#[ignore]
fn test_incomplete_competition() {
let input = "Allegoric Alaskians;Blithering Badgers;win\n".to_string() +
"Devastating Donkeys;Allegoric Alaskians;win\n" +
"Courageous Californians;Blithering Badgers;loss\n" +
"Allegoric Alaskians;Courageous Californians;win";
fn ties_broken_alphabetically() {
let input = "Courageous Californians;Devastating Donkeys;win\n".to_string() +
"Allegoric Alaskans;Blithering Badgers;win\n" +
"Devastating Donkeys;Allegoric Alaskans;loss\n" +
"Courageous Californians;Blithering Badgers;win\n" +
"Blithering Badgers;Devastating Donkeys;draw\n" +
"Allegoric Alaskans;Courageous Californians;draw";
let expected = "Team | MP | W | D | L | P\n".to_string() +
"Allegoric Alaskians | 3 | 2 | 0 | 1 | 6\n" +
"Blithering Badgers | 2 | 1 | 0 | 1 | 3\n" +
"Devastating Donkeys | 1 | 1 | 0 | 0 | 3\n" +
"Courageous Californians | 2 | 0 | 0 | 2 | 0";
"Allegoric Alaskans | 3 | 2 | 1 | 0 | 7\n" +
"Courageous Californians | 3 | 2 | 1 | 0 | 7\n" +
"Blithering Badgers | 3 | 0 | 1 | 2 | 1\n" +
"Devastating Donkeys | 3 | 0 | 1 | 2 | 1";

assert_eq!(tournament::tally(&input), expected);
}