summaryrefslogtreecommitdiffstats
path: root/tests/ui/closures/2229_closure_analysis/run_pass/tuple-struct-pattern-matching-with-methods.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/closures/2229_closure_analysis/run_pass/tuple-struct-pattern-matching-with-methods.rs')
-rw-r--r--tests/ui/closures/2229_closure_analysis/run_pass/tuple-struct-pattern-matching-with-methods.rs43
1 files changed, 43 insertions, 0 deletions
diff --git a/tests/ui/closures/2229_closure_analysis/run_pass/tuple-struct-pattern-matching-with-methods.rs b/tests/ui/closures/2229_closure_analysis/run_pass/tuple-struct-pattern-matching-with-methods.rs
new file mode 100644
index 000000000..f3f44433c
--- /dev/null
+++ b/tests/ui/closures/2229_closure_analysis/run_pass/tuple-struct-pattern-matching-with-methods.rs
@@ -0,0 +1,43 @@
+// edition:2021
+//check-pass
+
+#[derive(Copy, Clone)]
+enum PointType {
+ TwoD(u32, u32),
+ ThreeD(u32, u32, u32)
+}
+
+// Testing tuple struct patterns
+struct Points {
+ points: Vec<PointType>,
+}
+
+impl Points {
+ pub fn test1(&mut self) -> Vec<usize> {
+ (0..self.points.len())
+ .filter_map(|i| {
+ match self.test2(i) {
+ PointType::TwoD (..) => Some(i),
+ PointType::ThreeD (..) => None,
+ }
+ })
+ .collect()
+ }
+
+ pub fn test2(&mut self, i: usize) -> PointType {
+ self.points[i]
+ }
+}
+
+fn main() {
+ let mut points = Points {
+ points: Vec::<PointType>::new()
+ };
+
+ points.points.push(PointType::ThreeD(0,0,0));
+ points.points.push(PointType::TwoD(0,0));
+ points.points.push(PointType::ThreeD(0,0,1));
+ points.points.push(PointType::TwoD(0,1));
+
+ println!("{:?}", points.test1());
+}