opencrabs 0.3.58

The autonomous, self-improving AI agent. Single Rust binary. Every channel. Install with: cargo install opencrabs
use crate::brain::tools::fuzzy::*;

#[test]
fn seek_exact() {
    let lines = vec!["foo", "bar", "baz"];
    assert_eq!(seek_sequence(&lines, &["bar", "baz"], 0), vec![1]);
}

#[test]
fn seek_rstrip() {
    let lines = vec!["foo ", "bar\t\t"];
    assert_eq!(seek_sequence(&lines, &["foo", "bar"], 0), vec![0]);
}

#[test]
fn seek_trim_both() {
    let lines = vec![" foo ", " bar\t"];
    assert_eq!(seek_sequence(&lines, &["foo", "bar"], 0), vec![0]);
}

#[test]
fn seek_pattern_longer() {
    let lines = vec!["one line"];
    let result = seek_sequence(&lines, &["too", "many", "lines"], 0);
    assert!(result.is_empty());
}

#[test]
fn replace_exact_substring() {
    let content = "alpha\nbeta\ngamma\n";
    let new = fuzzy_replace_once(content, "beta", "BETA").unwrap();
    assert!(new.contains("BETA"));
    assert!(!new.contains("beta"));
}

#[test]
fn replace_ambiguous_exact() {
    let content = "x\nx\n";
    let err = fuzzy_replace_once(content, "x", "y").unwrap_err();
    assert!(err.contains("2 times"));
}

#[test]
fn replace_fuzzy_indent() {
    let content = "def main():\n    message = \"Hi\"\n";
    let old = "    message = \"Hi\"";
    let new = "    message = \"Hello\"";
    let result = fuzzy_replace_once(content, old, new).unwrap();
    assert!(result.contains("Hello"));
}

#[test]
fn replace_smart_quotes() {
    let content = "println!(\"hello\");\n";
    let old = "println!(“hello”);";
    let new = "println!(\"hi\");";
    let result = fuzzy_replace_once(content, old, new).unwrap();
    assert!(result.contains("\"hi\""));
}

#[test]
fn replace_preserves_trailing_newline() {
    let content = "a\nb\nc\n";
    let result = fuzzy_replace_once(content, "b", "B").unwrap();
    assert!(result.ends_with('\n'));
}

#[test]
fn replace_empty_old_errors() {
    let err = fuzzy_replace_once("x", "", "y").unwrap_err();
    assert!(err.contains("must not be empty"));
}

#[test]
fn replace_not_found_errors() {
    let err = fuzzy_replace_once("hello world", "xyz", "abc").unwrap_err();
    assert!(err.contains("not found"));
}