diff options
Diffstat (limited to 'src/mongo/dbtests/stacktests.cpp')
| -rw-r--r-- | src/mongo/dbtests/stacktests.cpp | 98 |
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; + +} |
