remem-ai 0.6.71

Local-first coding agent memory for Claude Code and OpenAI Codex
Documentation
use super::types::{Cli, Commands};
use clap::Parser;

#[test]
fn cli_parses_eval_json_options() {
    let cli = Cli::parse_from([
        "remem",
        "eval",
        "--dataset",
        "fixtures/golden.json",
        "--json",
        "-k",
        "3",
    ]);

    match cli.command {
        Commands::Eval { dataset, k, json } => {
            assert_eq!(dataset, "fixtures/golden.json");
            assert_eq!(k, 3);
            assert!(json);
        }
        _ => panic!("expected eval command"),
    }
}

#[test]
fn cli_parses_bench_verify_options() {
    let cli = Cli::parse_from([
        "remem",
        "bench",
        "verify",
        "--root",
        "eval/public",
        "--json-out",
        "/tmp/remem-bench-verify.json",
    ]);

    match cli.command {
        Commands::Bench { action } => match action {
            super::eval_types::BenchAction::Verify(args) => {
                assert_eq!(args.root, "eval/public");
                assert_eq!(args.json_out, "/tmp/remem-bench-verify.json");
            }
            _ => panic!("expected bench verify action"),
        },
        _ => panic!("expected bench verify command"),
    }
}

#[test]
fn cli_parses_bench_memory_options() {
    let cli = Cli::parse_from([
        "remem",
        "bench",
        "memory",
        "--suite",
        "remem-code-memory",
        "--condition",
        "remem_default",
        "--root",
        "eval/public",
        "--artifact-prefix",
        "memory/artifacts/remem-code-memory-v1",
        "--json-out",
        "/tmp/remem-code-memory.json",
    ]);

    match cli.command {
        Commands::Bench { action } => match action {
            super::eval_types::BenchAction::Memory(args) => {
                assert_eq!(args.suite, "remem-code-memory");
                assert_eq!(args.condition.as_deref(), Some("remem_default"));
                assert_eq!(args.root, "eval/public");
                assert_eq!(
                    args.artifact_prefix.as_deref(),
                    Some("memory/artifacts/remem-code-memory-v1")
                );
                assert_eq!(args.json_out, "/tmp/remem-code-memory.json");
            }
            _ => panic!("expected bench memory action"),
        },
        _ => panic!("expected bench memory command"),
    }
}

#[test]
fn cli_parses_bench_coding_options() {
    let cli = Cli::parse_from([
        "remem",
        "bench",
        "coding",
        "--suite",
        "issue385-v1",
        "--task-set",
        "smoke",
        "--dry-run",
        "--json-out",
        "/tmp/remem-issue385-v1-dry-run.json",
    ]);

    match cli.command {
        Commands::Bench { action } => match action {
            super::eval_types::BenchAction::Coding(args) => {
                assert_eq!(args.suite, "issue385-v1");
                assert_eq!(args.task_set, "smoke");
                assert!(args.dry_run);
                assert_eq!(args.runs_per_condition, 3);
                assert_eq!(args.json_out, "/tmp/remem-issue385-v1-dry-run.json");
            }
            _ => panic!("expected bench coding action"),
        },
        _ => panic!("expected bench coding command"),
    }
}

#[test]
fn cli_parses_bench_report_options() {
    let cli = Cli::parse_from([
        "remem",
        "bench",
        "report",
        "--root",
        "eval/public",
        "--json-out",
        "eval/public/reports/baseline.json",
        "--markdown-out",
        "eval/public/reports/baseline.md",
    ]);

    match cli.command {
        Commands::Bench { action } => match action {
            super::eval_types::BenchAction::Report(args) => {
                assert_eq!(args.root, "eval/public");
                assert_eq!(args.json_out, "eval/public/reports/baseline.json");
                assert_eq!(args.markdown_out, "eval/public/reports/baseline.md");
            }
            _ => panic!("expected bench report action"),
        },
        _ => panic!("expected bench report command"),
    }
}

#[test]
fn cli_parses_eval_extraction_options() {
    let cli = Cli::parse_from([
        "remem",
        "eval-extraction",
        "--corpus",
        "fixtures/extraction.json",
        "--baseline",
        "fixtures/baseline.json",
        "--json",
        "--check-baseline",
    ]);

    match cli.command {
        Commands::EvalExtraction(args) => {
            assert_eq!(args.corpus, "fixtures/extraction.json");
            assert_eq!(args.baseline, "fixtures/baseline.json");
            assert!(args.json);
            assert!(args.check_baseline);
        }
        _ => panic!("expected eval-extraction command"),
    }
}

#[test]
fn cli_parses_eval_gates_options() {
    let cli = Cli::parse_from([
        "remem",
        "eval-gates",
        "--baseline",
        "fixtures/baseline.json",
        "--thresholds",
        "fixtures/thresholds.json",
        "--golden-dataset",
        "fixtures/golden.json",
        "--json-out",
        "/tmp/eval-gates.json",
    ]);

    match cli.command {
        Commands::EvalGates(args) => {
            assert_eq!(args.baseline, "fixtures/baseline.json");
            assert_eq!(args.thresholds, "fixtures/thresholds.json");
            assert_eq!(args.golden_dataset, "fixtures/golden.json");
            assert_eq!(args.json_out.as_deref(), Some("/tmp/eval-gates.json"));
        }
        _ => panic!("expected eval-gates command"),
    }
}

#[test]
fn cli_parses_eval_provider_comparison_options() {
    let cli = Cli::parse_from([
        "remem",
        "eval-provider-comparison",
        "--dataset",
        "fixtures/golden.json",
        "--json-out",
        "/tmp/provider-comparison.json",
        "--json",
        "--allow-api",
        "-k",
        "7",
    ]);

    match cli.command {
        Commands::EvalProviderComparison(args) => {
            assert_eq!(args.dataset, "fixtures/golden.json");
            assert_eq!(args.json_out, "/tmp/provider-comparison.json");
            assert_eq!(args.k, 7);
            assert!(args.json);
            assert!(args.allow_api);
        }
        _ => panic!("expected eval-provider-comparison command"),
    }
}

#[test]
fn cli_parses_eval_graph_decision_options() {
    let cli = Cli::parse_from([
        "remem",
        "eval-graph-decision",
        "--dataset",
        "fixtures/golden.json",
        "--json-out",
        "/tmp/graph-decision.json",
        "--json",
        "-k",
        "7",
    ]);

    match cli.command {
        Commands::EvalGraphDecision(args) => {
            assert_eq!(args.dataset, "fixtures/golden.json");
            assert_eq!(args.json_out, "/tmp/graph-decision.json");
            assert_eq!(args.k, 7);
            assert!(args.json);
        }
        _ => panic!("expected eval-graph-decision command"),
    }
}

#[test]
fn cli_parses_eval_capacity_options() {
    let cli = Cli::parse_from([
        "remem",
        "eval-capacity",
        "--dataset",
        "fixtures/golden.json",
        "--seed",
        "17",
        "--scales",
        "1,10",
        "--json-out",
        "/tmp/capacity.json",
        "--json",
        "-k",
        "7",
    ]);

    match cli.command {
        Commands::EvalCapacity(args) => {
            assert_eq!(args.dataset, "fixtures/golden.json");
            assert_eq!(args.seed, 17);
            assert_eq!(args.scales, "1,10");
            assert_eq!(args.json_out.as_deref(), Some("/tmp/capacity.json"));
            assert_eq!(args.k, 7);
            assert!(args.json);
        }
        _ => panic!("expected eval-capacity command"),
    }
}

#[test]
fn cli_parses_eval_associative_baseline_options() {
    let cli = Cli::parse_from([
        "remem",
        "eval-associative-baseline",
        "--dataset",
        "fixtures/golden.json",
        "--json-out",
        "/tmp/associative-baseline.json",
        "--json",
        "-k",
        "7",
    ]);

    match cli.command {
        Commands::EvalAssociativeBaseline(args) => {
            assert_eq!(args.dataset, "fixtures/golden.json");
            assert_eq!(args.json_out, "/tmp/associative-baseline.json");
            assert_eq!(args.k, 7);
            assert!(args.json);
        }
        _ => panic!("expected eval-associative-baseline command"),
    }
}

#[test]
fn cli_parses_eval_weight_grid_options() {
    let cli = Cli::parse_from([
        "remem",
        "eval-weight-grid",
        "--dataset",
        "fixtures/golden.json",
        "--json-out",
        "/tmp/weight-grid.json",
        "--json",
        "-k",
        "7",
    ]);

    match cli.command {
        Commands::EvalWeightGrid(args) => {
            assert_eq!(args.dataset, "fixtures/golden.json");
            assert_eq!(args.json_out, "/tmp/weight-grid.json");
            assert_eq!(args.k, 7);
            assert!(args.json);
        }
        _ => panic!("expected eval-weight-grid command"),
    }
}

#[test]
fn cli_parses_eval_coding_bench_options() {
    let cli = Cli::parse_from([
        "remem",
        "eval-coding-bench",
        "--fixture",
        "eval/coding-bench/fixtures/tasks.json",
        "--runs-per-condition",
        "3",
        "--json-out",
        "eval/coding-bench/reports/baseline.json",
        "--condition",
        "remem_seeded_sessionstart",
        "--task",
        "slug-normalizer-contract",
        "--runner",
        "codex",
        "--codex-bin",
        "/usr/bin/false",
        "--model",
        "gpt-5.5",
        "--provider",
        "codexapi",
        "--reasoning-effort",
        "medium",
        "--ignore-budget",
        "--keep-workdirs",
    ]);

    match cli.command {
        Commands::EvalCodingBench(args) => {
            assert_eq!(args.fixture, "eval/coding-bench/fixtures/tasks.json");
            assert_eq!(args.runs_per_condition, 3);
            assert_eq!(
                args.json_out.as_deref(),
                Some("eval/coding-bench/reports/baseline.json")
            );
            assert_eq!(args.condition.as_deref(), Some("remem_seeded_sessionstart"));
            assert_eq!(args.task.as_deref(), Some("slug-normalizer-contract"));
            assert_eq!(args.task_set, "full");
            assert_eq!(args.runner, "codex");
            assert_eq!(args.codex_bin, "/usr/bin/false");
            assert_eq!(args.model, "gpt-5.5");
            assert_eq!(args.provider.as_deref(), Some("codexapi"));
            assert_eq!(args.reasoning_effort, "medium");
            assert!(args.ignore_budget);
            assert!(args.keep_workdirs);
        }
        _ => panic!("expected eval-coding-bench command"),
    }
}