summaryrefslogtreecommitdiff
path: root/src/app_state.rs
diff options
context:
space:
mode:
authormo8it <mo8it@proton.me>2024-04-30 02:14:20 +0200
committermo8it <mo8it@proton.me>2024-04-30 02:14:20 +0200
commit563727f47f06cf79bbb40c4b4e7fda67b65fb40f (patch)
treec50237cda3a609217aa416284254ea6be4e94b4b /src/app_state.rs
parent2b7ac915059a4baa2d9c86a583c73fc4f07a8775 (diff)
test next_pending_exercise_ind
Diffstat (limited to 'src/app_state.rs')
-rw-r--r--src/app_state.rs53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/app_state.rs b/src/app_state.rs
index 907c128..8cb3e46 100644
--- a/src/app_state.rs
+++ b/src/app_state.rs
@@ -428,3 +428,56 @@ const FENISH_LINE: &str = "+----------------------------------------------------
▒▒ ▒▒ ▒▒ ▒▒\x1b[0m
";
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ fn dummy_exercise() -> Exercise {
+ Exercise {
+ dir: None,
+ name: "0",
+ path: "exercises/0.rs",
+ test: false,
+ strict_clippy: false,
+ hint: String::new(),
+ done: false,
+ }
+ }
+
+ #[test]
+ fn next_pending_exercise() {
+ let mut app_state = AppState {
+ current_exercise_ind: 0,
+ exercises: vec![dummy_exercise(), dummy_exercise(), dummy_exercise()],
+ n_done: 0,
+ final_message: String::new(),
+ file_buf: Vec::new(),
+ official_exercises: true,
+ target_dir: PathBuf::new(),
+ };
+
+ let mut assert = |done: [bool; 3], expected: [Option<usize>; 3]| {
+ for (exercise, done) in app_state.exercises.iter_mut().zip(done) {
+ exercise.done = done;
+ }
+ for (ind, expected) in expected.into_iter().enumerate() {
+ app_state.current_exercise_ind = ind;
+ assert_eq!(
+ app_state.next_pending_exercise_ind(),
+ expected,
+ "done={done:?}, ind={ind}",
+ );
+ }
+ };
+
+ assert([true, true, true], [None, None, None]);
+ assert([false, false, false], [Some(1), Some(2), Some(0)]);
+ assert([false, true, true], [None, Some(0), Some(0)]);
+ assert([true, false, true], [Some(1), None, Some(1)]);
+ assert([true, true, false], [Some(2), Some(2), None]);
+ assert([true, false, false], [Some(1), Some(2), Some(1)]);
+ assert([false, true, false], [Some(2), Some(2), Some(0)]);
+ assert([false, false, true], [Some(1), Some(0), Some(0)]);
+ }
+}