ever 0.2.0

Print the build information of your program with minimal boilerplate
Documentation
use regex::Regex;
use semver::Version;

fn is_match(pattern: &str, input: &str) {
    let regex = Regex::new(pattern).unwrap();
    assert!(regex.is_match(input), "regex check failed: `{}`", input);
}

#[test]
fn test_package_name() {
    assert_eq!("ever", ever::package_name!());
}

#[test]
fn test_package_version() {
    Version::parse(ever::package_version!()).unwrap();
}

#[test]
fn test_package_description() {
    assert_eq!(
        "Print the build information of your program with minimal boilerplate",
        ever::package_description!()
    );
}

#[test]
fn test_build_date() {
    chrono::DateTime::parse_from_str(ever::build_date!(), "%c %z").unwrap();
}

#[test]
fn test_build_mode() {
    match ever::build_mode!() {
        "debug" | "release" => {}
        e => panic!("{}", e),
    }
}

#[test]
fn test_build_commit_hash() {
    is_match(r"^[a-f0-9]+(-dirty)?$", ever::build_commit_hash!());
}

#[test]
fn test_build_dir() {
    let s = std::path::Path::new(ever::build_dir!());
    assert!(s.is_dir());
    assert_eq!(s.file_name().unwrap(), "ever");
}

#[test]
fn test_rustc_version() {
    let version = ever::rustc_version!();
    let mut tokens = version.splitn(2, " ");

    Version::parse(tokens.next().unwrap()).unwrap();
    is_match(
        r"^\([a-f0-9]+ [0-9]+-[0-9]+-[0-9]+\)$",
        tokens.next().unwrap(),
    );
}