Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions lib/lulucat/fsrs_scheduler.ex
Original file line number Diff line number Diff line change
Expand Up @@ -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 从时间增量转换为秒
Expand Down Expand Up @@ -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