negation of an undefined value should return true (#21)

Signed-off-by: eric-therond <eric.therond.fr@gmail.com>
This commit is contained in:
eric-therond
2023-06-29 18:44:19 +02:00
committed by GitHub
parent 796da46ae8
commit 8a9652b8d2
2 changed files with 70 additions and 1 deletions

View File

@@ -760,7 +760,10 @@ impl<'source> Interpreter<'source> {
value,
collection,
} => self.eval_some_in(span, key, value, collection, stmts)?,
Literal::NotExpr { expr, .. } => matches!(self.eval_expr(expr)?, Value::Bool(false)),
Literal::NotExpr { expr, .. } => {
// https://github.com/open-policy-agent/opa/issues/1622#issuecomment-520547385
matches!(self.eval_expr(expr)?, Value::Bool(false) | Value::Undefined)
}
Literal::Every {
span,
key,

View File

@@ -0,0 +1,66 @@
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.
cases:
- note: not-false
data: {}
modules:
- |
package test
x[a] {
not 1 == 2
a := "hello"
}
query: data.test
want_result:
x:
set!: [hello]
- note: not-undefined
data: {}
modules:
- |
package test
myequal(t) {
t == 2
}
x[a] {
not myequal(1)
a := "hello"
}
query: data.test
want_result:
x:
set!: [hello]
# https://github.com/open-policy-agent/opa/issues/1877
- note: not-more-undefined-OPA-INCOMPATIBLE
data: {}
modules:
- |
package test
import future.keywords.if
p if false # undefined value
q1 {
not p # `not undefined` evaluates to true
}
q2 = [p] # q2 = [undefined] = undefined
q3 {
not [p] # `not undefined` evaluates to true
}
q4 {
not q3 # `not true` making it undefined
}
query: data.test
want_result:
q1: true
q3: true