mirror of
https://github.com/microsoft/regorus.git
synced 2026-08-05 02:16:11 +00:00
Authored by anakrish and mingweishih Signed-off-by: Anand Krishnamoorthi <anakrish@microsoft.com>
250 lines
4.1 KiB
YAML
250 lines
4.1 KiB
YAML
cases:
|
|
- note: snippet1
|
|
data: {}
|
|
modules:
|
|
- |
|
|
package test
|
|
|
|
a := [ 1 | {3} ]
|
|
|
|
q:= {4}
|
|
|
|
e1 := q & {1} | {true}
|
|
e2 := (q & {1}) | {true}
|
|
|
|
e3 := [ q & {1} | {true} ]
|
|
e4 := [ (q & {1}) | {true} ]
|
|
query: data.test
|
|
want_result:
|
|
a: [1]
|
|
e1:
|
|
set!: [true]
|
|
e2:
|
|
set!: [true]
|
|
e3:
|
|
- set!: [true]
|
|
e4:
|
|
- set!: []
|
|
q:
|
|
set!: [4]
|
|
|
|
- note: snippet2.1
|
|
data: {}
|
|
modules:
|
|
- |
|
|
package test
|
|
|
|
import future.keywords
|
|
|
|
b = 15
|
|
|
|
get_b(a) := v { v := b }
|
|
|
|
x = a {
|
|
a = b with data.test.b as 10
|
|
}
|
|
query: data.test
|
|
want_result:
|
|
b: 15
|
|
x: 10
|
|
|
|
- note: snippet2
|
|
data: {}
|
|
skip: true
|
|
modules:
|
|
- |
|
|
package test
|
|
|
|
a := {4}
|
|
|
|
mydoc(x) := path {
|
|
path := "data.test.a"
|
|
}
|
|
|
|
x := [ y |
|
|
y := data.test.a | data.test.b with data.test.a as {5} with data.test.b as {6}
|
|
]
|
|
|
|
r := [ m | m := data.test.p with data.test.p as 5 + 6; true ]
|
|
|
|
|
|
allow {
|
|
input.x
|
|
== 5
|
|
|
|
input.y == 5
|
|
input.y
|
|
== 5
|
|
}
|
|
query: data.test
|
|
want_result:
|
|
a:
|
|
set!: [4]
|
|
r: [11]
|
|
x:
|
|
- set!: [5, 6]
|
|
|
|
|
|
- note: snippet3
|
|
data: {}
|
|
modules:
|
|
- |
|
|
package test
|
|
|
|
a(b) { true }
|
|
b(a) { false }
|
|
|
|
p := 5
|
|
|
|
allow {
|
|
# TODO: ude data.test
|
|
q := 5 #data.test["p"]
|
|
y := data.test.a(
|
|
5)
|
|
q == 5
|
|
y
|
|
}
|
|
|
|
r := allow
|
|
x = a(5)
|
|
y = b(5)
|
|
|
|
query: data.test
|
|
want_result:
|
|
allow: true
|
|
p: 5
|
|
r: true
|
|
x: true
|
|
|
|
- note: snippet4
|
|
data: {}
|
|
modules:
|
|
- |
|
|
package test
|
|
|
|
sum (a,b) := c {
|
|
c := a + b
|
|
}
|
|
|
|
obj(v) := o {
|
|
o := { "a" : 5 + v }
|
|
}
|
|
p := sum(5, 6) # There must not be space between sum and (
|
|
#q := { "a" : "sum"}[a](5, 6)
|
|
q := obj(1).a
|
|
query: data.test
|
|
want_result:
|
|
p: 11
|
|
q: 6
|
|
|
|
- note: snippet5
|
|
data: {}
|
|
modules:
|
|
- |
|
|
package test
|
|
|
|
import future.keywords.if
|
|
import future.keywords.in
|
|
|
|
b := {2, 3}
|
|
|
|
double(x) := y { y := [x, x] }
|
|
|
|
# Membership needs to be enclosed in parens
|
|
x := [ (y in {2,3}) |
|
|
y := 5 in { "z" : 5}
|
|
]
|
|
query: data.test
|
|
want_result:
|
|
b:
|
|
set!: [2, 3]
|
|
x: [false]
|
|
|
|
- note: snippet6
|
|
data: {}
|
|
modules:
|
|
- |
|
|
package test
|
|
|
|
import future.keywords.in
|
|
import future.keywords.every
|
|
import future.keywords.if
|
|
import future.keywords.contains
|
|
|
|
# expr top; membership
|
|
x := false in {a, b} {
|
|
a := 1
|
|
b := 0, 2 in [5, 6]
|
|
0, 2 in [5, 6]
|
|
}
|
|
|
|
a.y(a) := b { b := a }
|
|
|
|
p["q"](a1) := b { b:= a1 }
|
|
|
|
c := a.y(5)
|
|
d := p.q(5)
|
|
|
|
r["s"] p1 {
|
|
s1 := "1"
|
|
p1 := s1
|
|
}
|
|
query: data.test
|
|
want_result:
|
|
a: {}
|
|
c: 5
|
|
d: 5
|
|
p: {}
|
|
p1: true
|
|
r:
|
|
set!: ["s"]
|
|
|
|
- note: snippet8
|
|
data: {}
|
|
modules:
|
|
- |
|
|
package test
|
|
|
|
import future.keywords.if
|
|
import future.keywords.in
|
|
import future.keywords.contains
|
|
|
|
# Try removing parenthesis below
|
|
ref["p"] contains [(x | {5})] # [a]
|
|
# Uncomment [a]. Why doesn't rego complain?
|
|
# Then add a := 5 to the body.
|
|
{
|
|
x:= {6}
|
|
}
|
|
|
|
arg := 5
|
|
ref1[arg] {
|
|
arg := {5, 6}
|
|
}
|
|
|
|
ref2.arg := {5, 6}
|
|
|
|
a[b] {
|
|
b := {5,6}[_]
|
|
}
|
|
|
|
#x["b"] := b {
|
|
# b := {5,6}[_]
|
|
#}
|
|
query: data.test
|
|
want_result:
|
|
a:
|
|
set!: [5, 6]
|
|
arg: 5
|
|
ref:
|
|
p:
|
|
set!:
|
|
-
|
|
- set!: [5, 6]
|
|
ref1:
|
|
set!:
|
|
- set!: [5, 6]
|
|
ref2:
|
|
arg:
|
|
set!: [5, 6]
|