summaryrefslogtreecommitdiff
path: root/samples/test
diff options
context:
space:
mode:
Diffstat (limited to 'samples/test')
-rw-r--r--samples/test/for_underscore_drop.rs18
-rw-r--r--samples/test/scoping_rules.rs21
2 files changed, 39 insertions, 0 deletions
diff --git a/samples/test/for_underscore_drop.rs b/samples/test/for_underscore_drop.rs
new file mode 100644
index 00000000..e590fee0
--- /dev/null
+++ b/samples/test/for_underscore_drop.rs
@@ -0,0 +1,18 @@
+
+struct DropFlag<'a>(&'a mut i32);
+impl<'a> ::std::ops::Drop for DropFlag<'a>
+{
+ fn drop(&mut self) {
+ *self.0 += 1;
+ }
+}
+
+#[test]
+fn values_in_for_loop_dropped()
+{
+ let mut foo = 0;
+ for _ in Some(DropFlag(&mut foo))
+ {
+ }
+ assert_eq!(foo, 1);
+}
diff --git a/samples/test/scoping_rules.rs b/samples/test/scoping_rules.rs
new file mode 100644
index 00000000..9878fd16
--- /dev/null
+++ b/samples/test/scoping_rules.rs
@@ -0,0 +1,21 @@
+
+struct DropFlag<'a>(&'a ::std::cell::Cell<i32>);
+impl<'a> ::std::ops::Drop for DropFlag<'a>
+{
+ fn drop(&mut self) {
+ self.0.set( self.0.get() + 1 );
+ }
+}
+
+// Any temporaries defined in the expression part of a statement (i.e. in the yeilded part of a
+// block) are stored in the parent scope.
+#[test]
+fn temporaries_in_yielded_expr()
+{
+ let drop_count = ::std::cell::Cell::new(0);
+ let _foo = ({ DropFlag(&drop_count).0 }, assert_eq!(drop_count.get(), 0) );
+ drop(_foo);
+ assert_eq!(drop_count.get(), 1);
+}
+
+