coremlit 0.1.2

Safe, synchronous CoreML runtime for macOS (CPU/GPU/Neural Engine) with opt-in on-device multimodal pipelines: speech (Whisper STT, forced alignment, speaker diarization, Silero VAD), AudioSet sound-event tagging, and audio/text/image embeddings (CLAP, granite, SigLIP)
use super::*;

#[test]
fn dims_defaults_are_tiny_and_projections_work() {
  let d = ModelDims::new();
  assert_eq!(d.vocab(), 51865);
  assert_eq!(d.n_mels(), 80);
  assert_eq!(d.embed_dim(), 384);
  assert_eq!(d.kv_dim(), 1536);
  assert_eq!(d.max_token_context(), 224);
  assert_eq!(d.n_audio_ctx(), 1500);
  assert_eq!(d.window_samples(), 480_000);
  assert!(d.is_multilingual());
  assert!(!d.with_vocab(51864).is_multilingual()); // ModelUtilities.isModelMultilingual
  assert_eq!(ModelDims::default(), ModelDims::new());
}

#[test]
fn alignment_view_rows() {
  let data = [0.0f32, 1.0, 2.0, 3.0, 4.0, 5.0];
  let view = AlignmentView::new(&data, 2, 3);
  assert_eq!(view.rows(), 2);
  assert_eq!(view.row(1), &[3.0, 4.0, 5.0]);
}

#[test]
fn alignment_matrix_round_trips_a_view() {
  let data = [0.0f32, 1.0, 2.0, 3.0, 4.0, 5.0];
  let view = AlignmentView::new(&data, 2, 3);
  let matrix = view.to_matrix();
  assert_eq!(matrix.rows(), 2);
  assert_eq!(matrix.cols(), 3);
  assert_eq!(matrix.view().row(1), &[3.0, 4.0, 5.0]);
}

#[test]
fn backend_error_displays_structured() {
  let e = BackendError::MissingFeature(MissingFeature::new("decoder", "logits"));
  assert_eq!(
    e.to_string(),
    "decoder model output is missing feature `logits`"
  );
  let e = BackendError::AudioLength(AudioLength::new(100, 480_000));
  assert!(e.to_string().contains("480000"));
}

#[test]
fn mock_backend_errors_display_the_step_they_failed_on() {
  assert_eq!(
    BackendError::ScriptExhausted(3).to_string(),
    "mock script exhausted at step 3"
  );
  assert_eq!(
    BackendError::ScriptedFailure(2).to_string(),
    "scripted decode-step failure on call 2"
  );
}