#![cfg(all(kani, unix))]
use elicitation::verification::types::{PathAbsolute, PathBytes, PathNonEmpty, PathRelative};
#[kani::proof]
fn verify_valid_ascii_no_null_accepted() {
const MAX_LEN: usize = 4;
let bytes = b"test";
let _path_result = PathBytes::<MAX_LEN>::from_slice(bytes);
}
#[kani::proof]
fn verify_null_byte_rejected() {
const MAX_LEN: usize = 3;
let bytes = [b'/', 0, b't'];
let _path_result = PathBytes::<MAX_LEN>::from_slice(&bytes);
}
#[kani::proof]
fn verify_absolute_path_starts_with_slash() {
const MAX_LEN: usize = 4;
let bytes = [b'/', b'u', b's', b'r'];
let _path_result = PathBytes::<MAX_LEN>::from_slice(&bytes);
}
#[kani::proof]
fn verify_relative_path_no_leading_slash() {
const MAX_LEN: usize = 3;
let bytes = [b'u', b's', b'r'];
let _path_result = PathBytes::<MAX_LEN>::from_slice(&bytes);
}
#[kani::proof]
fn verify_path_absolute_accepts_leading_slash() {
const MAX_LEN: usize = 5;
let bytes = [b'/', b'h', b'o', b'm', b'e'];
let _abs_result = PathAbsolute::<MAX_LEN>::from_slice(&bytes);
}
#[kani::proof]
fn verify_path_absolute_rejects_no_slash() {
const MAX_LEN: usize = 4;
let bytes = [b'h', b'o', b'm', b'e'];
let _abs_result = PathAbsolute::<MAX_LEN>::from_slice(&bytes);
}
#[kani::proof]
fn verify_path_relative_accepts_no_slash() {
const MAX_LEN: usize = 4;
let bytes = [b'h', b'o', b'm', b'e'];
let _rel_result = PathRelative::<MAX_LEN>::from_slice(&bytes);
}
#[kani::proof]
fn verify_path_relative_rejects_slash() {
const MAX_LEN: usize = 5;
let bytes = [b'/', b'h', b'o', b'm', b'e'];
let _rel_result = PathRelative::<MAX_LEN>::from_slice(&bytes);
}
#[kani::proof]
fn verify_path_nonempty_accepts_content() {
const MAX_LEN: usize = 4;
let bytes = [b't', b'e', b's', b't'];
let _nonempty_result = PathNonEmpty::<MAX_LEN>::from_slice(&bytes);
}
#[kani::proof]
fn verify_path_nonempty_rejects_empty() {
const MAX_LEN: usize = 16;
let bytes: [u8; 0] = [];
let nonempty_result = PathNonEmpty::<MAX_LEN>::from_slice(&bytes);
assert!(nonempty_result.is_err());
}
#[kani::proof]
fn verify_root_path() {
const MAX_LEN: usize = 1;
let bytes = [b'/'];
let _path_result = PathBytes::<MAX_LEN>::from_slice(&bytes);
}
#[kani::proof]
fn verify_current_directory() {
const MAX_LEN: usize = 1;
let bytes = [b'.'];
let _path_result = PathBytes::<MAX_LEN>::from_slice(&bytes);
}
#[kani::proof]
fn verify_has_null_byte_detection() {
const MAX_LEN: usize = 3;
let with_null = [b'/', 0, b't'];
let _result1 = PathBytes::<MAX_LEN>::from_slice(&with_null);
let no_null = [b'/', b'a', b'b'];
let _result2 = PathBytes::<MAX_LEN>::from_slice(&no_null);
}
#[kani::proof]
fn verify_absolute_path_byte_check() {
let abs1 = [b'/', b'u', b's', b'r'];
let abs2 = [b'/'];
let rel1 = [b'u', b's', b'r'];
let rel2 = [b'.'];
assert_eq!(abs1[0], b'/');
assert_eq!(abs2[0], b'/');
assert_ne!(rel1[0], b'/');
assert_ne!(rel2[0], b'/');
}