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

Broken test-generation for exercise space-age #474

Open
3 tasks
georgyo opened this issue Mar 11, 2023 · 2 comments
Open
3 tasks

Broken test-generation for exercise space-age #474

georgyo opened this issue Mar 11, 2023 · 2 comments

Comments

@georgyo
Copy link
Member

georgyo commented Mar 11, 2023

This exercise has been marked as having a broken test generator. There are a lots of reasons for test generation to break for a given exercise including

  • New addition of new tests that example.ml does not handle correctly. All that is required here is to fix or replace the example!
  • Changes to the problem-specification's canonical-data.json that our test-gen cannot handle. This could be then additional of field names, changing field names, or addition of tests that not fit with Ocaml's way of doing things. The task here is figure out what changed in the problem-specification and fix or add rules to special_cases.ml.

Useful links

GitHub doesn't allow for linking the diff of an individual file making the relevant canonical-data.json diff impossible to link to. It may be easier to run this in your terminal

git submodule update --init
git -C problem-specifications diff 2af3c9b0074f16c62366c5c533eaacd3ff27b583 -- exercises/space-age/canonical-data.json

Check List

  • Delete templates/space-age/.broken
  • Fix test-generation
  • Test the test generation with make space-age.gentest
@keiravillekode
Copy link
Contributor

A test case was added to problem-specifications:

      "input": {
        "planet": "Sun",
        "seconds": 680804807
      },
      "expected": {"error": "not a planet"}

One option would be to support this test case: we would require solutions to define a type like

type celestial_body = ... | ... | ... | Sun

We would also need to decide how errors should be reported for this exercise, for example using exceptions or Result.

The other option would be to omit this test case, using include = false

@georgyo
Copy link
Member Author

georgyo commented Nov 25, 2023

I don't think we need a celestial_body type. The test says the name of the planet is Sun, but our Sun is not a planet it is a star. There is no consideration for anything that is not a planet.

Likely excluding this test is the best case, because currently Sun would be a compiler error, ocaml doesn't need any explicit tests to prevent or catch the input of Sun.

In order to even accept Sun as input we would need to change the everything to work with strings instead of a variant type. This would make the easiest solution to pattern match on strings instead of a variant type, which is not ideal ocaml.

Any way you chose to solve this is good by me, just consider what would be best for a person who is just starting to learn Ocaml.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants