summaryrefslogtreecommitdiff
path: root/src/mongo/dbtests/stacktests.cpp
diff options
context:
space:
mode:
authorAntonin Kral <a.kral@bobek.cz>2012-08-29 20:54:51 +0200
committerAntonin Kral <a.kral@bobek.cz>2012-08-29 20:54:51 +0200
commit83957b73f9177f6e38bd5375bd93ca1f6a47188c (patch)
treef20b7d6ac9a9c64ff5bb6b5910a24abbb356b1d5 /src/mongo/dbtests/stacktests.cpp
parent5071d203970edd4c995493d810abe20987e76fe9 (diff)
Imported Upstream version 2.2.0upstream/2.2.0
Diffstat (limited to 'src/mongo/dbtests/stacktests.cpp')
-rw-r--r--src/mongo/dbtests/stacktests.cpp98
1 files changed, 98 insertions, 0 deletions
diff --git a/src/mongo/dbtests/stacktests.cpp b/src/mongo/dbtests/stacktests.cpp
new file mode 100644
index 00000000000..4adf7731073
--- /dev/null
+++ b/src/mongo/dbtests/stacktests.cpp
@@ -0,0 +1,98 @@
+
+#include "pch.h"
+
+#include "dbtests.h"
+
+#include "mongo/util/stack_introspect.h"
+
+class MyClass {
+public:
+ MyClass() {
+ a = mongo::inConstructorChain();
+ b = thing();
+ }
+
+ MyClass( int x ) {
+ a = mongo::inConstructorChain();
+ b = thing();
+ }
+
+ ~MyClass() {
+ z = mongo::inConstructorChain();
+ }
+
+ bool thing() {
+ return mongo::inConstructorChain();
+ }
+
+ bool a;
+ bool b;
+
+ static bool z;
+};
+
+bool MyClass::z;
+
+namespace foo {
+ class Bar {
+ public:
+ Bar() {
+ a = mongo::inConstructorChain();
+ }
+
+ bool a;
+ };
+};
+
+namespace StackTests {
+
+ class InCons {
+ public:
+ void run() {
+ for ( int i=0; i<3; i++ ) {
+ _run();
+ }
+ }
+
+ void _run() {
+
+ foo::Bar b;
+ ASSERT( b.a );
+
+ MyClass::z = false;
+
+ {
+ MyClass x;
+ ASSERT( x.a );
+ ASSERT( x.b );
+ ASSERT( ! x.thing() );
+ }
+
+ ASSERT( MyClass::z );
+
+ {
+ MyClass x(5);
+ ASSERT( x.a );
+ ASSERT( x.b );
+ ASSERT( ! x.thing() );
+ }
+
+ ASSERT( ! mongo::inConstructorChain() );
+ }
+ };
+
+ class All : public Suite {
+ public:
+
+ All() : Suite( "stack" ) {
+ }
+
+ void setupTests() {
+ if ( inConstructorChainSupported() ) {
+ DEV add< InCons >();
+ }
+ }
+
+ } myall;
+
+}