#![cfg(kani)]
use zerocopy::{FromBytes, IntoBytes};
use crate::{artifact::PostgresMetadata, role::GraphRole, sync::SyncAction};
#[kani::proof]
fn graph_role_reflexive() {
let role: GraphRole = if kani::any() {
GraphRole::Reader
} else {
GraphRole::Admin
};
assert_eq!(role, role);
}
#[kani::proof]
fn sync_action_reflexive() {
let action = if kani::any() {
SyncAction::InsertEdge {
source: kani::any(),
target: kani::any(),
}
} else if kani::any() {
SyncAction::DeleteEdge {
edge_id: kani::any(),
}
} else if kani::any() {
SyncAction::DeleteNode {
node_id: kani::any(),
}
} else {
SyncAction::TruncateOverlays
};
assert_eq!(action, action);
}
#[kani::proof]
fn postgres_metadata_roundtrip() {
let node_count: u32 = kani::any();
let edge_count: u32 = kani::any();
let built_at: u64 = kani::any();
let read_only: bool = kani::any();
let meta = PostgresMetadata::new(node_count, edge_count, built_at, read_only);
let bytes = meta.as_bytes();
let parsed = PostgresMetadata::read_from_bytes(bytes);
assert_eq!(parsed.ok(), Some(meta));
}