]> git.tdb.fi Git - ext/sigc++-2.0.git/blob - tests/test_trackable_move.cc
Adjust the name of the library to match upstream
[ext/sigc++-2.0.git] / tests / test_trackable_move.cc
1 // -*- c++ -*-
2 /* Copyright 2002, The libsigc++ Development Team
3  *  Assigned to public domain.  Use as you wish without restriction.
4  */
5
6 #include "testutilities.h"
7 #include <sstream>
8 #include <cstdlib>
9 #include <sigc++/trackable.h>
10 #include <sigc++/functors/slot.h>
11 #include <sigc++/functors/mem_fun.h>
12
13 namespace
14 {
15 std::ostringstream result_stream;
16
17 class my_class: public sigc::trackable
18 {
19 public:
20
21   my_class()
22   : i(0)
23   {}
24
25   my_class(const my_class& src) = delete;
26   my_class& operator=(const my_class& src) = delete;
27
28   my_class(my_class&& src)
29   : sigc::trackable(std::move(src)),
30     i(std::move(src.i))
31   {
32     src.i = 0;
33   }
34
35   my_class& operator=(my_class&& src)
36   {
37     sigc::trackable::operator=(std::move(src));
38     i = std::move(src.i);
39     src.i = 0;
40     return *this;
41   }
42
43   void foo()
44   {
45     result_stream << i;
46   }
47
48   int i;
49 };
50
51 } // end anonymous namespace
52
53 int main(int argc, char* argv[])
54 {
55   auto util = TestUtilities::get_instance();
56
57   if (!util->check_command_args(argc, argv))
58     return util->get_result_and_delete_instance() ? EXIT_SUCCESS : EXIT_FAILURE;
59
60   sigc::slot<void> sl;
61   {
62     my_class t;
63     t.i = 10;
64     sl = sigc::mem_fun0(t, &my_class::foo);
65     sl();
66     util->check_result(result_stream, "10");
67
68     //Create another trackable via a move:
69     my_class t2(std::move(t));
70     t2.i = 15;
71     result_stream.clear();
72
73     sl = sigc::mem_fun0(t2, &my_class::foo);
74
75     sl();
76     util->check_result(result_stream, "15");
77   }
78
79   return util->get_result_and_delete_instance() ? EXIT_SUCCESS : EXIT_FAILURE;
80 }