From 4238a1eb978cc77f5784bbab4a8ad24151c3da25 Mon Sep 17 00:00:00 2001 From: marcantoinem <marc-antoine.m@outlook.com> Date: Wed, 24 Jul 2024 21:48:07 -0400 Subject: [PATCH] Start error detection --- aep-schedule-generator/src/algorithm/generation.rs | 9 +++++++++ aep-schedule-generator/src/data/course.rs | 11 +++++++++++ aep-schedule-generator/src/data/groups.rs | 4 ++++ 3 files changed, 24 insertions(+) diff --git a/aep-schedule-generator/src/algorithm/generation.rs b/aep-schedule-generator/src/algorithm/generation.rs index 4ce040e..88a0bf5 100644 --- a/aep-schedule-generator/src/algorithm/generation.rs +++ b/aep-schedule-generator/src/algorithm/generation.rs @@ -1,3 +1,5 @@ +use compact_str::CompactString; + use super::{ //conflicts::Conflicts, schedule::ScheduleBuilder, @@ -19,6 +21,13 @@ impl SchedulesOptions { // pub fn get_simple_conflict<'a>(&'a self) -> Option<Conflicts> { // } + pub fn get_impossible_course<'a>(&'a self) -> Vec<CompactString> { + self.courses_to_take + .iter() + .filter(|c| c.is_impossible()) + .map(|c| c.sigle.clone()) + .collect() + } pub fn get_nb_combinations<'a>(&'a self) -> usize { self.courses_to_take .iter() diff --git a/aep-schedule-generator/src/data/course.rs b/aep-schedule-generator/src/data/course.rs index ba9d261..c523b62 100644 --- a/aep-schedule-generator/src/data/course.rs +++ b/aep-schedule-generator/src/data/course.rs @@ -155,4 +155,15 @@ impl Course { .is_some_and(|g| g.open), } } + pub fn is_impossible(&self) -> bool { + match &self.course_type { + CourseType::TheoOnly { theo_groups } => theo_groups.is_impossible(), + CourseType::LabOnly { lab_groups } => lab_groups.is_impossible(), + CourseType::Both { + theo_groups, + lab_groups, + } => theo_groups.is_impossible() | lab_groups.is_impossible(), + CourseType::Linked { theo_groups, .. } => theo_groups.is_impossible(), + } + } } diff --git a/aep-schedule-generator/src/data/groups.rs b/aep-schedule-generator/src/data/groups.rs index a2dd60d..ebb8b46 100644 --- a/aep-schedule-generator/src/data/groups.rs +++ b/aep-schedule-generator/src/data/groups.rs @@ -61,6 +61,10 @@ impl Groups { self[index].as_mut() } + pub fn is_impossible(&self) -> bool { + self.iter().all(|c| !c.open) + } + pub fn get_closed(&self, group_type: GroupType, sigle: &CompactString) -> Vec<SigleGroup> { self.iter() .filter(|g| !g.open) -- GitLab