mirror of
https://github.com/microsoft/regorus.git
synced 2026-08-05 02:16:11 +00:00
negation of an undefined value should return true (#21)
Signed-off-by: eric-therond <eric.therond.fr@gmail.com>
This commit is contained in:
@@ -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,
|
||||
|
||||
66
tests/interpreter/cases/negation/tests.yaml
Normal file
66
tests/interpreter/cases/negation/tests.yaml
Normal 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
|
||||
Reference in New Issue
Block a user