Skip to content

Commit

Permalink
Update tests
Browse files Browse the repository at this point in the history
  • Loading branch information
taiki-e committed Aug 31, 2020
1 parent aaf98e5 commit 6df1a4b
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 73 deletions.
1 change: 1 addition & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ jobs:
- 1.31.0
- 1.33.0
- 1.39.0
- 1.46.0
- stable
- beta
- nightly
Expand Down
3 changes: 3 additions & 0 deletions test_suite/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@ fn main() {
if minor >= 39 || nightly {
println!("cargo:rustc-cfg=has_const_vec_new");
}
if minor >= 46 || nightly {
println!("cargo:rustc-cfg=has_const_match");
}
if nightly {
println!("cargo:rustc-cfg=const_unstable");
}
Expand Down
124 changes: 51 additions & 73 deletions test_suite/tests/test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,66 +4,47 @@
pub mod version {
use const_fn::const_fn;

#[test]
fn test_variables() {
assert!(const_min("variables") == "variables");
assert_eq!(const_let("variables"), "variables");
assert_eq!(const_vec_new::<u8>(), Vec::new());
assert_eq!(A::const_unstable(const_vec_new::<u8>()), A(Vec::new()));
}

// min_const_fn (rust 1.31+)
// min_const_fn (1.31+)

#[const_fn("1.31")]
const fn const_min<T>(x: T) -> T {
x
}
const _CONST_MIN: &str = const_min("min_const_fn");

const CONST_MIN: &str = const_min("min_const_fn");

#[test]
fn test_const_min() {
assert!(CONST_MIN == "min_const_fn");
assert_eq!(const_let("min_const_fn"), "min_const_fn");
assert_eq!(const_vec_new::<u8>(), Vec::new());
}

// const_let (rust 1.33+)
// const_let (1.33+)

#[allow(clippy::let_and_return)]
#[const_fn("1.33")]
const fn const_let<T>(x: T) -> T {
let y = const_min(x);
y
}

#[rustversion::since(1.33)]
const CONST_LET: &str = const_let("const_let");

#[rustversion::since(1.33)]
#[test]
fn test_const_let() {
assert!(CONST_LET == "const_let");
assert_eq!(const_vec_new::<u8>(), Vec::new());
}
const _CONST_LET: &str = const_let("const_let");

// const_vec_new (rust 1.39+)
// const_vec_new (1.39+)

#[const_fn("1.39")]
const fn const_vec_new<T>() -> Vec<T> {
Vec::new()
}

#[rustversion::since(1.39)]
const CONST_VEC_NEW: Vec<u8> = const_vec_new();
const _: Vec<u8> = const_vec_new();

#[rustversion::since(1.39)]
#[test]
fn test_const_vec_new() {
assert_eq!(CONST_VEC_NEW, Vec::new());
// const_match, const_loop (1.46+)

#[const_fn("1.46")]
const fn const_match(x: u8) -> Option<u8> {
match x {
0 => None,
x => Some(x),
}
}
#[rustversion::since(1.46)]
const _: Option<u8> = const_match(1);

// const_fn (rust nightly)
// const_fn (nightly)

#[derive(Debug, Eq, PartialEq)]
pub struct A<T>(T);
Expand All @@ -74,74 +55,63 @@ pub mod version {
A(x)
}
}

#[rustversion::nightly]
pub const CONST_UNSTABLE: A<Vec<u8>> = A::const_unstable(const_vec_new());
}

pub mod cfg {
use const_fn::const_fn;
const _: A<Vec<u8>> = A::const_unstable(const_vec_new());

#[test]
fn test_variables() {
fn test() {
assert!(const_min("variables") == "variables");
assert_eq!(const_let("variables"), "variables");
assert_eq!(const_vec_new::<u8>(), Vec::new());
assert_eq!(const_match(1), Some(1));
assert_eq!(A::const_unstable(const_vec_new::<u8>()), A(Vec::new()));
}
}

pub mod cfg {
use const_fn::const_fn;

// min_const_fn (rust 1.31+)
// min_const_fn (1.31+)

#[const_fn(cfg(has_min_const_fn))]
const fn const_min<T>(x: T) -> T {
x
}
const _CONST_MIN: &str = const_min("min_const_fn");

pub const CONST_MIN: &str = const_min("min_const_fn");

#[test]
fn test_const_min() {
assert!(CONST_MIN == "min_const_fn");
assert_eq!(const_let("min_const_fn"), "min_const_fn");
assert_eq!(const_vec_new::<u8>(), Vec::new());
}

// const_let (rust 1.33+)
// const_let (1.33+)

#[allow(clippy::let_and_return)]
#[const_fn(cfg(has_const_let))]
const fn const_let<T>(x: T) -> T {
let y = const_min(x);
y
}

#[rustversion::since(1.33)]
const CONST_LET: &str = const_let("const_let");

#[rustversion::since(1.33)]
#[test]
fn test_const_let() {
assert!(CONST_LET == "const_let");
assert_eq!(const_vec_new::<u8>(), Vec::new());
}
const _CONST_LET: &str = const_let("const_let");

// const_vec_new (rust 1.39+)
// const_vec_new (1.39+)

#[const_fn(cfg(has_const_vec_new))]
const fn const_vec_new<T>() -> Vec<T> {
Vec::new()
}

#[rustversion::since(1.39)]
const CONST_VEC_NEW: Vec<u8> = const_vec_new();
const _: Vec<u8> = const_vec_new();

#[rustversion::since(1.39)]
#[test]
fn test_const_vec_new() {
assert_eq!(CONST_VEC_NEW, Vec::new());
// const_match, const_loop (1.46+)

#[const_fn(cfg(has_const_match))]
const fn const_match(x: u8) -> Option<u8> {
match x {
0 => None,
x => Some(x),
}
}
#[rustversion::since(1.46)]
const _: Option<u8> = const_match(1);

// const_fn (rust nightly)
// const_fn (nightly)

#[derive(Debug, Eq, PartialEq)]
pub struct A<T>(T);
Expand All @@ -152,7 +122,15 @@ pub mod cfg {
A(x)
}
}

#[rustversion::nightly]
pub const CONST_UNSTABLE: A<Vec<u8>> = A::const_unstable(const_vec_new());
const _: A<Vec<u8>> = A::const_unstable(const_vec_new());

#[test]
fn test() {
assert!(const_min("variables") == "variables");
assert_eq!(const_let("variables"), "variables");
assert_eq!(const_vec_new::<u8>(), Vec::new());
assert_eq!(const_match(1), Some(1));
assert_eq!(A::const_unstable(const_vec_new::<u8>()), A(Vec::new()));
}
}

0 comments on commit 6df1a4b

Please sign in to comment.