summaryrefslogtreecommitdiff
path: root/ACE/contrib/utility/Test/ExH/Compound/compound.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/contrib/utility/Test/ExH/Compound/compound.cpp')
-rw-r--r--ACE/contrib/utility/Test/ExH/Compound/compound.cpp115
1 files changed, 115 insertions, 0 deletions
diff --git a/ACE/contrib/utility/Test/ExH/Compound/compound.cpp b/ACE/contrib/utility/Test/ExH/Compound/compound.cpp
new file mode 100644
index 00000000000..df06353d4b9
--- /dev/null
+++ b/ACE/contrib/utility/Test/ExH/Compound/compound.cpp
@@ -0,0 +1,115 @@
+// file : Test/ExH/Compound/compound.cpp
+// author : Boris Kolpackov <boris@kolpackov.net>
+// copyright : Copyright (c) 2002-2003 Boris Kolpackov
+// license : http://kolpackov.net/license.html
+
+#include "Utility/ExH/Compound.hpp"
+
+#include <string>
+
+using namespace Utility::ExH;
+
+struct E {};
+
+void postcondition (bool p)
+{
+ if (!p) throw E ();
+}
+
+class Base
+{
+protected:
+ Base () throw ()
+ {
+ }
+
+ void
+ init (char const* description) throw ()
+ {
+ str_ = description;
+ }
+
+ char const*
+ what () const throw ()
+ {
+ return str_.c_str ();
+ }
+
+public:
+ std::string str_;
+};
+
+class A_ {};
+typedef
+Compound<A_, Base>
+A;
+
+struct StringHolder
+{
+ StringHolder (char const* s)
+ : str_ (s)
+ {
+ }
+
+ operator std::string () const
+ {
+ return str_;
+ }
+
+ std::string str_;
+};
+
+
+int main ()
+{
+ try
+ {
+ // Compound (char const*)
+ //
+ {
+ A a ("hello");
+
+ postcondition (a.str_ == "hello");
+ }
+
+ // Compound (T const&)
+ //
+ {
+ StringHolder a ("hello");
+ A b (a);
+
+ postcondition (b.str_ == "hello");
+ }
+
+ // Compound (Compound const&)
+ //
+ {
+ A a ("hello");
+ A b (a);
+
+ postcondition (b.str_ == "hello");
+ }
+
+ // ~Compound ()
+ //
+
+ // operator= (Compound const&)
+ //
+ {
+ A a ("hello");
+ A b ("foo");
+ b = a;
+
+ postcondition (b.str_ == "hello");
+ }
+
+ // Compound ()
+ //
+
+ }
+ catch (...)
+ {
+ return -1;
+ }
+}
+//$Id$