-
Notifications
You must be signed in to change notification settings - Fork 519
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Sync tournament with problem-specifications (#1764)
- Loading branch information
Showing
4 changed files
with
197 additions
and
108 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
{% for test in cases %} | ||
#[test] | ||
{% if loop.index != 1 -%} | ||
#[ignore] | ||
{% endif -%} | ||
fn {{ test.description | slugify | replace(from="-", to="_") }}() { | ||
let input: &[&str] = &{{ test.input.rows | json_encode() }}; | ||
let input = input.join("\n"); | ||
let output = {{ crate_name }}::{{ fn_names[0] }}(&input); | ||
let expected = {{ test.expected | json_encode() }}.join("\n"); | ||
assert_eq!(output, expected); | ||
} | ||
{% endfor -%} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,152 +1,215 @@ | ||
#[test] | ||
fn just_the_header_if_no_input() { | ||
let input = ""; | ||
let expected = "Team | MP | W | D | L | P"; | ||
|
||
assert_eq!(tournament::tally(input), expected); | ||
let input: &[&str] = &[]; | ||
let input = input.join("\n"); | ||
let output = tournament::tally(&input); | ||
let expected = ["Team | MP | W | D | L | P"].join("\n"); | ||
assert_eq!(output, expected); | ||
} | ||
|
||
#[test] | ||
#[ignore] | ||
fn a_win_is_three_points_a_loss_is_zero_points() { | ||
let input = "Allegoric Alaskans;Blithering Badgers;win"; | ||
let expected = "".to_string() | ||
+ "Team | MP | W | D | L | P\n" | ||
+ "Allegoric Alaskans | 1 | 1 | 0 | 0 | 3\n" | ||
+ "Blithering Badgers | 1 | 0 | 0 | 1 | 0"; | ||
|
||
assert_eq!(tournament::tally(input), expected); | ||
let input: &[&str] = &["Allegoric Alaskans;Blithering Badgers;win"]; | ||
let input = input.join("\n"); | ||
let output = tournament::tally(&input); | ||
let expected = [ | ||
"Team | MP | W | D | L | P", | ||
"Allegoric Alaskans | 1 | 1 | 0 | 0 | 3", | ||
"Blithering Badgers | 1 | 0 | 0 | 1 | 0", | ||
] | ||
.join("\n"); | ||
assert_eq!(output, expected); | ||
} | ||
|
||
#[test] | ||
#[ignore] | ||
fn a_win_can_also_be_expressed_as_a_loss() { | ||
let input = "Blithering Badgers;Allegoric Alaskans;loss"; | ||
let expected = "".to_string() | ||
+ "Team | MP | W | D | L | P\n" | ||
+ "Allegoric Alaskans | 1 | 1 | 0 | 0 | 3\n" | ||
+ "Blithering Badgers | 1 | 0 | 0 | 1 | 0"; | ||
|
||
assert_eq!(tournament::tally(input), expected); | ||
let input: &[&str] = &["Blithering Badgers;Allegoric Alaskans;loss"]; | ||
let input = input.join("\n"); | ||
let output = tournament::tally(&input); | ||
let expected = [ | ||
"Team | MP | W | D | L | P", | ||
"Allegoric Alaskans | 1 | 1 | 0 | 0 | 3", | ||
"Blithering Badgers | 1 | 0 | 0 | 1 | 0", | ||
] | ||
.join("\n"); | ||
assert_eq!(output, expected); | ||
} | ||
|
||
#[test] | ||
#[ignore] | ||
fn a_different_team_can_win() { | ||
let input = "Blithering Badgers;Allegoric Alaskans;win"; | ||
let expected = "".to_string() | ||
+ "Team | MP | W | D | L | P\n" | ||
+ "Blithering Badgers | 1 | 1 | 0 | 0 | 3\n" | ||
+ "Allegoric Alaskans | 1 | 0 | 0 | 1 | 0"; | ||
|
||
assert_eq!(tournament::tally(input), expected); | ||
let input: &[&str] = &["Blithering Badgers;Allegoric Alaskans;win"]; | ||
let input = input.join("\n"); | ||
let output = tournament::tally(&input); | ||
let expected = [ | ||
"Team | MP | W | D | L | P", | ||
"Blithering Badgers | 1 | 1 | 0 | 0 | 3", | ||
"Allegoric Alaskans | 1 | 0 | 0 | 1 | 0", | ||
] | ||
.join("\n"); | ||
assert_eq!(output, 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 = "".to_string() | ||
+ "Team | MP | W | D | L | P\n" | ||
+ "Allegoric Alaskans | 2 | 2 | 0 | 0 | 6\n" | ||
+ "Blithering Badgers | 2 | 0 | 0 | 2 | 0"; | ||
|
||
assert_eq!(tournament::tally(&input), expected); | ||
fn a_draw_is_one_point_each() { | ||
let input: &[&str] = &["Allegoric Alaskans;Blithering Badgers;draw"]; | ||
let input = input.join("\n"); | ||
let output = tournament::tally(&input); | ||
let expected = [ | ||
"Team | MP | W | D | L | P", | ||
"Allegoric Alaskans | 1 | 0 | 1 | 0 | 1", | ||
"Blithering Badgers | 1 | 0 | 1 | 0 | 1", | ||
] | ||
.join("\n"); | ||
assert_eq!(output, expected); | ||
} | ||
|
||
#[test] | ||
#[ignore] | ||
fn a_draw_is_one_point_each() { | ||
let input = "Allegoric Alaskans;Blithering Badgers;draw\n".to_string() | ||
+ "Allegoric Alaskans;Blithering Badgers;win"; | ||
let expected = "".to_string() | ||
+ "Team | MP | W | D | L | P\n" | ||
+ "Allegoric Alaskans | 2 | 1 | 1 | 0 | 4\n" | ||
+ "Blithering Badgers | 2 | 0 | 1 | 1 | 1"; | ||
|
||
assert_eq!(tournament::tally(&input), expected); | ||
fn there_can_be_more_than_one_match() { | ||
let input: &[&str] = &[ | ||
"Allegoric Alaskans;Blithering Badgers;win", | ||
"Allegoric Alaskans;Blithering Badgers;win", | ||
]; | ||
let input = input.join("\n"); | ||
let output = tournament::tally(&input); | ||
let expected = [ | ||
"Team | MP | W | D | L | P", | ||
"Allegoric Alaskans | 2 | 2 | 0 | 0 | 6", | ||
"Blithering Badgers | 2 | 0 | 0 | 2 | 0", | ||
] | ||
.join("\n"); | ||
assert_eq!(output, 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 = "".to_string() | ||
+ "Team | MP | W | D | L | P\n" | ||
+ "Allegoric Alaskans | 2 | 1 | 0 | 1 | 3\n" | ||
+ "Blithering Badgers | 2 | 1 | 0 | 1 | 3"; | ||
|
||
assert_eq!(tournament::tally(&input), expected); | ||
let input: &[&str] = &[ | ||
"Allegoric Alaskans;Blithering Badgers;loss", | ||
"Allegoric Alaskans;Blithering Badgers;win", | ||
]; | ||
let input = input.join("\n"); | ||
let output = tournament::tally(&input); | ||
let expected = [ | ||
"Team | MP | W | D | L | P", | ||
"Allegoric Alaskans | 2 | 1 | 0 | 1 | 3", | ||
"Blithering Badgers | 2 | 1 | 0 | 1 | 3", | ||
] | ||
.join("\n"); | ||
assert_eq!(output, 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 = "".to_string() | ||
+ "Team | MP | W | D | L | P\n" | ||
+ "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); | ||
let input: &[&str] = &[ | ||
"Allegoric Alaskans;Blithering Badgers;win", | ||
"Blithering Badgers;Courageous Californians;win", | ||
"Courageous Californians;Allegoric Alaskans;loss", | ||
]; | ||
let input = input.join("\n"); | ||
let output = tournament::tally(&input); | ||
let expected = [ | ||
"Team | MP | W | D | L | P", | ||
"Allegoric Alaskans | 2 | 2 | 0 | 0 | 6", | ||
"Blithering Badgers | 2 | 1 | 0 | 1 | 3", | ||
"Courageous Californians | 2 | 0 | 0 | 2 | 0", | ||
] | ||
.join("\n"); | ||
assert_eq!(output, 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 Alaskans;win\n" | ||
+ "Courageous Californians;Blithering Badgers;loss\n" | ||
+ "Blithering Badgers;Devastating Donkeys;loss\n" | ||
+ "Allegoric Alaskans;Courageous Californians;win"; | ||
let expected = "".to_string() | ||
+ "Team | MP | W | D | L | P\n" | ||
+ "Devastating Donkeys | 3 | 2 | 1 | 0 | 7\n" | ||
+ "Allegoric Alaskans | 3 | 2 | 0 | 1 | 6\n" | ||
+ "Blithering Badgers | 3 | 1 | 0 | 2 | 3\n" | ||
+ "Courageous Californians | 3 | 0 | 1 | 2 | 1"; | ||
|
||
assert_eq!(tournament::tally(&input), expected); | ||
let input: &[&str] = &[ | ||
"Allegoric Alaskans;Blithering Badgers;win", | ||
"Devastating Donkeys;Courageous Californians;draw", | ||
"Devastating Donkeys;Allegoric Alaskans;win", | ||
"Courageous Californians;Blithering Badgers;loss", | ||
"Blithering Badgers;Devastating Donkeys;loss", | ||
"Allegoric Alaskans;Courageous Californians;win", | ||
]; | ||
let input = input.join("\n"); | ||
let output = tournament::tally(&input); | ||
let expected = [ | ||
"Team | MP | W | D | L | P", | ||
"Devastating Donkeys | 3 | 2 | 1 | 0 | 7", | ||
"Allegoric Alaskans | 3 | 2 | 0 | 1 | 6", | ||
"Blithering Badgers | 3 | 1 | 0 | 2 | 3", | ||
"Courageous Californians | 3 | 0 | 1 | 2 | 1", | ||
] | ||
.join("\n"); | ||
assert_eq!(output, expected); | ||
} | ||
|
||
#[test] | ||
#[ignore] | ||
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 = "".to_string() | ||
+ "Team | MP | W | D | L | P\n" | ||
+ "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); | ||
let input: &[&str] = &[ | ||
"Allegoric Alaskans;Blithering Badgers;loss", | ||
"Devastating Donkeys;Allegoric Alaskans;loss", | ||
"Courageous Californians;Blithering Badgers;draw", | ||
"Allegoric Alaskans;Courageous Californians;win", | ||
]; | ||
let input = input.join("\n"); | ||
let output = tournament::tally(&input); | ||
let expected = [ | ||
"Team | MP | W | D | L | P", | ||
"Allegoric Alaskans | 3 | 2 | 0 | 1 | 6", | ||
"Blithering Badgers | 2 | 1 | 1 | 0 | 4", | ||
"Courageous Californians | 2 | 0 | 1 | 1 | 1", | ||
"Devastating Donkeys | 1 | 0 | 0 | 1 | 0", | ||
] | ||
.join("\n"); | ||
assert_eq!(output, expected); | ||
} | ||
|
||
#[test] | ||
#[ignore] | ||
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 = "".to_string() | ||
+ "Team | MP | W | D | L | P\n" | ||
+ "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"; | ||
let input: &[&str] = &[ | ||
"Courageous Californians;Devastating Donkeys;win", | ||
"Allegoric Alaskans;Blithering Badgers;win", | ||
"Devastating Donkeys;Allegoric Alaskans;loss", | ||
"Courageous Californians;Blithering Badgers;win", | ||
"Blithering Badgers;Devastating Donkeys;draw", | ||
"Allegoric Alaskans;Courageous Californians;draw", | ||
]; | ||
let input = input.join("\n"); | ||
let output = tournament::tally(&input); | ||
let expected = [ | ||
"Team | MP | W | D | L | P", | ||
"Allegoric Alaskans | 3 | 2 | 1 | 0 | 7", | ||
"Courageous Californians | 3 | 2 | 1 | 0 | 7", | ||
"Blithering Badgers | 3 | 0 | 1 | 2 | 1", | ||
"Devastating Donkeys | 3 | 0 | 1 | 2 | 1", | ||
] | ||
.join("\n"); | ||
assert_eq!(output, expected); | ||
} | ||
|
||
assert_eq!(tournament::tally(&input), expected); | ||
#[test] | ||
#[ignore] | ||
fn ensure_points_sorted_numerically() { | ||
let input: &[&str] = &[ | ||
"Devastating Donkeys;Blithering Badgers;win", | ||
"Devastating Donkeys;Blithering Badgers;win", | ||
"Devastating Donkeys;Blithering Badgers;win", | ||
"Devastating Donkeys;Blithering Badgers;win", | ||
"Blithering Badgers;Devastating Donkeys;win", | ||
]; | ||
let input = input.join("\n"); | ||
let output = tournament::tally(&input); | ||
let expected = [ | ||
"Team | MP | W | D | L | P", | ||
"Devastating Donkeys | 5 | 4 | 0 | 1 | 12", | ||
"Blithering Badgers | 5 | 1 | 0 | 4 | 3", | ||
] | ||
.join("\n"); | ||
assert_eq!(output, expected); | ||
} |