Skip to content

Conversation

@DFrenkel
Copy link
Contributor

@DFrenkel DFrenkel commented May 6, 2025

Also: implementing internal.member_3 for compliance testing

Resolves #12

Also: implementing internal.member_3 for compliance testing

Resolves open-policy-agent#12

Signed-off-by: Dmitry Frenkel <[email protected]>
@DFrenkel
Copy link
Contributor Author

DFrenkel commented May 6, 2025

Compliance tests contain two failures and the rest are passing:

Build complete! (0.19s)
	✅ aggregates/test-aggregates-0003.json: aggregates/count keys -> eval
	✅ aggregates/test-aggregates-0001.json: aggregates/count -> eval
	✅ aggregates/test-aggregates-0004.json: aggregates/count keys virtual -> eval
	✅ aggregates/test-aggregates-0005.json: aggregates/count set -> eval
	✅ aggregates/test-aggregates-0016.json: aggregates/max virtual set -> eval
	✅ aggregates/test-aggregates-0009.json: aggregates/sum virtual set -> eval
	✅ aggregates/test-aggregates-0015.json: aggregates/max virtual -> eval
	✅ aggregates/test-aggregates-0002.json: aggregates/count virtual -> eval
	✅ aggregates/test-aggregates-0008.json: aggregates/sum virtual -> eval
	✅ aggregates/test-aggregates-0006.json: aggregates/sum -> eval
	✅ aggregates/test-aggregates-0014.json: aggregates/max set -> eval
	✅ aggregates/test-aggregates-0013.json: aggregates/max -> eval
	✅ aggregates/test-aggregates-0012.json: aggregates/product set -> eval
	✅ aggregates/test-aggregates-0011.json: aggregates/product -> eval
	✅ aggregates/test-aggregates-0010.json: aggregates/bug 2469 - precision -> eval
	✅ aggregates/test-aggregates-0007.json: aggregates/sum set -> eval
	✅ aggregates/test-aggregates-0017.json: aggregates/min -> eval
	✅ aggregates/test-aggregates-0020.json: aggregates/min set -> eval
	✅ aggregates/test-aggregates-0018.json: aggregates/min dups -> eval
	✅ aggregates/test-aggregates-0019.json: aggregates/min out-of-order -> eval
	✅ aggregates/test-aggregates-0023.json: aggregates/reduce ref dest -> eval
	✅ aggregates/test-aggregates-0021.json: aggregates/min virtual -> eval
	✅ aggregates/test-aggregates-0025.json: aggregates/sort -> eval
	✅ aggregates/test-aggregates-0024.json: aggregates/reduce ref dest (2) -> eval
	✅ aggregates/test-aggregates-0022.json: aggregates/min virtual set -> eval
	✅ aggregates/test-aggregates-0027.json: aggregates/count string -> eval
	✅ aggregates/test-aggregates-0026.json: aggregates/sort set -> eval
	✅ aggregates/test-aggregates-0028.json: aggregates/count error null -> eval
	✅ aggregates/test-aggregates-0027.json: aggregates/count string -> eval
↳ 	❌ aggregates/test-aggregates-bad-utf8-runes.json: aggregates/count with invalid utf-8 chars (0xFFFD) -> eval: testAssertionFailed(expected: AST.RegoValue.array([AST.RegoValue.object([AST.RegoValue.string("x"): AST.RegoValue.array([AST.RegoValue.number(30)])])]), actual: AST.RegoValue.array([AST.RegoValue.object([AST.RegoValue.string("x"): AST.RegoValue.array([])])]))
	✅ aggregates/test-membership.json: aggregates/member simple, set -> eval
	✅ aggregates/test-aggregates-0028.json: aggregates/count error number -> eval
	✅ aggregates/test-membership.json: aggregates/member simple, array -> eval
	✅ aggregates/test-membership.json: aggregates/member simple, object -> eval
	✅ aggregates/test-membership.json: aggregates/member array with index -> eval
	✅ aggregates/test-membership.json: aggregates/member array with index, nested -> eval
	✅ aggregates/test-membership.json: aggregates/member object with key, nested, associativity without parens -> eval
	✅ aggregates/test-membership.json: aggregates/member array with index, nested, associativity without parens -> eval
	✅ aggregates/test-membership.json: aggregates/member object with key -> eval
	✅ aggregates/test-membership.json: aggregates/member object with key, nested -> eval
	✅ aggregates/test-membership.json: aggregates/member simple false, array -> eval
	✅ aggregates/test-membership.json: aggregates/member simple false, set -> eval
	✅ aggregates/test-membership.json: aggregates/member operator precedence with other infix operator (+) -> eval
	✅ aggregates/test-membership.json: aggregates/member with not -> eval
	✅ aggregates/test-membership.json: aggregates/member simple false, object -> eval
	✅ aggregates/test-membership.json: aggregates/member chained -> eval
	✅ aggregates/test-membership.json: aggregates/member with vars -> eval
	✅ aggregates/test-membership.json: aggregates/member operator precedence in list (set) -> eval
	✅ aggregates/test-membership.json: aggregates/member operator precedence in list with parens (set) -> eval
	✅ aggregates/test-membership.json: aggregates/member operator precedence in list with parens (array) -> eval
	✅ aggregates/test-membership.json: aggregates/member operator precedence in list (array) -> eval
	✅ aggregates/test-membership.json: aggregates/member operator precedence in list (fun args) -> eval
	✅ aggregates/test-membership.json: aggregates/member non-collection string -> eval
	✅ aggregates/test-membership.json: aggregates/member operator precedence in list with parens (fun args) -> eval
	✅ aggregates/test-membership.json: aggregates/member composite containee -> eval
	✅ aggregates/test-membership.json: aggregates/member non-collection number -> eval
	✅ aggregates/test-membership.json: aggregates/member+some ground value -> eval
	✅ aggregates/test-membership.json: aggregates/member with key in non-collection (number) -> eval
	✅ aggregates/test-membership.json: aggregates/member+some simple, array -> eval
↳ 	❌ aggregates/test-membership.json: aggregates/member+some containee is call -> eval: testFailed(reason: "unexpected evaluation error: builtinNotFound(name: \"numbers.range\")", error: Optional(Rego.BuiltinRegistry.RegistryError.builtinNotFound(name: "numbers.range")))
	✅ aggregates/test-membership.json: aggregates/member+some ground composite containee -> eval
	✅ aggregates/test-membership.json: aggregates/member+some non-ground composite containee -> eval
	✅ aggregates/test-membership.json: aggregates/member+some ground composite containee (false) -> eval
	✅ aggregates/test-membership.json: aggregates/member+some+key non-ground value -> eval
	✅ aggregates/test-membership.json: aggregates/member+some+key non-ground key -> eval
	✅ aggregates/test-membership.json: aggregates/member+some non-ground composite containee, multiple bindings -> eval
	✅ aggregates/test-membership.json: aggregates/member+some+key non-ground key+value -> eval
	✅ aggregates/test-membership.json: aggregates/member+some+key non-ground, composite key -> eval
	✅ aggregates/test-membership.json: aggregates/member+some+ref -> eval
	✅ aggregates/test-membership.json: aggregates/member+some+key+ref -> eval
	✅ aggregates/test-membership.json: aggregates/member+some+key+ref with other variable -> eval
	✅ aggregates/test-membership.json: aggregates/member+some+with -> eval
make: *** [test-compliance] Error 1

@DFrenkel DFrenkel marked this pull request as ready for review May 6, 2025 20:26
@DFrenkel DFrenkel marked this pull request as draft October 24, 2025 17:37
use synchronous builtin implementations for aggregate sum/product
Implement numbers.range and numbers.range_step builtins maintaining compatibility with Go version.

Resolves open-policy-agent#6

Signed-off-by: Dmitry Frenkel <[email protected]>
@DFrenkel
Copy link
Contributor Author

I've reimplemented these changes in another cleaner branch, taking into account @shomron sync reducer recommendations. I am going to close this PR and open another one

@DFrenkel DFrenkel closed this Oct 24, 2025
@DFrenkel DFrenkel deleted the aggregates branch November 6, 2025 18:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

builtins: implement aggregates sum, product and sort

2 participants