syncweb-core 0.1.1-alpha.7

delay-tolerant web surfing
Documentation
use std::collections::HashMap;

use syncweb_core::sort::{SortConfig, SortCriterion, SortEntry, Sorter};

#[test]
fn test_sort_with_peer_enrichment() {
    let mut entries = vec![
        SortEntry::new("a.txt").with_folder("f").with_size(100),
        SortEntry::new("b.txt").with_folder("f").with_size(200),
    ];
    let enrichment: HashMap<String, usize> = [("a.txt".to_string(), 5), ("b.txt".to_string(), 1)]
        .into_iter()
        .collect();
    let sorter = Sorter::new(SortConfig::default());
    sorter.enrich_peers(&mut entries, &enrichment);
    assert_eq!(entries.first().map(|e| e.peers), Some(5));
    assert_eq!(entries.get(1).map(|e| e.peers), Some(1));
}

#[test]
fn test_sort_by_peers_with_enrichment() {
    let mut entries = vec![
        SortEntry::new("a.txt").with_folder("f"),
        SortEntry::new("b.txt").with_folder("f"),
    ];
    let enrichment: HashMap<String, usize> = [("a.txt".to_string(), 1), ("b.txt".to_string(), 10)]
        .into_iter()
        .collect();
    let mut config = SortConfig::default();
    config.criteria = vec![(SortCriterion::Peers, true)];
    let sorter = Sorter::new(config);
    sorter.enrich_peers(&mut entries, &enrichment);
    sorter.sort(&mut entries);
    assert_eq!(
        entries.first().map(|e| e.path.clone()),
        Some(std::path::PathBuf::from("b.txt"))
    );
    assert_eq!(
        entries.get(1).map(|e| e.path.clone()),
        Some(std::path::PathBuf::from("a.txt"))
    );
}

#[test]
fn test_sort_by_niche_with_enrichment() {
    let mut entries = vec![
        SortEntry::new("popular.txt").with_folder("f"),
        SortEntry::new("rare.txt").with_folder("f"),
    ];
    let enrichment: HashMap<String, usize> = [("popular.txt".to_string(), 100), ("rare.txt".to_string(), 2)]
        .into_iter()
        .collect();
    let mut config = SortConfig::default();
    config.criteria = vec![(SortCriterion::Niche, true)];
    config.niche = 3;
    let sorter = Sorter::new(config);
    sorter.enrich_peers(&mut entries, &enrichment);
    sorter.enrich_niche(&mut entries);
    sorter.sort(&mut entries);
    assert_eq!(
        entries.first().map(|e| e.path.clone()),
        Some(std::path::PathBuf::from("rare.txt"))
    );
    assert_eq!(
        entries.get(1).map(|e| e.path.clone()),
        Some(std::path::PathBuf::from("popular.txt"))
    );
}

#[test]
fn test_enrich_frequency() {
    let mut entries = vec![SortEntry::new("a.txt"), SortEntry::new("b.txt")];
    let freq_map: HashMap<String, u64> = [("a.txt".to_string(), 42), ("b.txt".to_string(), 7)]
        .into_iter()
        .collect();
    let sorter = Sorter::new(SortConfig::default());
    sorter.enrich_frequency(&mut entries, &freq_map);
    assert_eq!(entries.first().map(|e| e.frequency), Some(42));
    assert_eq!(entries.get(1).map(|e| e.frequency), Some(7));
}

#[test]
fn test_enrich_missing_path_defaults_to_zero() {
    let mut entries = vec![SortEntry::new("unknown.txt")];
    let enrichment: HashMap<String, usize> = HashMap::new();
    let sorter = Sorter::new(SortConfig::default());
    sorter.enrich_peers(&mut entries, &enrichment);
    assert_eq!(entries.first().map(|e| e.peers), Some(0));
}