Skip to content

feat: add react exercise - #321

Closed
metif12 wants to merge 1 commit into
exercism:mainfrom
metif12:add/react
Closed

metif12 wants to merge 1 commit into
exercism:mainfrom
metif12:add/react

Conversation

@metif12

@metif12 metif12 commented Sep 28, 2026

Copy link
Copy Markdown
Contributor

What

Adds the React practice exercise (difficulty 6), split out of #307.

  • react.v -- stub
  • .meta/example.v -- example solution
  • run_test.v -- 14 tests, built from the canonical data in problem-specifications
  • .meta/config.json, .meta/tests.toml, .docs/
  • config.json -- registers the exercise

Adjustments for the test runner's V version

new_callback in run_test.v hands out recorder.record as a method value
instead of a closure that captures the recorder, and Recorder is marked
@[heap] so its method can be used as a value. A closure that calls a mut
method on a captured variable is rejected by V 0.4.8, which wants the captured
variable declared mut -- and that is not accepted by V 0.5.2. A method value
is the same on every V version.

One self-contained commit that touches nothing outside the exercise, so it can be merged on its own.

Verification

  • bin/verify-exercises-in-docker (the current vlang-test-runner image, V 0.4.8): pass, 14/14 tests.
  • V 0.5.2, the version vlang/setup-v installs for bin/test in CI: pass.
  • configlet lint passes; v fmt -l and v vet are clean on the new files.

For the merge commit

Not needed: a brand new exercise does not change the outcome of any existing exercise's tests.

Adds the react practice exercise (difficulty 6), split out of exercism#307. The
example settles a reaction into a new stable state before it reports a
change, and only calls a callback for the cells whose value actually
moved.

`new_callback` in run_test.v now hands out `recorder.record` as a method
value instead of a closure that captures the recorder, and `Recorder` is
marked `@[heap]` so that its method can be used as a value. A closure
that calls a `mut` method on a captured variable is rejected by V 0.4.8
-- the version the current test runner image pins -- which asks for the
captured variable to be declared `mut`, and that is not accepted by V
0.5.2. A method value is the same on every V version the track supports.

Registers the exercise in config.json. Verified with
bin/verify-exercises-in-docker (the current test runner image) and with
V 0.5.2 for bin/test. configlet lint passes, and v fmt -l / v vet are
clean on the new files.
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.

1 participant