-- Regression test: traverse_causal_chain() (v0.2.0) -- Tests SP logic predicates without a live table. -- 1. max_depth cap: values > 10 clamp to 10 SELECT CASE WHEN 15 > 10 THEN 10 ELSE 15 END AS depth_15_capped_to_10, CASE WHEN 10 > 10 THEN 10 ELSE 10 END AS depth_10_stays_10, CASE WHEN 5 > 10 THEN 10 ELSE 5 END AS depth_5_stays_5; depth_15_capped_to_10 | depth_10_stays_10 | depth_5_stays_5 -----------------------+-------------------+----------------- 10 | 10 | 5 (1 row) -- Expected: 10, 10, 5 -- 2. edge_type filter: only causal/derives_from/contradicts traverse SELECT ('causal' = ANY(ARRAY['causal','derives_from','contradicts'])) AS causal_included, ('derives_from' = ANY(ARRAY['causal','derives_from','contradicts'])) AS derives_from_included, ('contradicts' = ANY(ARRAY['causal','derives_from','contradicts'])) AS contradicts_included, ('relates_to' = ANY(ARRAY['causal','derives_from','contradicts'])) AS relates_to_excluded; causal_included | derives_from_included | contradicts_included | relates_to_excluded -----------------+-----------------------+----------------------+--------------------- t | t | t | f (1 row) -- Expected: t, t, t, f -- 3. depth guard: c.depth < max_depth halts traversal at boundary SELECT (4 < 5) AS depth_4_within_max5, (5 < 5) AS depth_5_blocked_at_max5, (9 < 10) AS depth_9_within_max10, (10 < 10) AS depth_10_blocked_at_max10; depth_4_within_max5 | depth_5_blocked_at_max5 | depth_9_within_max10 | depth_10_blocked_at_max10 ---------------------+-------------------------+----------------------+--------------------------- t | f | t | f (1 row) -- Expected: t, f, t, f -- 4. seed row excluded from result: WHERE depth > 0 SELECT (0 > 0) AS seed_depth_excluded, (1 > 0) AS first_hop_included, (5 > 0) AS fifth_hop_included; seed_depth_excluded | first_hop_included | fifth_hop_included ---------------------+--------------------+-------------------- f | t | t (1 row) -- Expected: f, t, t -- 5. weight pass-through: weight from mem_edge is returned unchanged SELECT (0.9::DOUBLE PRECISION = 0.9) AS weight_09_intact, (1.0::DOUBLE PRECISION = 1.0) AS weight_10_intact, (0.0::DOUBLE PRECISION = 0.0) AS weight_00_intact; weight_09_intact | weight_10_intact | weight_00_intact ------------------+------------------+------------------ t | t | t (1 row) -- Expected: t, t, t