From 5fa31dce90eee8f7de91c2b350297fe9e315beb0 Mon Sep 17 00:00:00 2001
From: Simon Bjurek <simbj106@student.liu.se>
Date: Mon, 24 Mar 2025 13:31:43 +0100
Subject: [PATCH] made ASAPScheduler default if start_times and laps not
 provided when constructing Schedule

---
 b_asic/schedule.py         |  5 +++++
 test/unit/test_schedule.py | 25 ++++++++++++++++++++++++-
 2 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/b_asic/schedule.py b/b_asic/schedule.py
index 1a70a84a..8fc13eba 100644
--- a/b_asic/schedule.py
+++ b/b_asic/schedule.py
@@ -111,6 +111,11 @@ class Schedule:
         if scheduler:
             self._scheduler = scheduler
             self._scheduler.apply_scheduling(self)
+        elif start_times is None and laps is None:
+            from b_asic.scheduler import ASAPScheduler
+
+            self._scheduler = ASAPScheduler()
+            self._scheduler.apply_scheduling(self)
         else:
             if start_times is None:
                 raise ValueError("Must provide start_times when using 'provided'")
diff --git a/test/unit/test_schedule.py b/test/unit/test_schedule.py
index 5795dc64..bc2071f6 100644
--- a/test/unit/test_schedule.py
+++ b/test/unit/test_schedule.py
@@ -856,7 +856,7 @@ class TestErrors:
         with pytest.raises(
             ValueError, match="Must provide start_times when using 'provided'"
         ):
-            Schedule(sfg_simple_filter)
+            Schedule(sfg_simple_filter, laps={"test": 0})
 
     def test_provided_no_laps(self, sfg_simple_filter):
         sfg_simple_filter.set_latency_of_type_name(Addition.type_name(), 1)
@@ -866,6 +866,29 @@ class TestErrors:
         with pytest.raises(ValueError, match="Must provide laps when using 'provided'"):
             Schedule(sfg_simple_filter, start_times={"in0": 0})
 
+    def test_alap_default(self, sfg_direct_form_iir_lp_filter):
+        sfg_direct_form_iir_lp_filter.set_latency_of_type_name(Addition.type_name(), 5)
+        sfg_direct_form_iir_lp_filter.set_latency_of_type_name(
+            ConstantMultiplication.type_name(), 4
+        )
+
+        schedule = Schedule(sfg_direct_form_iir_lp_filter)
+
+        assert schedule.start_times == {
+            "in0": 0,
+            "cmul1": 0,
+            "cmul4": 0,
+            "cmul2": 0,
+            "cmul3": 0,
+            "add3": 4,
+            "add1": 4,
+            "add0": 9,
+            "cmul0": 14,
+            "add2": 18,
+            "out0": 23,
+        }
+        assert schedule.schedule_time == 23
+
 
 class TestGetUsedTypeNames:
     def test_secondorder_iir_schedule(self, secondorder_iir_schedule):
-- 
GitLab