fn now() -> std::time::SystemTime {
std::time::SystemTime::UNIX_EPOCH + std::time::Duration::from_secs(1_700_000_000)
}
#[test]
fn none_slow() {
let m = crate::Match {
none: vec![
crate::Match {
tracker_msg: Some(regex::RegexSet::new([r"^foo$"]).unwrap()),
..Default::default()
},
crate::Match {
tracker_url: Some(regex::RegexSet::new([r"^http://bar/.*$"]).unwrap()),
..Default::default()
},
],
..Default::default()
};
let t = crate::Torrent::zero();
assert_eq!(m.match_fast(now(), &t), None);
assert!(!m.match_slow(&t, &[
crate::Tracker {
msg: "foo".into(),
url: "".into(),
},
]));
assert!(!m.match_slow(&t, &[
crate::Tracker {
msg: "".into(),
url: "http://bar/x".into(),
},
]));
assert!(!m.match_slow(&t, &[
crate::Tracker {
msg: "foo".into(),
url: "http://bar/x".into(),
},
]));
assert!(m.match_slow(&t, &[
crate::Tracker {
msg: "x".into(),
url: "http://y/".into(),
},
]));
}
#[test]
fn any_slow() {
let m = crate::Match {
any: Some(vec![
crate::Match {
tracker_msg: Some(regex::RegexSet::new([r"^alpha$"]).unwrap()),
..Default::default()
},
crate::Match {
tracker_url: Some(regex::RegexSet::new([r"^http://beta/.*$"]).unwrap()),
..Default::default()
},
]),
..Default::default()
};
let t = crate::Torrent::zero();
assert_eq!(m.match_fast(now(), &t), None);
assert!(m.match_slow(&t, &[
crate::Tracker {
msg: "alpha".into(),
url: "".into(),
},
]));
assert!(m.match_slow(&t, &[
crate::Tracker {
msg: "".into(),
url: "http://beta/x".into(),
},
]));
assert!(m.match_slow(&t, &[
crate::Tracker {
msg: "alpha".into(),
url: "http://beta/x".into(),
},
]));
assert!(!m.match_slow(&t, &[
crate::Tracker {
msg: "x".into(),
url: "http://y/".into(),
},
]));
}
#[test]
fn any_empty() {
let m = crate::Match {
any: Some(vec![]),
..Default::default()
};
let t = crate::Torrent::zero();
assert_eq!(m.match_fast(now(), &t), Some(false));
assert!(!m.match_slow(&t, &[]));
}
#[test]
fn any_fast() {
let m = crate::Match {
any: Some(vec![
crate::Match {
is_private: Some(true),
..Default::default()
},
crate::Match {
tracker_msg: Some(regex::RegexSet::new([r"^does-not-matter$"]).unwrap()),
..Default::default()
},
]),
..Default::default()
};
let t = crate::Torrent {
private: Some(true),
..crate::Torrent::zero()
};
assert_eq!(m.match_fast(now(), &t), Some(true));
assert!(m.match_slow(&t, &[]));
}
#[test]
fn none_fast() {
let m = crate::Match {
none: vec![
crate::Match {
is_private: Some(true),
..Default::default()
},
crate::Match {
tracker_msg: Some(regex::RegexSet::new([r"^whatever$"]).unwrap()),
..Default::default()
},
],
..Default::default()
};
let t = crate::Torrent {
private: Some(true),
..crate::Torrent::zero()
};
assert_eq!(m.match_fast(now(), &t), Some(false));
assert!(!m.match_slow(&t, &[]));
}
#[test]
fn any_none_slow() {
let m = crate::Match {
any: Some(vec![
crate::Match {
tracker_msg: Some(regex::RegexSet::new([r"^linux$"]).unwrap()),
..Default::default()
},
crate::Match {
tracker_msg: Some(regex::RegexSet::new([r"^llm$"]).unwrap()),
..Default::default()
},
]),
none: vec![crate::Match {
tracker_msg: Some(regex::RegexSet::new([r"^.*preview.*$"]).unwrap()),
..Default::default()
}],
..Default::default()
};
let t = crate::Torrent::zero();
assert_eq!(m.match_fast(now(), &t), None);
assert!(m.match_slow(&t, &[
crate::Tracker {
msg: "llm".into(),
url: "".into(),
},
]));
assert!(!m.match_slow(&t, &[
crate::Tracker {
msg: "llm".into(),
url: "".into(),
},
crate::Tracker {
msg: "preview-build".into(),
url: "".into(),
},
]));
assert!(!m.match_slow(&t, &[
crate::Tracker {
msg: "datasets".into(),
url: "".into(),
},
]));
}