tre-regex 0.4.2

Rust safe bindings to the TRE regex module
Documentation
use crate::{regcomp, regexec, regexec_bytes, RegcompFlags, RegexecFlags};

#[test]
fn regexec_flags_works() {
    let regexec_flags = RegexecFlags::new().add(RegexecFlags::NOTBOL);
    assert_eq!(regexec_flags.get(), RegexecFlags::NOTBOL);

    let regexec_flags = regexec_flags.add(RegexecFlags::NOTEOL);
    assert_eq!(
        regexec_flags.get(),
        RegexecFlags::NOTBOL | RegexecFlags::NOTEOL
    );

    let regexec_flags = regexec_flags.remove(RegexecFlags::NOTBOL);
    assert_eq!(regexec_flags.get(), RegexecFlags::NOTEOL);
}

#[test]
fn regexec_works() {
    let regcomp_flags = RegcompFlags::new().add(RegcompFlags::BASIC);
    let regexec_flags = RegexecFlags::new().add(RegexecFlags::NONE);
    let Ok(compiled_reg) = regcomp("[A-Za-z0-9]*", regcomp_flags) else {
        panic!("regcomp");
    };
    let Ok(result) = regexec(&compiled_reg, "hello", 2, regexec_flags) else {
        panic!("regexec");
    };
    assert!(result[0].is_some());
    assert!(result[0].as_ref().unwrap().is_ok());
    assert_eq!(*result[0].as_ref().unwrap().as_ref().unwrap(), "hello");
    assert!(result[1].is_none());
}

#[test]
fn regexec_bytes_works() {
    let regcomp_flags = RegcompFlags::new().add(RegcompFlags::BASIC);
    let regexec_flags = RegexecFlags::new().add(RegexecFlags::NONE);
    let Ok(compiled_reg) = regcomp("[A-Za-z0-9]*", regcomp_flags) else {
        panic!("regcomp");
    };
    let Ok(result) = regexec_bytes(&compiled_reg, b"hello", 2, regexec_flags) else {
        panic!("regexec_bytes");
    };
    assert!(result[0].is_some());
    assert_eq!(result[0].as_ref().unwrap().as_ref(), b"hello");
    assert!(result[1].as_ref().is_none());
}

#[test]
fn regex_multibyte_works() {
    let regcomp_flags = RegcompFlags::new().add(RegcompFlags::EXTENDED);
    let regexec_flags = RegexecFlags::new().add(RegexecFlags::NONE);
    let Ok(compiled_reg) = regcomp(".*(エリザベス).*", regcomp_flags) else {
        panic!("regcomp");
    };
    let Ok(result) = regexec(&compiled_reg, "私の名前はエリザベスです", 2, regexec_flags)
    else {
        panic!("regexec");
    };
    assert!(result[0].is_some());
    assert!(result[0].as_ref().unwrap().is_ok());
    assert_eq!(
        *result[0].as_ref().unwrap().as_ref().unwrap(),
        "私の名前はエリザベスです"
    );
    assert!(result[1].is_some());
    assert!(result[1].as_ref().unwrap().is_ok());
    assert_eq!(*result[1].as_ref().unwrap().as_ref().unwrap(), "エリザベス");
}