test/scheduler6.cc

Code
Comments
Other
Rev Date Author Line
3827 19 Jul 19 peter 1 // $Id$
3827 19 Jul 19 peter 2
3827 19 Jul 19 peter 3 /*
3827 19 Jul 19 peter 4   Copyright (C) 2019 Peter Johansson
3827 19 Jul 19 peter 5
3827 19 Jul 19 peter 6   This file is part of the yat library, http://dev.thep.lu.se/yat
3827 19 Jul 19 peter 7
3827 19 Jul 19 peter 8   The yat library is free software; you can redistribute it and/or
3827 19 Jul 19 peter 9   modify it under the terms of the GNU General Public License as
3827 19 Jul 19 peter 10   published by the Free Software Foundation; either version 3 of the
3827 19 Jul 19 peter 11   License, or (at your option) any later version.
3827 19 Jul 19 peter 12
3827 19 Jul 19 peter 13   The yat library is distributed in the hope that it will be useful,
3827 19 Jul 19 peter 14   but WITHOUT ANY WARRANTY; without even the implied warranty of
3827 19 Jul 19 peter 15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
3827 19 Jul 19 peter 16   General Public License for more details.
3827 19 Jul 19 peter 17
3827 19 Jul 19 peter 18   You should have received a copy of the GNU General Public License
3827 19 Jul 19 peter 19   along with yat. If not, see <http://www.gnu.org/licenses/>.
3827 19 Jul 19 peter 20 */
3827 19 Jul 19 peter 21
3827 19 Jul 19 peter 22 #include <config.h>
3827 19 Jul 19 peter 23
3827 19 Jul 19 peter 24 #include "Suite.h"
3827 19 Jul 19 peter 25
3827 19 Jul 19 peter 26 #include "yat/utility/Scheduler.h"
3827 19 Jul 19 peter 27
3827 19 Jul 19 peter 28 #include <boost/make_shared.hpp>
3827 19 Jul 19 peter 29 #include <boost/shared_ptr.hpp>
3827 19 Jul 19 peter 30
3827 19 Jul 19 peter 31 #include <vector>
3827 19 Jul 19 peter 32
3827 19 Jul 19 peter 33 using namespace theplu::yat;
3827 19 Jul 19 peter 34 using namespace theplu::yat::utility;
3827 19 Jul 19 peter 35
3827 19 Jul 19 peter 36 class Sleeper : public Scheduler::Job
3827 19 Jul 19 peter 37 {
3827 19 Jul 19 peter 38 public:
3827 19 Jul 19 peter 39   Sleeper(int t) : time_(t), have_slept_(false) {}
3827 19 Jul 19 peter 40   void operator()(void)
3827 19 Jul 19 peter 41   {
3827 19 Jul 19 peter 42     sleep(time_);
3827 19 Jul 19 peter 43     std::cout << "Have slept for " << time_ << " seconds" << std::endl;
3827 19 Jul 19 peter 44     have_slept_ = true;
3827 19 Jul 19 peter 45   }
3827 19 Jul 19 peter 46 private:
3827 19 Jul 19 peter 47   int time_;
3827 19 Jul 19 peter 48 public:
3827 19 Jul 19 peter 49   bool have_slept_;
3827 19 Jul 19 peter 50 };
3827 19 Jul 19 peter 51
3827 19 Jul 19 peter 52
3827 19 Jul 19 peter 53 int main(int argc, char* argv[])
3827 19 Jul 19 peter 54 {
3827 19 Jul 19 peter 55   test::Suite suite(argc, argv);
3827 19 Jul 19 peter 56
3827 19 Jul 19 peter 57   Scheduler scheduler(2);
3827 19 Jul 19 peter 58   std::vector<boost::shared_ptr<Sleeper> > sleeper;
3827 19 Jul 19 peter 59   sleeper.reserve(5);
3827 19 Jul 19 peter 60   sleeper.push_back(boost::make_shared<Sleeper>(1));
3827 19 Jul 19 peter 61   sleeper.push_back(boost::make_shared<Sleeper>(4));
3827 19 Jul 19 peter 62   sleeper.push_back(boost::make_shared<Sleeper>(2));
3827 19 Jul 19 peter 63   sleeper.push_back(boost::make_shared<Sleeper>(3));
3827 19 Jul 19 peter 64   for (size_t i=0; i<sleeper.size(); ++i)
3827 19 Jul 19 peter 65     scheduler.submit(sleeper[i]);
3827 19 Jul 19 peter 66   scheduler.wait();
3827 19 Jul 19 peter 67   sleeper.push_back(boost::make_shared<Sleeper>(1));
3827 19 Jul 19 peter 68   scheduler.submit(sleeper.back());
3827 19 Jul 19 peter 69   scheduler.wait();
3827 19 Jul 19 peter 70
3827 19 Jul 19 peter 71   if (sleeper.back()->have_slept_ == false) {
3827 19 Jul 19 peter 72     suite.add(false);
3827 19 Jul 19 peter 73     suite.err() << "last sleeper never slept\n";
3827 19 Jul 19 peter 74   }
3827 19 Jul 19 peter 75
3828 23 Jul 19 peter 76   // just to test
3828 23 Jul 19 peter 77   scheduler.interrupt();
3827 19 Jul 19 peter 78
3827 19 Jul 19 peter 79   return suite.return_value();
3827 19 Jul 19 peter 80 }