From b4788a739b5dd040a969135bf46dc633c39fce16 Mon Sep 17 00:00:00 2001 From: Matthew Kuo Date: Wed, 4 Mar 2020 01:33:32 -0600 Subject: [PATCH] test(pattern): harden tests for or-patterns with slice-patterns Some of the nested OR paths were being missed --- src/test/ui/or-patterns/slice-patterns.rs | 14 ++++++++++++-- .../or-patterns-slice-patterns.rs | 17 +++++++++++++++-- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/test/ui/or-patterns/slice-patterns.rs b/src/test/ui/or-patterns/slice-patterns.rs index 2f2e865d985..2526f048655 100644 --- a/src/test/ui/or-patterns/slice-patterns.rs +++ b/src/test/ui/or-patterns/slice-patterns.rs @@ -20,8 +20,8 @@ enum Test { fn test(foo: &[Option]) -> MatchArm { match foo { - [.., Some(Test::Foo | Test::Qux)] => MatchArm::Arm(0), - [Some(Test::Foo), .., Some(Test::Bar | Test::Baz)] => MatchArm::Arm(1), + [.., Some(Test::Qux | Test::Foo)] => MatchArm::Arm(0), + [Some(Test::Foo), .., Some(Test::Baz | Test::Bar)] => MatchArm::Arm(1), [.., Some(Test::Bar | Test::Baz), _] => MatchArm::Arm(2), _ => MatchArm::Wild, } @@ -35,8 +35,18 @@ fn main() { Some(Test::Qux), ]; + // path 1a assert_eq!(test(&foo), MatchArm::Arm(0)); + // path 1b + assert_eq!(test(&[Some(Test::Bar), Some(Test::Foo)]), MatchArm::Arm(0)); + // path 2a assert_eq!(test(&foo[..3]), MatchArm::Arm(1)); + // path 2b + assert_eq!(test(&[Some(Test::Foo), Some(Test::Foo), Some(Test::Bar)]), MatchArm::Arm(1)); + // path 3a assert_eq!(test(&foo[1..3]), MatchArm::Arm(2)); + // path 3b + assert_eq!(test(&[Some(Test::Bar), Some(Test::Baz), Some(Test::Baz), Some(Test::Bar)]), MatchArm::Arm(2)); + // path 4 assert_eq!(test(&foo[4..]), MatchArm::Wild); } diff --git a/src/test/ui/pattern/bindings-after-at/or-patterns-slice-patterns.rs b/src/test/ui/pattern/bindings-after-at/or-patterns-slice-patterns.rs index 154df74cc33..65c2b3741b3 100644 --- a/src/test/ui/pattern/bindings-after-at/or-patterns-slice-patterns.rs +++ b/src/test/ui/pattern/bindings-after-at/or-patterns-slice-patterns.rs @@ -21,7 +21,7 @@ enum Test { fn test(foo: &[Option]) -> MatchArm { match foo { - bar @ [Some(Test::Foo), .., Some(Test::Foo | Test::Qux)] => { + bar @ [Some(Test::Foo), .., Some(Test::Qux | Test::Foo)] => { assert_eq!(bar, foo); MatchArm::Arm(0) @@ -36,8 +36,21 @@ fn test(foo: &[Option]) -> MatchArm { } fn main() { - let foo = vec![Some(Test::Foo), Some(Test::Bar), Some(Test::Baz), Some(Test::Qux)]; + let foo = vec![ + Some(Test::Foo), + Some(Test::Bar), + Some(Test::Baz), + Some(Test::Qux), + ]; + + // path 1a assert_eq!(test(&foo), MatchArm::Arm(0)); + // path 1b + assert_eq!(test(&[Some(Test::Foo), Some(Test::Bar), Some(Test::Foo)]), MatchArm::Arm(0)); + // path 2a assert_eq!(test(&foo[..3]), MatchArm::Arm(1)); + // path 2b + assert_eq!(test(&[Some(Test::Bar), Some(Test::Qux), Some(Test::Baz)]), MatchArm::Arm(1)); + // path 3 assert_eq!(test(&foo[1..2]), MatchArm::Wild); }