aboutsummaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorJeffrey Yasskin <[email protected]>2010-07-13 14:53:27 +0800
committerGraydon Hoare <[email protected]>2010-07-16 08:13:08 +0800
commit7dd464fdb55dfdc6ade52c65f551504632280772 (patch)
tree6bbaae13f14aaaf349437b97441aa3d30b7bda96 /src/test
parentAdd a _vec.slice function that'll hold us over until .(a,b) syntax is (diff)
downloadrust-7dd464fdb55dfdc6ade52c65f551504632280772.tar.xz
rust-7dd464fdb55dfdc6ade52c65f551504632280772.zip
Initial test that the compiler runs destructors in the right order.
Diffstat (limited to 'src/test')
-rw-r--r--src/test/run-pass/destructor-ordering.rs29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/test/run-pass/destructor-ordering.rs b/src/test/run-pass/destructor-ordering.rs
new file mode 100644
index 00000000..e00966f1
--- /dev/null
+++ b/src/test/run-pass/destructor-ordering.rs
@@ -0,0 +1,29 @@
+// We share an instance of this type among all the destructor-order
+// checkers. It tracks how many destructors have run so far and
+// 'fail's when one runs out of order.
+// FIXME: Make it easier to collect a failure message.
+state obj order_tracker(mutable int init) {
+ fn assert_order(int expected, str fail_message) {
+ if (expected != init) {
+ log expected;
+ log " != ";
+ log init;
+ log fail_message;
+ fail;
+ }
+ init += 1;
+ }
+}
+
+
+obj dorder(@order_tracker tracker, int order, str message) {
+ drop {
+ tracker.assert_order(order, message);
+ }
+}
+
+fn main() {
+ auto tracker = @order_tracker(0);
+ dorder(tracker, 1, "Reverse decl order");
+ dorder(tracker, 0, "Reverse decl order");
+} \ No newline at end of file