summaryrefslogtreecommitdiff
path: root/src/mongo/dbtests/stacktests.cpp
diff options
context:
space:
mode:
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;
+
+}