#![allow(clippy::expect_used, clippy::indexing_slicing)]
use std::fs;
#[test]
fn safetensors_owned_dequant_outlives_model() {
use anamnesis::{parse_bytes, TargetDtype};
const ST_FP8: &str = "tests/fixtures/safetensors_reference/fp8.safetensors";
let bf16: Vec<u8> = {
let model = parse_bytes(fs::read(ST_FP8).expect("read fixture")).expect("parse");
model
.remember_to_bytes(TargetDtype::BF16)
.expect("remember to bytes")
};
assert!(
!bf16.is_empty(),
"owned dequant bytes survive the model drop"
);
}
#[cfg(feature = "gguf")]
#[test]
fn gguf_owned_tensors_outlive_parsed() {
use anamnesis::{parse_gguf_bytes, write_gguf_to_writer, GgufType, GgufWriteTensor};
use std::collections::HashMap;
use std::io::Cursor;
let gguf_bytes: Vec<u8> = {
let f32_bytes: Vec<u8> = (0u32..6).flat_map(u32::to_le_bytes).collect();
let shape = [2usize, 3];
let tensors = [GgufWriteTensor {
name: "w",
shape: &shape,
dtype: GgufType::F32,
data: &f32_bytes,
}];
let mut cursor = Cursor::new(Vec::new());
write_gguf_to_writer(&mut cursor, &tensors, &HashMap::new()).expect("write gguf");
cursor.into_inner()
};
let owned: Vec<(String, Vec<usize>, Vec<u8>)> = {
let parsed = parse_gguf_bytes(gguf_bytes).expect("parse gguf bytes");
parsed
.tensors()
.map(|t| (t.name.to_owned(), t.shape.to_vec(), t.data.into_owned()))
.collect()
};
assert!(!owned.is_empty(), "tensors survive the ParsedGguf drop");
assert!(owned.iter().all(|(_, _, data)| !data.is_empty()));
assert_eq!(owned[0].0, "w");
}
#[cfg(feature = "pth")]
#[test]
fn pth_owned_tensors_outlive_parsed() {
use anamnesis::parse_pth_bytes;
const PTH: &str = "tests/fixtures/pth_reference/algzoo_rnn_small.pth";
let owned: Vec<(String, Vec<u8>)> = {
let parsed =
parse_pth_bytes(fs::read(PTH).expect("read fixture")).expect("parse pth bytes");
parsed
.tensors()
.expect("tensors")
.into_iter()
.map(|t| (t.name, t.data.into_owned()))
.collect()
};
assert!(!owned.is_empty(), "tensors survive the ParsedPth drop");
assert!(owned.iter().all(|(_, data)| !data.is_empty()));
}
#[cfg(feature = "npz")]
#[test]
fn npz_tensors_are_owned_by_construction() {
use anamnesis::parse_npz;
const NPZ: &str = "tests/fixtures/npz_reference/gemma_scope_small.npz";
let data: Vec<Vec<u8>> = parse_npz(NPZ)
.expect("parse npz")
.into_values()
.map(|t| t.data)
.collect();
assert!(!data.is_empty(), "npz yields owned tensor data");
assert!(data.iter().all(|d| !d.is_empty()));
}