use tensor_wasm_core::types::InstanceId;
use tensor_wasm_wasi_gpu::host::{WasiCudaContext, MAX_ENTRY_NAME_BYTES, MAX_RECORDED_ERROR_BYTES};
#[test]
fn record_error_truncates_long_messages() {
let ctx = WasiCudaContext::new(InstanceId(7777));
let huge = "x".repeat(10 * 1024);
ctx.record_error_for_test(huge);
let stored = ctx.last_error().expect("error recorded");
assert!(
stored.len() <= MAX_RECORDED_ERROR_BYTES + "\u{2026}".len(),
"stored.len() = {}, expected <= {}",
stored.len(),
MAX_RECORDED_ERROR_BYTES + "\u{2026}".len(),
);
assert!(
stored.ends_with('\u{2026}'),
"expected truncated message to end with ellipsis, got tail: {:?}",
&stored[stored.len().saturating_sub(8)..],
);
assert!(
stored.starts_with("xxxx"),
"expected truncated message to keep the leading payload",
);
}
#[test]
fn record_error_keeps_short_messages_intact() {
let ctx = WasiCudaContext::new(InstanceId(7778));
ctx.record_error_for_test("brief");
assert_eq!(ctx.last_error().as_deref(), Some("brief"));
}
#[test]
fn record_error_at_cap_is_not_truncated() {
let ctx = WasiCudaContext::new(InstanceId(7779));
let at_cap = "y".repeat(MAX_RECORDED_ERROR_BYTES);
ctx.record_error_for_test(at_cap.clone());
let stored = ctx.last_error().expect("error recorded");
assert_eq!(stored.len(), MAX_RECORDED_ERROR_BYTES);
assert_eq!(stored, at_cap);
}
#[test]
fn record_error_truncates_on_utf8_boundary() {
let ctx = WasiCudaContext::new(InstanceId(7780));
let mut payload = "a".repeat(MAX_RECORDED_ERROR_BYTES - 1);
for _ in 0..256 {
payload.push('é');
}
ctx.record_error_for_test(payload);
let stored = ctx.last_error().expect("error recorded");
assert!(stored.is_char_boundary(stored.len()));
assert!(stored.ends_with('\u{2026}'));
}
#[test]
fn load_ptx_rejects_oversized_entry_name() {
const _: () = assert!(
MAX_ENTRY_NAME_BYTES <= 512,
"MAX_ENTRY_NAME_BYTES raising past 512 should be a deliberate decision",
);
let abusive_entry_len: i32 = 64 * 1024 * 1024;
assert!(
(abusive_entry_len as usize) > MAX_ENTRY_NAME_BYTES,
"64 MiB entry_len must exceed MAX_ENTRY_NAME_BYTES",
);
}