[][src]Crate lab_grader

A criterion runner

For complete examples, see the examples directory on Github.

Example

extern crate lab_grader;

use lab_grader::*;

fn main() {
    // Step 1: Build a Submission
    // Collect name and ID from the command line
    let mut sub = Submission::from_cli();
    // Give the submission some data using the data! macro
    sub.use_data(data! {
        "some_key" => "some value"
    });

    // Step 2: Establish Criteria
    let mut criteria = Criteria::from(vec![
        Criterion::new(
            // The criterion's name
            "First criterion",
            // How many points it's worth
            10,
            // pass/fail messages
            ("passed", "failed"),
            // The test that determines if the criterion passes or not
            Box::new(|data: &TestData| -> bool {
                data["some_key"] == "some value"
            })
        )
    ]);

    // Grade the submission against the criteria.
    // This will assign it a grade and fill it's `passed` and `failed` fields
    sub.grade_against(&mut criteria);

    // Print out all the criteria to the student
    println!("{}", criteria);
}

Re-exports

pub use submission::Submission;
pub use submission::TestData;
pub use criterion::Criterion;
pub use criteria::Criteria;
pub use results_file::AsCsv;
pub use helpers::web;
pub use batch::Batch;

Modules

batch

A batch of criteria, with some extra metadata

criteria

A collection of Criterion

criterion

Definitions for creating and running criteria

helpers

Functions for common tasks in criteria

results_file
submission

A bundle of data that represents a students work.

Macros

data

A macro to easily create a TestData struct, which is really just an alias to HashMap<String, String>

prompt

Calls prompt, then tries to parse the input into the provided type. If parsing fails, it will print an error message and then quit the current process.

yaml

This is an important macro. It reads data from a file using the include_bytes! macro. When compiling for debug, this will read from the filesystem. When compiling for release, this will embed the data in the executable. Graders built using this crate need to have the data embedded in the executable to make it easier to distribute and to keep the data private.