From 7dd464fdb55dfdc6ade52c65f551504632280772 Mon Sep 17 00:00:00 2001 From: Jeffrey Yasskin Date: Tue, 13 Jul 2010 14:53:27 +0800 Subject: Initial test that the compiler runs destructors in the right order. --- src/test/run-pass/destructor-ordering.rs | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/test/run-pass/destructor-ordering.rs (limited to 'src/test') 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 -- cgit v1.2.3