velesdb-cli 8.1.0

Interactive CLI and REPL for VelesDB with VelesQL support
//! The CLI reads fusion strategy names through core's grammar.
//!
//! `multi-search --strategy weighted` and the REPL's `.hybrid-sparse` built
//! `weighted` from the pre-#1545 literals 0.5/0.3/0.2, so the same query
//! ranked differently from the CLI than from the server, Python or WASM; the
//! REPL also read names case-sensitively and refused `avg`.

use super::parse_fusion_strategy;
use velesdb_core::{FusionStrategy, DEFAULT_RRF_K};

#[test]
fn weighted_is_cores_canonical_default() {
    let strategy = parse_fusion_strategy("weighted", DEFAULT_RRF_K, None).expect("weighted parses");
    assert_eq!(strategy, FusionStrategy::weighted_default());
}

#[test]
fn rrf_takes_the_flag_k() {
    let strategy = parse_fusion_strategy("rrf", 30, None).expect("rrf parses");
    assert_eq!(strategy, FusionStrategy::RRF { k: 30 });
}

#[test]
fn aliases_and_case_follow_core() {
    for (name, expected) in [
        ("AVG", FusionStrategy::Average),
        ("Max", FusionStrategy::Maximum),
        (
            "RSF",
            FusionStrategy::relative_score(0.5, 0.5).expect("valid"),
        ),
    ] {
        let strategy = parse_fusion_strategy(name, DEFAULT_RRF_K, None)
            .unwrap_or_else(|e| panic!("'{name}' must parse: {e}"));
        assert_eq!(strategy, expected, "'{name}'");
    }
}

#[test]
fn weighted_rrf_reads_the_flag_weights_and_k() {
    let strategy = parse_fusion_strategy("weighted_rrf", 10, Some(&[0.7, 0.3]))
        .expect("weighted_rrf with weights parses");
    assert_eq!(
        strategy,
        FusionStrategy::weighted_rrf(vec![0.7, 0.3], 10.0).expect("valid")
    );
}

#[test]
fn weighted_rrf_without_weights_reports_cores_message() {
    let error =
        parse_fusion_strategy("weighted_rrf", DEFAULT_RRF_K, None).expect_err("must be refused");
    assert!(
        error
            .to_string()
            .contains("'weighted_rrf' requires one weight per branch"),
        "{error}"
    );
}

#[test]
fn an_unknown_name_reports_cores_message() {
    let error = parse_fusion_strategy("nope", DEFAULT_RRF_K, None).expect_err("must be refused");
    assert!(
        error.to_string().contains("Unknown fusion strategy 'nope'"),
        "{error}"
    );
}