@@ -61,31 +61,21 @@ check_condition <- function(cond_expr, x){
6161 if (length(clauses ) < = 1 ){
6262 return (NULL )
6363 }
64- # to do for %in statement and replace with multiple "=="
65- neg_clauses <- lapply(clauses , invert_or_negate )
64+ # browser()
65+ # take last clause as consequent, and the rest as the condition
66+ cond <-
67+ utils :: head(clauses , - 1 ) | >
68+ lapply(invert_or_negate )
6669
67- l <- list ()
68- for (neg in neg_clauses ){
69- v <- x + do.call(validate :: validator , list (.test = neg ))
70- if (is_feasible(v )){
71- next
72- }
73- v1 <- is_contradicted_by(v , " .test" )
74- l [[deparse(neg )]] <- v1
75- # op <- op_to_s(neg)
76- # if (op == "=="){
77- # .values <- list(neg[[3]]) |> setNames(as.character(neg[[2]]))
78- # test_rules <- substitute_values(x, .values = .values)
79- # v <- detect_infeasible_rules(test_rules)
80- # if (is.null(v)){
81- # next
82- # }
83- # v1 <- is_contradicted_by(test_rules, v)
84- # v <- c(v,v1)
85- # l[[deparse(neg)]] <- v
86- # }
87-
88- # TODO expand %in% statement here
70+ names(cond ) <- paste0(" .test" , seq_along(cond ))
71+ cond_s <- sapply(cond , deparse_all ) | > paste0(collapse = " && " )
72+
73+ v <- x + do.call(validate :: validator , cond )
74+ if (is_feasible(v )){
75+ return (NULL )
8976 }
77+ l <- list ()
78+ v1 <- is_contradicted_by(v , names(cond ))
79+ l [[cond_s ]] <- v1
9080 l
9181}
0 commit comments