Skip to content

Commit a114074

Browse files
committed
small improvements
1 parent a9badde commit a114074

3 files changed

Lines changed: 25 additions & 1 deletion

File tree

R/dnf.R

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,8 @@ as_dnf <- function(expr, ...){
105105
clauses <- unlist(lapply(clauses, function(clause){
106106
if (op_to_s(clause) == "|"){
107107
as_dnf(clause)
108+
} else if (op_to_s(clause) == "!"){
109+
invert_or_negate(consume(left(clause)))
108110
} else{
109111
clause
110112
}

R/expr_manip.R

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,11 @@ negate_ <- function(e, ...){
1010
if (op == "!="){
1111
substitute( l == r, list(l = left(e), r = right(e)))
1212
} else if (op == "=="){
13-
substitute( l != r, list(l = left(e), r = right(e)))
13+
if (is.logical(right(e))){
14+
substitute( l == r, list(l = left(e), r = !right(e)))
15+
} else {
16+
substitute( l != r, list(l = left(e), r = right(e)))
17+
}
1418
}
1519
else {
1620
substitute( !(e), list(e=e) )

tests/testthat/test-dnf.R

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,24 @@ describe("as_dnf", {
124124
expect_equivalent(dnf, expression(x <= 1, z <= 1, w <= 1, y < 0))
125125
})
126126

127+
it("works on issue of negated linear consequent", {
128+
dnf <- as_dnf(quote(if (A==TRUE) !x < 0))
129+
expect_equivalent(as.expression(dnf), expression(A == FALSE | x >= 0))
130+
131+
dnf <- as_dnf(quote(if (y > 0) !x < 0))
132+
expect_equivalent(as.expression(dnf), expression(y <= 0 | x >= 0))
133+
134+
dnf <- as_dnf(quote(if (!y > 0) !x < 0))
135+
expect_equivalent(as.expression(dnf), expression(y > 0 | x >= 0))
136+
137+
dnf <- as_dnf(quote(if (!y > 0) !x < 0 | z > 0))
138+
expect_equivalent(as.expression(dnf), expression(y > 0 | x >= 0 | z > 0))
139+
140+
dnf <- as_dnf(quote(if (!y > 0) !x < 0 | !z > 0))
141+
expect_equivalent(as.expression(dnf), expression(y > 0 | x >= 0 | z <= 0))
142+
})
143+
144+
127145
})
128146

129147

0 commit comments

Comments
 (0)