#! [allow(clippy::match_like_matches_macro)]
use std::process::Command;
use rustc_version::{
version, version_meta, version_meta_for, Channel, Error, LlvmVersion, LlvmVersionParseError,
Version, VersionMeta,
};
#[ test]
fn rustc_error() {
let mut cmd = Command::new("rustc" );
cmd.arg("--FOO" );
let stderr = match VersionMeta::for_command(cmd) {
Err(Error::CommandError { stdout: _, stderr }) => stderr,
_ => panic!("command error expected" ),
};
assert_eq!(stderr, "error: Unrecognized option: \'FOO\'\n\n" );
}
#[ test]
fn smoketest() {
let v = version().unwrap();
assert!(v.major >= 1 );
let v = version_meta().unwrap();
assert!(v.semver.major >= 1 );
assert!(version().unwrap() >= Version::parse("1.0.0" ).unwrap());
}
#[ test]
fn parse_1_0_0() {
let version = version_meta_for(
"rustc 1.0.0 (a59de37e9 2015-05-13) (built 2015-05-14)
binary: rustc
commit-hash: a59de37e99060162a2674e3ff45409ac73595c0e
commit-date: 2015 -05 -13
build-date: 2015 -05 -14
host: x86_64-unknown-linux-gnu
release: 1 .0 .0 ",
)
.unwrap();
assert_eq!(version.semver, Version::parse("1.0.0" ).unwrap());
assert_eq!(
version.commit_hash,
Some("a59de37e99060162a2674e3ff45409ac73595c0e" .into())
);
assert_eq!(version.commit_date, Some("2015-05-13" .into()));
assert_eq!(version.build_date, Some("2015-05-14" .into()));
assert_eq!(version.channel, Channel::Stable);
assert_eq!(version.host, "x86_64-unknown-linux-gnu" );
assert_eq!(
version.short_version_string,
"rustc 1.0.0 (a59de37e9 2015-05-13) (built 2015-05-14)"
);
assert_eq!(version.llvm_version, None);
}
#[ test]
fn parse_unknown() {
let version = version_meta_for(
"rustc 1.3.0
binary: rustc
commit-hash: unknown
commit-date: unknown
host: x86_64-unknown-linux-gnu
release: 1 .3 .0 ",
)
.unwrap();
assert_eq!(version.semver, Version::parse("1.3.0" ).unwrap());
assert_eq!(version.commit_hash, None);
assert_eq!(version.commit_date, None);
assert_eq!(version.channel, Channel::Stable);
assert_eq!(version.host, "x86_64-unknown-linux-gnu" );
assert_eq!(version.short_version_string, "rustc 1.3.0" );
assert_eq!(version.llvm_version, None);
}
#[ test]
fn parse_nightly() {
let version = version_meta_for(
"rustc 1.5.0-nightly (65d5c0833 2015-09-29)
binary: rustc
commit-hash: 65 d5c083377645a115c4ac23a620d3581b9562b6
commit-date: 2015 -09 -29
host: x86_64-unknown-linux-gnu
release: 1 .5 .0 -nightly",
)
.unwrap();
assert_eq!(version.semver, Version::parse("1.5.0-nightly" ).unwrap());
assert_eq!(
version.commit_hash,
Some("65d5c083377645a115c4ac23a620d3581b9562b6" .into())
);
assert_eq!(version.commit_date, Some("2015-09-29" .into()));
assert_eq!(version.channel, Channel::Nightly);
assert_eq!(version.host, "x86_64-unknown-linux-gnu" );
assert_eq!(
version.short_version_string,
"rustc 1.5.0-nightly (65d5c0833 2015-09-29)"
);
assert_eq!(version.llvm_version, None);
}
#[ test]
fn parse_stable() {
let version = version_meta_for(
"rustc 1.3.0 (9a92aaf19 2015-09-15)
binary: rustc
commit-hash: 9 a92aaf19a64603b02b4130fe52958cc12488900
commit-date: 2015 -09 -15
host: x86_64-unknown-linux-gnu
release: 1 .3 .0 ",
)
.unwrap();
assert_eq!(version.semver, Version::parse("1.3.0" ).unwrap());
assert_eq!(
version.commit_hash,
Some("9a92aaf19a64603b02b4130fe52958cc12488900" .into())
);
assert_eq!(version.commit_date, Some("2015-09-15" .into()));
assert_eq!(version.channel, Channel::Stable);
assert_eq!(version.host, "x86_64-unknown-linux-gnu" );
assert_eq!(
version.short_version_string,
"rustc 1.3.0 (9a92aaf19 2015-09-15)"
);
assert_eq!(version.llvm_version, None);
}
#[ test]
fn parse_1_16_0_nightly() {
let version = version_meta_for(
"rustc 1.16.0-nightly (5d994d8b7 2017-01-05)
binary: rustc
commit-hash: 5 d994d8b7e482e87467d4a521911477bd8284ce3
commit-date: 2017 -01 -05
host: x86_64-unknown-linux-gnu
release: 1 .16 .0 -nightly
LLVM version: 3 .9 ",
)
.unwrap();
assert_eq!(version.semver, Version::parse("1.16.0-nightly" ).unwrap());
assert_eq!(
version.commit_hash,
Some("5d994d8b7e482e87467d4a521911477bd8284ce3" .into())
);
assert_eq!(version.commit_date, Some("2017-01-05" .into()));
assert_eq!(version.channel, Channel::Nightly);
assert_eq!(version.host, "x86_64-unknown-linux-gnu" );
assert_eq!(
version.short_version_string,
"rustc 1.16.0-nightly (5d994d8b7 2017-01-05)"
);
assert_eq!(
version.llvm_version,
Some(LlvmVersion { major: 3 , minor: 9 })
);
}
#[ test]
fn parse_1_47_0_stable() {
let version = version_meta_for(
"rustc 1.47.0 (18bf6b4f0 2020-10-07)
binary: rustc
commit-hash: 18 bf6b4f01a6feaf7259ba7cdae58031af1b7b39
commit-date: 2020 -10 -07
host: powerpc64le-unknown-linux-gnu
release: 1 .47 .0
LLVM version: 11 .0 ",
)
.unwrap();
assert_eq!(version.semver, Version::parse("1.47.0" ).unwrap());
assert_eq!(
version.commit_hash,
Some("18bf6b4f01a6feaf7259ba7cdae58031af1b7b39" .into())
);
assert_eq!(version.commit_date, Some("2020-10-07" .into()));
assert_eq!(version.channel, Channel::Stable);
assert_eq!(version.host, "powerpc64le-unknown-linux-gnu" );
assert_eq!(
version.short_version_string,
"rustc 1.47.0 (18bf6b4f0 2020-10-07)"
);
assert_eq!(
version.llvm_version,
Some(LlvmVersion {
major: 11 ,
minor: 0 ,
})
);
}
#[ test]
fn parse_llvm_micro() {
let version = version_meta_for(
"rustc 1.51.0-nightly (4253153db 2021-01-17)
binary: rustc
commit-hash: 4253153 db205251f72ea4493687a31e04a2a8ca0
commit-date: 2021 -01 -17
host: x86_64-pc-windows-msvc
release: 1 .51 .0 -nightly
LLVM version: 11 .0 .1 ",
)
.unwrap();
assert_eq!(version.semver, Version::parse("1.51.0-nightly" ).unwrap());
assert_eq!(
version.commit_hash.unwrap(),
"4253153db205251f72ea4493687a31e04a2a8ca0"
);
assert_eq!(version.commit_date.unwrap(), "2021-01-17" );
assert_eq!(version.host, "x86_64-pc-windows-msvc" );
assert_eq!(
version.short_version_string,
"rustc 1.51.0-nightly (4253153db 2021-01-17)"
);
assert_eq!(
version.llvm_version,
Some(LlvmVersion {
major: 11 ,
minor: 0
})
);
}
#[ test]
fn parse_debian_buster() {
let version = version_meta_for(
"rustc 1.41.1
binary: rustc
commit-hash: unknown
commit-date: unknown
host: powerpc64le-unknown-linux-gnu
release: 1 .41 .1
LLVM version: 7 .0 ",
)
.unwrap();
assert_eq!(version.semver, Version::parse("1.41.1" ).unwrap());
assert_eq!(version.commit_hash, None);
assert_eq!(version.commit_date, None);
assert_eq!(version.channel, Channel::Stable);
assert_eq!(version.host, "powerpc64le-unknown-linux-gnu" );
assert_eq!(version.short_version_string, "rustc 1.41.1" );
assert_eq!(
version.llvm_version,
Some(LlvmVersion { major: 7 , minor: 0 })
);
}
#[ test]
fn parse_termux() {
let version = version_meta_for(
"rustc 1.46.0
binary: rustc
commit-hash: unknown
commit-date: unknown
host: aarch64-linux-android
release: 1 .46 .0
LLVM version: 10 .0 ",
)
.unwrap();
assert_eq!(version.semver, Version::parse("1.46.0" ).unwrap());
assert_eq!(version.commit_hash, None);
assert_eq!(version.commit_date, None);
assert_eq!(version.channel, Channel::Stable);
assert_eq!(version.host, "aarch64-linux-android" );
assert_eq!(version.short_version_string, "rustc 1.46.0" );
assert_eq!(
version.llvm_version,
Some(LlvmVersion {
major: 10 ,
minor: 0 ,
})
);
}
#[ test]
fn parse_llvm_version_empty() {
let res: Result<LlvmVersion, _> = "" .parse();
assert!(match res {
Err(LlvmVersionParseError::ParseIntError(_)) => true ,
_ => false ,
});
}
#[ test]
fn parse_llvm_version_invalid_char() {
let res: Result<LlvmVersion, _> = "A" .parse();
assert!(match res {
Err(LlvmVersionParseError::ParseIntError(_)) => true ,
_ => false ,
});
}
#[ test]
fn parse_llvm_version_overflow() {
let res: Result<LlvmVersion, _> = "9999999999999999999999999999999" .parse();
assert!(match res {
Err(LlvmVersionParseError::ParseIntError(_)) => true ,
_ => false ,
});
}
#[ test]
fn parse_llvm_version_leading_zero_on_zero() {
let res: Result<LlvmVersion, _> = "00" .parse();
assert!(match res {
Err(LlvmVersionParseError::ComponentMustNotHaveLeadingZeros) => true ,
_ => false ,
});
}
#[ test]
fn parse_llvm_version_leading_zero_on_nonzero() {
let res: Result<LlvmVersion, _> = "01" .parse();
assert!(match res {
Err(LlvmVersionParseError::ComponentMustNotHaveLeadingZeros) => true ,
_ => false ,
});
}
#[ test]
fn parse_llvm_version_4_components() {
let res: Result<LlvmVersion, _> = "4.0.0.0" .parse();
assert!(match res {
Err(LlvmVersionParseError::TooManyComponents) => true ,
_ => false ,
});
}
#[ test]
fn parse_llvm_version_component_sign_plus() {
let res: Result<LlvmVersion, _> = "1.+3" .parse();
assert!(match res {
Err(LlvmVersionParseError::ComponentMustNotHaveSign) => true ,
_ => false ,
});
}
#[ test]
fn parse_llvm_version_component_sign_minus() {
let res: Result<LlvmVersion, _> = "1.-3" .parse();
assert!(match res {
Err(LlvmVersionParseError::ComponentMustNotHaveSign) => true ,
_ => false ,
});
}
#[ test]
fn parse_llvm_version_3() {
let res: Result<LlvmVersion, _> = "3" .parse();
assert!(match res {
Err(LlvmVersionParseError::MinorVersionRequiredBefore4) => true ,
_ => false ,
});
}
#[ test]
fn parse_llvm_version_5() {
let v: LlvmVersion = "5" .parse().unwrap();
assert_eq!(v, LlvmVersion { major: 5 , minor: 0 });
}
#[ test]
fn parse_llvm_version_5_0() {
let v: LlvmVersion = "5.0" .parse().unwrap();
assert_eq!(v, LlvmVersion { major: 5 , minor: 0 });
}
#[ test]
fn parse_llvm_version_4_0() {
let v: LlvmVersion = "4.0" .parse().unwrap();
assert_eq!(v, LlvmVersion { major: 4 , minor: 0 });
}
#[ test]
fn parse_llvm_version_3_0() {
let v: LlvmVersion = "3.0" .parse().unwrap();
assert_eq!(v, LlvmVersion { major: 3 , minor: 0 });
}
#[ test]
fn parse_llvm_version_3_9() {
let v: LlvmVersion = "3.9" .parse().unwrap();
assert_eq!(v, LlvmVersion { major: 3 , minor: 9 });
}
#[ test]
fn parse_llvm_version_11_0() {
let v: LlvmVersion = "11.0" .parse().unwrap();
assert_eq!(
v,
LlvmVersion {
major: 11 ,
minor: 0
}
);
}
#[ test]
fn parse_llvm_version_11() {
let v: LlvmVersion = "11" .parse().unwrap();
assert_eq!(
v,
LlvmVersion {
major: 11 ,
minor: 0
}
);
}
#[ test]
fn test_llvm_version_comparison() {
// check that field order is correct
assert!(LlvmVersion { major: 3 , minor: 9 } < LlvmVersion { major: 4 , minor: 0 });
}
/*
# [ test ]
fn version_matches_replacement ( ) {
let f = | s1 : & str , s2 : & str | {
let a = Version : : parse ( s1 ) . unwrap ( ) ;
let b = Version : : parse ( s2 ) . unwrap ( ) ;
println ! ( " { } < = { } : { } " , s1 , s2 , a < = b ) ;
} ;
println ! ( ) ;
f ( " 1 . 5 . 0 " , " 1 . 5 . 0 " ) ;
f ( " 1 . 5 . 0 - nightly " , " 1 . 5 . 0 " ) ;
f ( " 1 . 5 . 0 " , " 1 . 5 . 0 - nightly " ) ;
f ( " 1 . 5 . 0 - nightly " , " 1 . 5 . 0 - nightly " ) ;
f ( " 1 . 5 . 0 " , " 1 . 6 . 0 " ) ;
f ( " 1 . 5 . 0 - nightly " , " 1 . 6 . 0 " ) ;
f ( " 1 . 5 . 0 " , " 1 . 6 . 0 - nightly " ) ;
f ( " 1 . 5 . 0 - nightly " , " 1 . 6 . 0 - nightly " ) ;
panic ! ( ) ;
}
*/
Messung V0.5 in Prozent C=81 H=93 G=86
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-06-19)
¤
*© Formatika GbR, Deutschland