antithesis_sdk 0.2.8

Rust SDK for the Antithesis autonomous software testing platform.
Documentation
use antithesis_sdk::{antithesis_init, assert_always_greater_than, LOCAL_OUTPUT};
use serde_json::json;

mod common;
use common::SDKInput;

use crate::common::{AntithesisGuidance, GuidanceType};

#[test]
fn assert_guidance() {
    let output_file = "/tmp/antithesis-assert-guidance.json";
    let prev_v = common::env::set_var(LOCAL_OUTPUT, output_file);
    antithesis_init();

    for i in 0..10 {
        let x = if i % 2 == 0 { i } else { -i };
        assert_always_greater_than!(x, 0, "Positive x", &json!({"x": x}));
    }

    match common::read_jsonl_tags(output_file) {
        Ok(x) => {
            let mut did_register = false;
            let mut did_hit = false;
            for obj in x.iter() {
                if let SDKInput::AntithesisGuidance(AntithesisGuidance {
                    guidance_type,
                    hit,
                    id,
                    message,
                    location,
                    ..
                }) = obj
                {
                    if *hit {
                        did_hit = true;
                    } else {
                        did_register = true;
                    };
                    assert_eq!(*guidance_type, GuidanceType::Numeric);
                    assert_eq!(message, "Positive x");
                    assert_eq!(id, message);
                    assert!(location.begin_line > 0);
                    assert!(location.begin_column >= 0);
                    assert_eq!(location.class, "assert_guidance");
                    assert!(location.function.ends_with("::assert_guidance"));
                    assert!(location
                        .file
                        .ends_with("/tests/assert_guidance.rs"));
                }
                println!("{:?}", obj);
            }
            assert!(did_register);
            assert!(did_hit);
        }
        Err(e) => println!("{}", e),
    }
    common::env::restore_var(LOCAL_OUTPUT, prev_v);
}