Guest User

Untitled

a guest
Dec 10th, 2017
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.99 KB | None | 0 0
  1. // Бележка: името на проекта трябва да се казва "solution". Ако не се казва така, променете го на
  2. // тези два реда:
  3. extern crate solution;
  4. use solution::*;
  5.  
  6. macro_rules! assert_substring {
  7. ($expected:expr, $actual:expr) => {
  8. assert!($actual.contains($expected), "Expected {:?} to contain {:?}", $actual, $expected);
  9. }
  10. }
  11.  
  12. macro_rules! assert_match {
  13. ($pattern:pat, $actual:expr) => {
  14. if let $pattern = $actual {
  15. assert!(true);
  16. } else {
  17. assert!(false, "Expected {} to match {:?}", stringify!($pattern), $actual);
  18. }
  19. }
  20. }
  21.  
  22. #[test]
  23. fn test_game_basic() {
  24. let mut g = Game::new("foobar", 2).unwrap();
  25.  
  26. assert!(!g.is_over());
  27.  
  28. assert_eq!(2, g.attempts_remaining);
  29. assert_eq!(0, g.attempted_letters.len());
  30. assert_eq!(0, g.attempted_words.len());
  31.  
  32. assert_substring!("_ _ _ _ _ _", format!("{}", g));
  33.  
  34. assert!(g.guess_letter('o').unwrap());
  35. assert_eq!(1, g.attempted_letters.len());
  36. assert_eq!(0, g.attempted_words.len());
  37. assert_substring!("_ o o _ _ _", format!("{}", g));
  38.  
  39. assert!(g.guess_word("foobar").unwrap());
  40. assert_eq!(1, g.attempted_letters.len());
  41. assert_eq!(1, g.attempted_words.len());
  42. assert_substring!("foobar", format!("{}", g));
  43. assert_substring!("won", format!("{}", g));
  44.  
  45. assert!(g.is_over());
  46. }
  47.  
  48. #[test]
  49. fn test_game_advanced() {
  50. let mut g = Game::new("tranquilizer", 3).unwrap();
  51.  
  52. assert!(!g.is_over());
  53.  
  54. assert_eq!(3, g.attempts_remaining);
  55. assert_eq!(0, g.attempted_letters.len());
  56. assert_eq!(0, g.attempted_words.len());
  57.  
  58. assert_substring!("_ _ _ _ _ _ _ _ _ _ _ _", format!("{}", g));
  59.  
  60. assert!(g.guess_letter('i').unwrap());
  61. assert_eq!(1, g.attempted_letters.len());
  62. assert_eq!(0, g.attempted_words.len());
  63. assert_substring!("_ _ _ _ _ _ i _ i _ _ _", format!("{}", g));
  64.  
  65. assert!(g.guess_letter('t').unwrap());
  66. assert_eq!(2, g.attempted_letters.len());
  67. assert_eq!(0, g.attempted_words.len());
  68. assert_substring!("t _ _ _ _ _ i _ i _ _ _", format!("{}", g));
  69.  
  70. assert!(g.guess_word("tranquilizer").unwrap());
  71. assert_eq!(2, g.attempted_letters.len());
  72. assert_eq!(1, g.attempted_words.len());
  73. assert_substring!("tranquilizer", format!("{}", g));
  74. assert_substring!("won", format!("{}", g));
  75.  
  76. assert!(g.is_over());
  77. }
  78.  
  79. #[test]
  80. fn test_game_with_errors() {
  81. let mut g = Game::new("pencil", 3).unwrap();
  82.  
  83. assert!(!g.is_over());
  84.  
  85. assert_eq!(3, g.attempts_remaining);
  86. assert_eq!(0, g.attempted_letters.len());
  87. assert_eq!(0, g.attempted_words.len());
  88.  
  89. assert_substring!("_ _ _ _ _ _", format!("{}", g));
  90.  
  91. assert!(g.guess_letter('i').unwrap());
  92. assert_eq!(3, g.attempts_remaining);
  93. assert_eq!(1, g.attempted_letters.len());
  94. assert_eq!(0, g.attempted_words.len());
  95. assert_substring!("_ _ _ _ i _", format!("{}", g));
  96.  
  97. assert!(!g.guess_letter('w').unwrap());
  98. assert_eq!(2, g.attempts_remaining);
  99. assert_eq!(2, g.attempted_letters.len());
  100. assert_eq!(0, g.attempted_words.len());
  101. assert_substring!("_ _ _ _ i _", format!("{}", g));
  102.  
  103. assert!(g.guess_letter('p').unwrap());
  104. assert_eq!(2, g.attempts_remaining);
  105. assert_eq!(3, g.attempted_letters.len());
  106. assert_eq!(0, g.attempted_words.len());
  107. assert_substring!("p _ _ _ i _", format!("{}", g));
  108.  
  109. assert!(!g.guess_word("pannic").unwrap());
  110. assert_eq!(1, g.attempts_remaining);
  111. assert_eq!(3, g.attempted_letters.len());
  112. assert_eq!(1, g.attempted_words.len());
  113. assert_substring!("p _ _ _ i _", format!("{}", g));
  114.  
  115. assert!(!g.guess_letter('u').unwrap());
  116. assert_eq!(0, g.attempts_remaining);
  117. assert_eq!(4, g.attempted_letters.len());
  118. assert_eq!(1, g.attempted_words.len());
  119. assert_substring!("pencil", format!("{}", g));
  120. assert_substring!("lost", format!("{}", g));
  121.  
  122. assert!(g.is_over());
  123. }
  124.  
  125. #[test]
  126. fn test_game_cyrillic() {
  127. let mut g = Game::new("крокодил", 2).unwrap();
  128.  
  129. assert!(!g.is_over());
  130.  
  131. assert_eq!(2, g.attempts_remaining);
  132. assert_eq!(0, g.attempted_letters.len());
  133. assert_eq!(0, g.attempted_words.len());
  134.  
  135. assert_substring!("_ _ _ _ _ _ _ _", format!("{}", g));
  136.  
  137. assert!(g.guess_letter('о').unwrap());
  138. assert_eq!(1, g.attempted_letters.len());
  139. assert_eq!(0, g.attempted_words.len());
  140. assert_substring!("_ _ о _ о _ _ _", format!("{}", g));
  141.  
  142. assert!(g.guess_letter('к').unwrap());
  143. assert_eq!(2, g.attempted_letters.len());
  144. assert_eq!(0, g.attempted_words.len());
  145. assert_substring!("к _ о к о _ _ _", format!("{}", g));
  146.  
  147. assert!(g.guess_word("крокодил").unwrap());
  148. assert_eq!(2, g.attempted_letters.len());
  149. assert_eq!(1, g.attempted_words.len());
  150. assert_substring!("крокодил", format!("{}", g));
  151. assert_substring!("won", format!("{}", g));
  152.  
  153. assert!(g.is_over());
  154. }
  155.  
  156. #[test]
  157. fn test_commands_basic() {
  158. assert_match!(Ok(Command::Help), "help".parse::<Command>());
  159. assert_match!(Ok(Command::Help), "he".parse::<Command>());
  160. assert_match!(Ok(Command::Info), "info".parse::<Command>());
  161. assert_match!(Ok(Command::Info), "inf".parse::<Command>());
  162. assert_match!(Ok(Command::Quit), "quit".parse::<Command>());
  163. assert_match!(Ok(Command::Quit), "q".parse::<Command>());
  164. assert_match!(Ok(Command::TryLetter(_)), "try letter x".parse::<Command>());
  165. assert_match!(Ok(Command::TryLetter(_)), "t l x".parse::<Command>());
  166. assert_match!(Ok(Command::TryWord(_)), "try word xyzzy".parse::<Command>());
  167. assert_match!(Ok(Command::TryWord(_)), "tr wo xyzzy".parse::<Command>());
  168. }
  169.  
  170. #[test]
  171. fn test_errors_basic() {
  172. assert_match!(
  173. GameError::ParseError(_),
  174. GameError::ParseError(String::from("error!"))
  175. );
  176. assert_match!(
  177. GameError::BadGuess(_),
  178. GameError::BadGuess(String::from("error!"))
  179. );
  180. assert_match!(
  181. GameError::InvalidSolution(_),
  182. GameError::InvalidSolution(String::from("error!"))
  183. );
  184. assert_match!(GameError::GameOver, GameError::GameOver);
  185. }
Add Comment
Please, Sign In to add comment