summaryrefslogtreecommitdiffstats
path: root/third_party/rust/rustc_version/tests/all.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/rustc_version/tests/all.rs')
-rw-r--r--third_party/rust/rustc_version/tests/all.rs456
1 files changed, 456 insertions, 0 deletions
diff --git a/third_party/rust/rustc_version/tests/all.rs b/third_party/rust/rustc_version/tests/all.rs
new file mode 100644
index 0000000000..c3cff7048a
--- /dev/null
+++ b/third_party/rust/rustc_version/tests/all.rs
@@ -0,0 +1,456 @@
+#![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: 65d5c083377645a115c4ac23a620d3581b9562b6
+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: 9a92aaf19a64603b02b4130fe52958cc12488900
+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: 5d994d8b7e482e87467d4a521911477bd8284ce3
+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: 18bf6b4f01a6feaf7259ba7cdae58031af1b7b39
+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: 4253153db205251f72ea4493687a31e04a2a8ca0
+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!();
+
+}
+*/