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