Skip to content

Conversation

@DFrenkel
Copy link
Contributor

@DFrenkel DFrenkel commented May 6, 2025

Implement numbers.range and numbers.range_step builtins maintaining compatibility with Go version.

Resolves #6

@DFrenkel
Copy link
Contributor Author

DFrenkel commented May 6, 2025

Compliance suite results:

◇ Suite "Compliance Tests" started.
◇ Test testCompliance(tc:) started.
◇ Passing 1 argument tc → numbersrange/test-numbersrange-0256.json: numbersrange/one -> eval to testCompliance(tc:)
◇ Passing 1 argument tc → numbersrange/test-numbersrange-0257.json: numbersrange/ascending -> eval to testCompliance(tc:)
◇ Passing 1 argument tc → numbersrange/test-numbersrange-0259.json: numbersrange/precision -> eval to testCompliance(tc:)
◇ Passing 1 argument tc → numbersrange/test-numbersrange-0258.json: numbersrange/descending -> eval to testCompliance(tc:)
◇ Passing 1 argument tc → numbersrange/test-numbersrange-0258.json: numbersrange/descending (cheap optimization) -> eval to testCompliance(tc:)
◇ Passing 1 argument tc → numbersrange/test-numbersrange-0261.json: numbersrange/error: floating-point number pos 2 -> eval to testCompliance(tc:)
◇ Passing 1 argument tc → numbersrange/test-numbersrange-0260.json: numbersrange/error: floating-point number pos 1 -> eval to testCompliance(tc:)
◇ Passing 1 argument tc → numbersrangestep/test-numbersrangestep.json: numbersrangestep/ascending -> eval to testCompliance(tc:)
◇ Passing 1 argument tc → numbersrange/test-numbersrange-issue-7269.json: numbersrange/issue 7269 -> eval to testCompliance(tc:)
◇ Passing 1 argument tc → numbersrangestep/test-numbersrangestep.json: numbersrangestep/negative -> eval to testCompliance(tc:)
◇ Passing 1 argument tc → numbersrangestep/test-numbersrangestep.json: numbersrangestep/descending -> eval to testCompliance(tc:)
◇ Passing 1 argument tc → numbersrangestep/test-numbersrangestep.json: numbersrangestep/memoryexample -> eval to testCompliance(tc:)
◇ Passing 1 argument tc → numbersrangestep/test-numbersrangestep.json: numbersrangestep/descending (cheap optimization) -> eval to testCompliance(tc:)
◇ Passing 1 argument tc → numbersrangestep/test-numbersrangestep.json: numbersrangestep/equal -> eval to testCompliance(tc:)
◇ Passing 1 argument tc → numbersrangestep/test-numbersrangestep.json: numbersrangestep/notinrange -> eval to testCompliance(tc:)
	🧬 executing numbersrange/test-numbersrange-0256.json: numbersrange/one -> eval
	🧬 executing numbersrange/test-numbersrange-0258.json: numbersrange/descending (cheap optimization) -> eval
	🧬 executing numbersrangestep/test-numbersrangestep.json: numbersrangestep/ascending -> eval
	🧬 executing numbersrangestep/test-numbersrangestep.json: numbersrangestep/memoryexample -> eval
	🧬 executing numbersrange/test-numbersrange-0257.json: numbersrange/ascending -> eval
	🧬 executing numbersrange/test-numbersrange-0259.json: numbersrange/precision -> eval
	🧬 executing numbersrangestep/test-numbersrangestep.json: numbersrangestep/equal -> eval
	🧬 executing numbersrange/test-numbersrange-0258.json: numbersrange/descending -> eval
	🧬 executing numbersrange/test-numbersrange-issue-7269.json: numbersrange/issue 7269 -> eval
	🧬 executing numbersrangestep/test-numbersrangestep.json: numbersrangestep/descending -> eval
	🧬 executing numbersrange/test-numbersrange-0260.json: numbersrange/error: floating-point number pos 1 -> eval
	🧬 executing numbersrange/test-numbersrange-0261.json: numbersrange/error: floating-point number pos 2 -> eval
	🧬 executing numbersrangestep/test-numbersrangestep.json: numbersrangestep/negative -> eval
	🧬 executing numbersrangestep/test-numbersrangestep.json: numbersrangestep/notinrange -> eval
	🧬 executing numbersrangestep/test-numbersrangestep.json: numbersrangestep/descending (cheap optimization) -> eval
	✅ numbersrange/test-numbersrange-0260.json: numbersrange/error: floating-point number pos 1 -> eval
	✅ numbersrangestep/test-numbersrangestep.json: numbersrangestep/negative -> eval
	✅ numbersrange/test-numbersrange-0261.json: numbersrange/error: floating-point number pos 2 -> eval
	✅ numbersrange/test-numbersrange-issue-7269.json: numbersrange/issue 7269 -> eval
	✅ numbersrange/test-numbersrange-0258.json: numbersrange/descending -> eval
	✅ numbersrange/test-numbersrange-0258.json: numbersrange/descending (cheap optimization) -> eval
	✅ numbersrangestep/test-numbersrangestep.json: numbersrangestep/descending (cheap optimization) -> eval
	✅ numbersrangestep/test-numbersrangestep.json: numbersrangestep/memoryexample -> eval
	✅ numbersrange/test-numbersrange-0257.json: numbersrange/ascending -> eval
	✅ numbersrange/test-numbersrange-0256.json: numbersrange/one -> eval
	✅ numbersrangestep/test-numbersrangestep.json: numbersrangestep/descending -> eval
	✅ numbersrangestep/test-numbersrangestep.json: numbersrangestep/equal -> eval
	✅ numbersrangestep/test-numbersrangestep.json: numbersrangestep/ascending -> eval
	✅ numbersrangestep/test-numbersrangestep.json: numbersrangestep/notinrange -> eval
	✅ numbersrange/test-numbersrange-0259.json: numbersrange/precision -> eval
✔ Test testCompliance(tc:) passed after 0.012 seconds.
✔ Suite "Compliance Tests" passed after 0.012 seconds.
✔ Test run with 1 test passed after 0.016 seconds.

@DFrenkel DFrenkel marked this pull request as ready for review May 6, 2025 17:08
@DFrenkel DFrenkel force-pushed the numbers_range branch 2 times, most recently from d6e14df to 6da561a Compare May 6, 2025 17:22
srenatus
srenatus previously approved these changes Oct 23, 2025
Copy link
Contributor

@srenatus srenatus left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Limited swift knowledge ⚠️ but the code change looks fine to me.

Comment on lines 54 to 56
// Golang error is different: step must be a positive number above zero.
// But positive number is by definition above zero...
// so using a different error message.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

BuiltinTests.generateFailureTests(
builtinName: "numbers.range", sampleArgs: [1, 1], argIndex: 1, argName: "b",
allowedArgTypes: ["number"],
generateNumberOfArgsTest: false),
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💭 So I guess these cover the number of args in some way, and since we're doing this with the first arg (above, and in the argName="a" case below), that's sufficient. Sounds fair to me.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, there are similar calls below each arg....

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]>
Copy link
Contributor

@srenatus srenatus left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@srenatus srenatus merged commit 59088ed into open-policy-agent:main Oct 24, 2025
3 checks passed
@DFrenkel DFrenkel deleted the numbers_range branch November 6, 2025 18:54
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 numbers.range and range_step

2 participants