Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rational Numbers: Add error test case to expreal property #2213

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions exercises/rational-numbers/canonical-data.json
Original file line number Diff line number Diff line change
Expand Up @@ -400,6 +400,38 @@
"r": [0, 1]
},
"expected": 1.0
},
{
"uuid": "da137f1c-fc94-4035-9813-94f5152a1102",
"description": "Raise a negative real number to a rational number that has been reduced",
"property": "expreal",
"input": {
"x": -1,
"r": [1, 1]
Copy link
Contributor

Choose a reason for hiding this comment

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

This is kind of an edge case because a [1, 1] exponent is the same as doing nothing, and also the power -1 is not so interesting. If we want to test an actual case, maybe -8 ^ [1, 3] == -2 might be a better choice.
Same for the non-reduded case, it could be [2, 6] instead.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Hey! I tried using that example in my Gleam implementation but stumbled on this. This behaviour is the same in Elixir/Erlang. Any thoughts?

Copy link
Contributor

Choose a reason for hiding this comment

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

Yeah, that's a sensible choice. What I would do is check if the base is negative and the denominator odd, then take the power of the absolute value and negate it.

There is also the option of backing out of these strange cases altogether, although I kid of like them :)

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yeah... I'm up for dropping all of this tbh. It's starting to feel like we are overcomplicating the exercise and not adding much value. Plus, the initial motivation was to add an error case to our Gleam implementation because the function returns a result. Maybe we could just make that same check that float.power/2 does and have that be our error case?

},
"expected": -1.0
},
{
"uuid": "9abd9332-eeab-4139-afa2-2f82efdae421",
"description": "Raise a negative real number to a rational number that has not been reduced",
"property": "expreal",
"input": {
"x": -1,
"r": [2, 2]
},
"expected": -1.0
},
{
"uuid": "f3734f78-91b2-4e59-905e-8c61dbf34f39",
"description": "Fails with a negative real number if the denominator of the reduced rational number is even",
"property": "expreal",
"input": {
"x": -1,
"r": [1, 2]
},
"expected": {
"error": "the result of this operation is a complex number"
}
}
]
},
Expand Down