summaryrefslogtreecommitdiff
path: root/README.md
blob: 563ec94af1d1e1a735fd9f25ec3276e9ae9233a3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# rustlings

A cool thing that is currently in development.

## How it's structured

Ideally, like RubyKoans, all exercises can be run by executing one command, in this case
`cargo run` (most likely). This runs `src/main.rs`, which in turn runs all of the exercises.
Each exercise is contained in a Rust file called `about_<exercise topic>.rs`. A minimal exercise looks
somewhat like this:

```rust
fn exercise_function() {
  "hello"
}

mod tests {
  use super::*;
  
  pub fn test() {
    verify!("REPLACE ME", exercise_function(), "Function description");
  }
}

pub fn exec() {
  tests::test();
}
```

Each exercise file is supposed to have one `exec` function which gets called by the `main.rs` file.
This function, in turn, calls all individual test functions.

The tests themselves can generally be structured in whatever way is desired. Two macros are provided
for convenience. The `verify!` macro is essentially a specialized `assert_eq!`, but it doesn't panic
if the values mismatch, instead it prints out a helpful error message and keeps going. The
`verify_easy!` macro is designed as a drop-in replacement for the `verify!` macro for if the learner needs help solving the exercise. It prints the expected value, too.

This is roughly what the console output for a simple exercise looks right now:

![](https://i.imgur.com/gGgjvLW.png)

Keep in mind that this is a very early draft of how things work. Anything here might be changed
at any time, and this documentation should be updated accordingly.