remem-ai 0.4.4

Persistent memory for Claude Code — single binary, zero subprocesses
Documentation
use super::helpers::{collect_observation_titles, split_timeout_range};
use crate::memory::format::ParsedObservation;

#[test]
fn split_timeout_range_splits_evenly_when_possible() {
    let ranges = split_timeout_range(0, 6, 1).unwrap();
    assert_eq!(ranges, [(0, 3), (3, 6)]);
}

#[test]
fn split_timeout_range_returns_none_for_single_item_batch() {
    assert_eq!(split_timeout_range(0, 1, 1), None);
}

#[test]
fn collect_observation_titles_skips_missing_titles() {
    let observations = vec![
        ParsedObservation {
            obs_type: "discovery".to_string(),
            title: Some("First".to_string()),
            subtitle: None,
            facts: vec![],
            narrative: None,
            concepts: vec![],
            files_read: vec![],
            files_modified: vec![],
        },
        ParsedObservation {
            obs_type: "bugfix".to_string(),
            title: None,
            subtitle: None,
            facts: vec![],
            narrative: None,
            concepts: vec![],
            files_read: vec![],
            files_modified: vec![],
        },
    ];

    let titles = collect_observation_titles(&observations);
    assert_eq!(titles, vec!["First"]);
}