about summary refs log tree commit diff
path: root/library/core/tests
diff options
context:
space:
mode:
authorAlexis Bourget <alexis.bourget@gmail.com>2020-09-10 15:27:48 +0200
committerAlexis Bourget <alexis.bourget@gmail.com>2020-09-21 21:50:26 +0200
commit8904921c1d6b3636f4352f9dd6d4875132b89998 (patch)
treed12ce9e92bc433a13ad3ae012be9da4d9ca11082 /library/core/tests
parentac39debeba2b63a39a3833e2d7451f0b1f95b5f2 (diff)
downloadrust-8904921c1d6b3636f4352f9dd6d4875132b89998.tar.gz
rust-8904921c1d6b3636f4352f9dd6d4875132b89998.zip
Move array cycle test
Diffstat (limited to 'library/core/tests')
-rw-r--r--library/core/tests/array.rs29
1 files changed, 29 insertions, 0 deletions
diff --git a/library/core/tests/array.rs b/library/core/tests/array.rs
index 5aba1a5d958..da496ad7bcd 100644
--- a/library/core/tests/array.rs
+++ b/library/core/tests/array.rs
@@ -330,3 +330,32 @@ fn array_map_drop_safety() {
     assert_eq!(DROPPED.load(Ordering::SeqCst), num_to_create);
     panic!("test succeeded")
 }
+
+#[test]
+fn cell_allows_array_cycle() {
+    use core::cell::Cell;
+
+    #[derive(Debug)]
+    struct B<'a> {
+        a: [Cell<Option<&'a B<'a>>>; 2],
+    }
+
+    impl<'a> B<'a> {
+        fn new() -> B<'a> {
+            B { a: [Cell::new(None), Cell::new(None)] }
+        }
+    }
+
+    let b1 = B::new();
+    let b2 = B::new();
+    let b3 = B::new();
+
+    b1.a[0].set(Some(&b2));
+    b1.a[1].set(Some(&b3));
+
+    b2.a[0].set(Some(&b2));
+    b2.a[1].set(Some(&b3));
+
+    b3.a[0].set(Some(&b1));
+    b3.a[1].set(Some(&b2));
+}