use ferroplan::temporal::{solve, validate};
const DOM: &str = "(define (domain mr)
(:requirements :durative-actions :numeric-fluents)
(:predicates (ready))
(:functions (raw) (mid) (top))
(:durative-action gather :parameters ()
:duration (= ?duration 1)
:condition (at start (ready))
:effect (at end (increase (raw) 1)))
(:durative-action refine :parameters ()
:duration (= ?duration 1)
:condition (at start (>= (raw) 1))
:effect (and (at start (decrease (raw) 1)) (at end (increase (mid) 1))))
(:durative-action assemble :parameters ()
:duration (= ?duration 1)
:condition (at start (>= (mid) 1))
:effect (and (at start (decrease (mid) 1)) (at end (increase (top) 1)))))";
const PROB: &str = "(define (problem mr3) (:domain mr)
(:init (ready) (= (raw) 0) (= (mid) 0) (= (top) 0))
(:goal (>= (top) 3)))";
#[test]
fn tdemand_default_on_solves_validates_and_opt_out_honored() {
let dom = ferroplan::parser::parse_domain(DOM).expect("domain parses");
let prob = ferroplan::parser::parse_problem(PROB).expect("problem parses");
let plan = solve(&dom, &prob, 1).expect("default-on demand should solve the multi-round goal");
validate(&dom, &prob, &plan).expect("the demand-guided plan must validate");
assert!(
plan.steps.len() >= 3,
"expected a real multi-round plan, got {} steps",
plan.steps.len()
);
assert!(ferroplan::features::tdemand(), "demand defaults on");
std::env::set_var("FF_NO_TDEMAND", "1");
assert!(!ferroplan::features::tdemand(), "FF_NO_TDEMAND opts out");
std::env::remove_var("FF_NO_TDEMAND");
assert!(
ferroplan::features::tdemand(),
"removing FF_NO_TDEMAND restores default-on"
);
}