diff --git a/lib/lulucat/fsrs_scheduler.ex b/lib/lulucat/fsrs_scheduler.ex index 2410a3d..bd034e8 100644 --- a/lib/lulucat/fsrs_scheduler.ex +++ b/lib/lulucat/fsrs_scheduler.ex @@ -81,6 +81,10 @@ defmodule Fsrs.Scheduler do validate_parameters!(parameters) desired_retention = Keyword.get(opts, :desired_retention, 0.9) + validate_desired_retention!(desired_retention) + + maximum_interval = Keyword.get(opts, :maximum_interval, 36500) + validate_maximum_interval!(maximum_interval) # Convert learning_steps and relearning_steps from timedeltas to seconds # 将 learning_steps 和 relearning_steps 从时间增量转换为秒 @@ -855,4 +859,20 @@ defmodule Fsrs.Scheduler do raise ArgumentError, "invalid #{field_name} entry: #{inspect(step)}; expected seconds or {:seconds|:minutes, value}" end + + # Validation helpers + + defp validate_desired_retention!(value) do + unless is_number(value) and value > 0.0 and value < 1.0 do + raise ArgumentError, + "desired_retention must be between 0.0 and 1.0 (exclusive), got: #{inspect(value)}" + end + end + + defp validate_maximum_interval!(value) do + unless is_integer(value) and value >= 1 do + raise ArgumentError, + "maximum_interval must be a positive integer (>= 1), got: #{inspect(value)}" + end + end end