mirror of
https://github.com/rust-lang/rust.git
synced 2024-12-10 15:45:16 +00:00
166 lines
4.0 KiB
Rust
166 lines
4.0 KiB
Rust
// run-pass
|
|
#![allow(dead_code)]
|
|
// compile-flags: -g
|
|
// ignore-asmjs wasm2js does not support source maps yet
|
|
|
|
#[derive(PartialEq, Eq)]
|
|
struct NewBool(bool);
|
|
|
|
#[derive(PartialEq, Eq)]
|
|
enum Direction {
|
|
North,
|
|
East,
|
|
South,
|
|
West
|
|
}
|
|
|
|
#[derive(PartialEq, Eq)]
|
|
struct Foo {
|
|
bar: Option<Direction>,
|
|
baz: NewBool
|
|
}
|
|
|
|
#[derive(PartialEq, Eq)]
|
|
enum EnumWithStructVariants {
|
|
Variant1(bool),
|
|
Variant2 {
|
|
dir: Direction
|
|
}
|
|
}
|
|
|
|
const TRUE_TRUE: (bool, bool) = (true, true);
|
|
const NONE: Option<Direction> = None;
|
|
const EAST: Direction = Direction::East;
|
|
const NEW_FALSE: NewBool = NewBool(false);
|
|
const STATIC_FOO: Foo = Foo { bar: Some(Direction::South), baz: NEW_FALSE };
|
|
const VARIANT2_NORTH: EnumWithStructVariants = EnumWithStructVariants::Variant2 {
|
|
dir: Direction::North };
|
|
|
|
pub mod glfw {
|
|
#[derive(Copy, Clone, PartialEq, Eq)]
|
|
pub struct InputState(usize);
|
|
|
|
pub const RELEASE : InputState = InputState(0);
|
|
pub const PRESS : InputState = InputState(1);
|
|
pub const REPEAT : InputState = InputState(2);
|
|
}
|
|
|
|
fn issue_6533() {
|
|
fn action_to_str(state: glfw::InputState) -> &'static str {
|
|
use glfw::{RELEASE, PRESS, REPEAT};
|
|
match state {
|
|
RELEASE => { "Released" }
|
|
PRESS => { "Pressed" }
|
|
REPEAT => { "Repeated" }
|
|
_ => { "Unknown" }
|
|
}
|
|
}
|
|
|
|
assert_eq!(action_to_str(glfw::RELEASE), "Released");
|
|
assert_eq!(action_to_str(glfw::PRESS), "Pressed");
|
|
assert_eq!(action_to_str(glfw::REPEAT), "Repeated");
|
|
}
|
|
|
|
fn issue_13626() {
|
|
const VAL: [u8; 1] = [0];
|
|
match [1] {
|
|
VAL => unreachable!(),
|
|
_ => ()
|
|
}
|
|
}
|
|
|
|
fn issue_14576() {
|
|
type Foo = (i32, i32);
|
|
const ON: Foo = (1, 1);
|
|
const OFF: Foo = (0, 0);
|
|
|
|
match (1, 1) {
|
|
OFF => unreachable!(),
|
|
ON => (),
|
|
_ => unreachable!()
|
|
}
|
|
|
|
#[derive(PartialEq, Eq)]
|
|
enum C { D = 3, E = 4 }
|
|
const F : C = C::D;
|
|
|
|
assert_eq!(match C::D { F => 1, _ => 2, }, 1);
|
|
|
|
// test gaps
|
|
#[derive(PartialEq, Eq)]
|
|
enum G { H = 3, I = 5 }
|
|
const K : G = G::I;
|
|
|
|
assert_eq!(match G::I { K => 1, _ => 2, }, 1);
|
|
}
|
|
|
|
fn issue_13731() {
|
|
#[derive(PartialEq, Eq)]
|
|
enum A { AA(()) }
|
|
const B: A = A::AA(());
|
|
|
|
match A::AA(()) {
|
|
B => ()
|
|
}
|
|
}
|
|
|
|
fn issue_15393() {
|
|
#![allow(dead_code)]
|
|
#[derive(PartialEq, Eq)]
|
|
struct Flags {
|
|
bits: usize
|
|
}
|
|
|
|
const FOO: Flags = Flags { bits: 0x01 };
|
|
const BAR: Flags = Flags { bits: 0x02 };
|
|
match (Flags { bits: 0x02 }) {
|
|
FOO => unreachable!(),
|
|
BAR => (),
|
|
_ => unreachable!()
|
|
}
|
|
}
|
|
|
|
fn main() {
|
|
assert_eq!(match (true, false) {
|
|
TRUE_TRUE => 1,
|
|
(false, false) => 2,
|
|
(false, true) => 3,
|
|
(true, false) => 4
|
|
}, 4);
|
|
|
|
assert_eq!(match Some(Some(Direction::North)) {
|
|
Some(NONE) => 1,
|
|
Some(Some(Direction::North)) => 2,
|
|
Some(Some(EAST)) => 3,
|
|
Some(Some(Direction::South)) => 4,
|
|
Some(Some(Direction::West)) => 5,
|
|
None => 6
|
|
}, 2);
|
|
|
|
assert_eq!(match (Foo { bar: Some(Direction::West), baz: NewBool(true) }) {
|
|
Foo { bar: None, baz: NewBool(true) } => 1,
|
|
Foo { bar: NONE, baz: NEW_FALSE } => 2,
|
|
STATIC_FOO => 3,
|
|
Foo { bar: _, baz: NEW_FALSE } => 4,
|
|
Foo { bar: Some(Direction::West), baz: NewBool(true) } => 5,
|
|
Foo { bar: Some(Direction::South), baz: NewBool(true) } => 6,
|
|
Foo { bar: Some(EAST), .. } => 7,
|
|
Foo { bar: Some(Direction::North), baz: NewBool(true) } => 8
|
|
}, 5);
|
|
|
|
assert_eq!(match (EnumWithStructVariants::Variant2 { dir: Direction::North }) {
|
|
EnumWithStructVariants::Variant1(true) => 1,
|
|
EnumWithStructVariants::Variant1(false) => 2,
|
|
EnumWithStructVariants::Variant2 { dir: Direction::West } => 3,
|
|
VARIANT2_NORTH => 4,
|
|
EnumWithStructVariants::Variant2 { dir: Direction::South } => 5,
|
|
EnumWithStructVariants::Variant2 { dir: Direction::East } => 6
|
|
}, 4);
|
|
|
|
issue_6533();
|
|
issue_13626();
|
|
issue_13731();
|
|
issue_14576();
|
|
issue_15393();
|
|
}
|