use jayver::{is_valid, parse, today, Version, VersionReq};
#[test]
fn test_public_api_workflow() {
let version_str = "25.16.3";
assert!(is_valid(version_str));
let version = parse(version_str).unwrap();
assert_eq!(version.year, 25);
assert_eq!(version.week, 16);
assert_eq!(version.patch, 3);
let today_version = today();
assert!(today_version.week >= 1 && today_version.week <= 53);
assert_eq!(today_version.patch, 0);
let base_version = Version::parse("25.10.0").unwrap();
let req = VersionReq::parse(">=25.10.0").unwrap();
assert!(req.matches(&base_version));
let mut updated = base_version;
updated.increment_patch();
assert!(req.matches(&updated));
let mut week_end = Version::parse("25.12.0").unwrap(); week_end.next_week().unwrap();
assert!(req.matches(&week_end));
}
#[test]
fn test_requirement_patterns() {
let v = Version::parse("25.10.5").unwrap();
let exact = VersionReq::parse("=25.10.5").unwrap();
assert!(exact.matches(&v));
let compatible = VersionReq::parse("~>25.10.0").unwrap();
assert!(compatible.matches(&v));
let req1 = VersionReq::parse(">=25.10.0").unwrap();
let req2 = VersionReq::parse("<25.11.0").unwrap();
assert!(req1.matches(&v));
assert!(req2.matches(&v));
let any_req = VersionReq::any([">25.20.0", "<25.5.0"]).unwrap();
assert!(!any_req.matches(&v));
let early = Version::parse("25.4.0").unwrap();
assert!(any_req.matches(&early));
let late = Version::parse("25.30.0").unwrap();
assert!(any_req.matches(&late)); }
#[test]
fn test_year_boundaries() {
let mut v = Version::parse("20.52.0").unwrap(); v.next_week().unwrap();
assert_eq!(v.year, 20);
assert_eq!(v.week, 53);
v.next_week().unwrap();
assert_eq!(v.year, 21);
assert_eq!(v.week, 1);
let req = VersionReq::parse(">=20.52.0").unwrap();
assert!(req.matches(&v));
}
#[test]
fn test_empty_requirements() {
let req = VersionReq::parse("").unwrap();
let v = Version::parse("25.10.0").unwrap();
assert!(req.matches(&v));
let req = VersionReq::parse("*").unwrap();
assert!(req.matches(&v));
}